From e93fd760e9ebd44c6b75928ad0e67f0c7634b72b Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Thu, 4 Jan 2024 18:12:00 +0000 Subject: [PATCH 01/78] Add reject confirm screen for blindsigning flow --- app/src/apdu_sign.c | 80 +----------------- app/src/apdu_sign.h | 4 - app/src/ui_stream.h | 3 + app/src/ui_stream_nbgl.c | 71 +++++++++++++++- .../reject_review.png | Bin 5076 -> 8273 bytes .../rejected.png | Bin 0 -> 5076 bytes .../tbtl_review_1.png | Bin 13620 -> 16807 bytes .../test_parsing_errors/reject_review.png | Bin 5076 -> 8273 bytes .../test_parsing_errors/rejected.png | Bin 0 -> 5076 bytes tests/integration/stax/utils.py | 13 ++- 10 files changed, 79 insertions(+), 92 deletions(-) create mode 100644 tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/rejected.png create mode 100644 tests/integration/stax/snapshots/test_parsing_errors/rejected.png diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index 90c7057fb..b1c0e4796 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -51,7 +51,6 @@ static void send_reject(int); static void send_continue(void); static void send_cancel(void); static void refill(void); -static void pass_from_clear_to_blind(void); static void stream_cb(tz_ui_cb_type_t); static void handle_first_apdu(command_t *); static void handle_first_apdu_clear(command_t *); @@ -151,82 +150,6 @@ send_continue(void) TZ_POSTAMBLE; } -#ifdef HAVE_NBGL - -static void -cancel_operation(uint8_t reject_code) -{ - TZ_PREAMBLE(("void")); - global.keys.apdu.sign.received_last_msg = true; - stream_cb(reject_code); - global.step = ST_IDLE; - nbgl_useCaseStatus("Transaction rejected", false, ui_home_init); - - TZ_POSTAMBLE; -} - -static void -cancel_operation_blindsign(void) -{ - cancel_operation(TZ_UI_STREAM_CB_BLINDSIGN_REJECT); -} - -static void -blindsign_splash(void) -{ - TZ_PREAMBLE(("void")); - nbgl_useCaseReviewStart( - &C_round_warning_64px, "Blind signing", - "This transaction can not be securely interpreted by Ledger Stax. It " - "might put your assets at risk.", - "Reject transaction", pass_from_clear_to_blind, - cancel_operation_blindsign); - - TZ_POSTAMBLE; -} - -static void -handle_blindsigning(bool confirm) -{ - TZ_PREAMBLE(("void")); - if (confirm) { - if (!N_settings.blindsigning) - toggle_blindsigning(); - nbgl_useCaseReviewStart(&C_round_check_64px, "Blind signing enabled", - NULL, "Reject transaction", blindsign_splash, - cancel_operation_blindsign); - - } else { - cancel_operation_blindsign(); - } - TZ_POSTAMBLE; -} - -void -switch_to_blindsigning(__attribute__((unused)) const char *err_type, - const char *err_code) -{ - TZ_PREAMBLE(("void")); - PRINTF("[DEBUG] refill_error: global.step = %d\n", global.step); - TZ_ASSERT(EXC_UNEXPECTED_STATE, global.step == ST_CLEAR_SIGN); - global.keys.apdu.sign.step = SIGN_ST_WAIT_USER_INPUT; - global.step = ST_BLIND_SIGN; - if (N_settings.blindsigning) { - nbgl_useCaseReviewStart(&C_round_warning_64px, - "Blind signing required:\nParsing Error", - err_code, "Reject transaction", - blindsign_splash, cancel_operation_blindsign); - } else { - nbgl_useCaseChoice(&C_round_warning_64px, - "Enable blind signing to authorize this " - "transaction:\nParsing Error", - err_code, "Enable blind signing", - "Reject transaction", handle_blindsigning); - } - - TZ_POSTAMBLE; -} -#endif static void refill_blo_im_full(void) @@ -658,8 +581,7 @@ reviewChoice(bool confirm) if (confirm) { nbgl_useCaseStatus("TRANSACTION\nSIGNED", true, accept_blindsign_cb); } else { - nbgl_useCaseStatus("Transaction rejected", false, - reject_blindsign_cb); + tz_reject_ui(); } FUNC_LEAVE(); diff --git a/app/src/apdu_sign.h b/app/src/apdu_sign.h index b62094a0c..0880a6bed 100644 --- a/app/src/apdu_sign.h +++ b/app/src/apdu_sign.h @@ -66,7 +66,3 @@ typedef struct { } blind; } u; } apdu_sign_state_t; - -#ifdef HAVE_NBGL -void switch_to_blindsigning(const char *, const char *); -#endif diff --git a/app/src/ui_stream.h b/app/src/ui_stream.h index 7101dfcf4..a599e5d40 100644 --- a/app/src/ui_stream.h +++ b/app/src/ui_stream.h @@ -177,3 +177,6 @@ void tz_ui_stream_close(void); void tz_ui_stream(void); void tz_ui_stream_start(void); tz_ui_cb_type_t tz_ui_stream_get_cb_type(void); +#ifdef HAVE_NBGL +void tz_reject_ui(void); +#endif diff --git a/app/src/ui_stream_nbgl.c b/app/src/ui_stream_nbgl.c index ff3784439..388d3dc92 100644 --- a/app/src/ui_stream_nbgl.c +++ b/app/src/ui_stream_nbgl.c @@ -30,6 +30,7 @@ void tz_ui_stream_start(void); void drop_last_screen(void); void push_str(const char *, size_t, char **); +void switch_to_blindsigning(const char *, const char *); void tz_cancel_ui(void) @@ -54,7 +55,11 @@ tz_reject(void) global.keys.apdu.sign.step = SIGN_ST_WAIT_USER_INPUT; global.keys.apdu.sign.received_last_msg = true; - s->cb(TZ_UI_STREAM_CB_REJECT); + if (global.step == ST_BLIND_SIGN) { + s->cb(TZ_UI_STREAM_CB_BLINDSIGN_REJECT); + } else { + s->cb(TZ_UI_STREAM_CB_REJECT); + } global.step = ST_IDLE; nbgl_useCaseStatus("Transaction rejected", false, ui_home_init); @@ -73,6 +78,70 @@ tz_reject_ui(void) FUNC_LEAVE(); } +static void +start_blindsign(void) +{ + FUNC_ENTER(("void")); + + tz_ui_stream_t *s = &global.stream; + s->cb(TZ_UI_STREAM_CB_BLINDSIGN); + + FUNC_LEAVE(); +} + +static void +blindsign_splash(void) +{ + TZ_PREAMBLE(("void")); + nbgl_useCaseReviewStart( + &C_round_warning_64px, "Blind signing", + "This transaction can not be securely interpreted by Ledger Stax. It " + "might put your assets at risk.", + "Reject transaction", start_blindsign, tz_reject_ui); + + TZ_POSTAMBLE; +} + +static void +handle_blindsigning(bool confirm) +{ + TZ_PREAMBLE(("void")); + if (confirm) { + if (!N_settings.blindsigning) + toggle_blindsigning(); + nbgl_useCaseReviewStart(&C_round_check_64px, "Blind signing enabled", + NULL, "Reject transaction", blindsign_splash, + tz_reject_ui); + + } else { + tz_reject_ui(); + } + TZ_POSTAMBLE; +} + +void +switch_to_blindsigning(__attribute__((unused)) const char *err_type, + const char *err_code) +{ + TZ_PREAMBLE(("void")); + PRINTF("[DEBUG] refill_error: global.step = %d\n", global.step); + TZ_ASSERT(EXC_UNEXPECTED_STATE, global.step == ST_CLEAR_SIGN); + global.keys.apdu.sign.step = SIGN_ST_WAIT_USER_INPUT; + global.step = ST_BLIND_SIGN; + if (N_settings.blindsigning) { + nbgl_useCaseReviewStart( + &C_round_warning_64px, "Blind signing required:\nParsing Error", + err_code, "Reject transaction", blindsign_splash, tz_reject_ui); + } else { + nbgl_useCaseChoice(&C_round_warning_64px, + "Enable blind signing to authorize this " + "transaction:\nParsing Error", + err_code, "Enable blind signing", + "Reject transaction", handle_blindsigning); + } + + TZ_POSTAMBLE; +} void expert_mode_splash(void) { diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/reject_review.png b/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/reject_review.png index cebc8beded3da2cc390e824ea38eac4f84cbf349..babad9890872f63cb50017836f9fcc0163367cbd 100644 GIT binary patch literal 8273 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 literal 5076 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 diff --git a/tests/integration/stax/snapshots/test_parsing_errors/reject_review.png b/tests/integration/stax/snapshots/test_parsing_errors/reject_review.png index cebc8beded3da2cc390e824ea38eac4f84cbf349..babad9890872f63cb50017836f9fcc0163367cbd 100644 GIT binary patch literal 8273 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 literal 5076 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 UGkp&N{?_T8^9?-Ha2kdE7cFCueE Date: Fri, 5 Jan 2024 14:07:15 +0000 Subject: [PATCH 02/78] app: fix swap tests --- .github/workflows/swap.yml | 2 +- app/src/handle_swap.c | 17 +++++------------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/.github/workflows/swap.yml b/.github/workflows/swap.yml index 69f993ba2..479379992 100644 --- a/.github/workflows/swap.yml +++ b/.github/workflows/swap.yml @@ -12,7 +12,7 @@ jobs: uses: functori/app-exchange/.github/workflows/reusable_swap_functional_tests.yml@ebc5932d939e2bad5eaf3d5e316626169da6ff23 with: repo_for_exchange: 'functori/app-exchange' - branch_for_exchange: 'ajinkyaraj-23@display-source-field' + branch_for_exchange: 'develop' branch_for_tezos: ${{ github.ref }} run_for_devices: '["nanos", "nanosp", "stax"]' test_filter: '"tezos_new"' diff --git a/app/src/handle_swap.c b/app/src/handle_swap.c index 7d4278801..c83bed8e6 100644 --- a/app/src/handle_swap.c +++ b/app/src/handle_swap.c @@ -33,8 +33,10 @@ #include "parser/num_parser.h" // based on app-exchange -#define TICKER_MAX_SIZE 9 +#define TICKER "XTZ" #define ADDRESS_MAX_SIZE 63 +/* the smallest unit is microtez */ +#define DECIMALS 6 /* Check check_address_parameters_t.address_to_check against specified * parameters. @@ -102,15 +104,6 @@ swap_handle_get_printable_amount(get_printable_amount_parameters_t *params) FUNC_ENTER(("params=%p", params)); uint64_t amount; - uint8_t decimals; - char ticker[TICKER_MAX_SIZE]; - - if (!swap_parse_config(params->coin_configuration, - params->coin_configuration_length, ticker, - sizeof(ticker), &decimals)) { - PRINTF("[ERROR] Fail to parse config\n"); - goto error; - } if (!swap_str_to_u64(params->amount, params->amount_length, &amount)) { PRINTF("[ERROR] Fail to parse amount\n"); @@ -119,13 +112,13 @@ swap_handle_get_printable_amount(get_printable_amount_parameters_t *params) if (!format_fpu64_trimmed(params->printable_amount, sizeof(params->printable_amount), amount, - decimals)) { + DECIMALS)) { PRINTF("[ERROR] Fail to print amount\n"); goto error; } strlcat(params->printable_amount, " ", sizeof(params->printable_amount)); - strlcat(params->printable_amount, ticker, + strlcat(params->printable_amount, TICKER, sizeof(params->printable_amount)); FUNC_LEAVE(); From aea6f3b02fa3831867acc8d62ec1ac2e542c49e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Mon, 8 Jan 2024 16:28:15 +0100 Subject: [PATCH 03/78] Swap: count the number of reveals seen in the operation --- app/src/handle_swap.c | 4 ++-- app/src/parser/operation_parser.c | 3 +++ app/src/parser/operation_state.h | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/handle_swap.c b/app/src/handle_swap.c index c83bed8e6..180a022e4 100644 --- a/app/src/handle_swap.c +++ b/app/src/handle_swap.c @@ -217,8 +217,8 @@ swap_check_validity(void) os_sched_exit(-1); G_swap_response_ready = true; - PRINTF("[DEBUG] batch_index = %u, tag=%d\n", op->batch_index, - op->last_tag); + PRINTF("[DEBUG] batch_index = %u, nb_reveal=%d, tag=%d\n", + op->batch_index, op->nb_reveal, op->last_tag); TZ_ASSERT(EXC_REJECT, op->batch_index == 1); TZ_ASSERT(EXC_REJECT, op->last_tag == TZ_OPERATION_TAG_TRANSACTION); TZ_ASSERT(EXC_REJECT, op->last_amount == G_swap_params.amount); diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 6654be925..22a82fa63 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -288,6 +288,7 @@ tz_operation_parser_init(tz_parser_state *state, uint16_t size, op->batch_index = 0; #ifdef HAVE_SWAP op->last_tag = TZ_OPERATION_TAG_END; + op->nb_reveal = 0; op->last_fee = 0; op->last_amount = 0; #endif // HAVE_SWAP @@ -403,6 +404,8 @@ tz_operation_parser_step(tz_parser_state *state) tz_must(tz_parser_read(state, &t)); #ifdef HAVE_SWAP op->last_tag = t; + if (t == TZ_OPERATION_TAG_REVEAL) + op->nb_reveal++; #endif // HAVE_SWAP for (d = tz_operation_descriptors; d->tag != TZ_OPERATION_TAG_END; d++) { diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index 3848236af..4ae37021c 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -157,6 +157,7 @@ typedef struct { uint16_t batch_index; // to print a sequence number #ifdef HAVE_SWAP tz_operation_tag last_tag; + uint16_t nb_reveal; uint64_t last_fee; uint64_t last_amount; #endif // HAVE_SWAP From 3a987ad3d578623a804447ea7c7920c1f4fffcaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Mon, 8 Jan 2024 16:29:24 +0100 Subject: [PATCH 04/78] Swap: allow one reveal before the transaction --- app/src/handle_swap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/handle_swap.c b/app/src/handle_swap.c index 180a022e4..14b01eb7e 100644 --- a/app/src/handle_swap.c +++ b/app/src/handle_swap.c @@ -219,7 +219,8 @@ swap_check_validity(void) PRINTF("[DEBUG] batch_index = %u, nb_reveal=%d, tag=%d\n", op->batch_index, op->nb_reveal, op->last_tag); - TZ_ASSERT(EXC_REJECT, op->batch_index == 1); + TZ_ASSERT(EXC_REJECT, op->nb_reveal <= 1); + TZ_ASSERT(EXC_REJECT, op->batch_index - op->nb_reveal == 1); TZ_ASSERT(EXC_REJECT, op->last_tag == TZ_OPERATION_TAG_TRANSACTION); TZ_ASSERT(EXC_REJECT, op->last_amount == G_swap_params.amount); TZ_ASSERT(EXC_REJECT, op->last_fee == G_swap_params.fee); From 14ef316c96f21984f64b87c1c6ef1ca26557d1d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Mon, 8 Jan 2024 16:33:39 +0100 Subject: [PATCH 05/78] Swap: do not check extra_id param anymore --- app/src/handle_swap.c | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/app/src/handle_swap.c b/app/src/handle_swap.c index c83bed8e6..a3e582eb8 100644 --- a/app/src/handle_swap.c +++ b/app/src/handle_swap.c @@ -58,17 +58,6 @@ swap_handle_check_address(check_address_parameters_t *params) goto error; } - if (params->extra_id_to_check == NULL) { - PRINTF("[ERROR] Extra id is null\n"); - goto error; - } - - if (params->extra_id_to_check[0] != '\0') { - PRINTF("[ERROR] Extra id is not empty: %s\n", - params->extra_id_to_check); - goto error; - } - char address[TZ_CAPTURE_BUFFER_SIZE] = {0}; // Always tz1 @@ -177,17 +166,6 @@ swap_copy_transaction_parameters(create_transaction_parameters_t *params) goto error; } - if (params->destination_address_extra_id == NULL) { - PRINTF("[ERROR] Destination address extra id is null\n"); - goto error; - } - - if (params->destination_address_extra_id[0] != '\0') { - PRINTF("[ERROR] Destination address extra id is not empty: %s\n", - params->destination_address_extra_id); - goto error; - } - os_explicit_zero_BSS_segment(); G_swap_transaction_result = ¶ms->result; From 4409c377bb182f092c7bdbf804bce39c10bc7e36 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Tue, 9 Jan 2024 17:50:54 +0000 Subject: [PATCH 06/78] Dont display any UI while processing swap transactions --- .github/workflows/swap.yml | 2 +- app/src/apdu_pubkey.c | 3 +- app/src/apdu_sign.c | 87 ++++++++++++++++++++++++++++---------- app/src/app_main.c | 12 +++++- app/src/globals.h | 1 + app/src/keys.c | 17 ++++++++ app/src/ui_stream_nbgl.c | 1 - 7 files changed, 95 insertions(+), 28 deletions(-) diff --git a/.github/workflows/swap.yml b/.github/workflows/swap.yml index 479379992..ffd20e233 100644 --- a/.github/workflows/swap.yml +++ b/.github/workflows/swap.yml @@ -12,7 +12,7 @@ jobs: uses: functori/app-exchange/.github/workflows/reusable_swap_functional_tests.yml@ebc5932d939e2bad5eaf3d5e316626169da6ff23 with: repo_for_exchange: 'functori/app-exchange' - branch_for_exchange: 'develop' + branch_for_exchange: 'ajinkyaraj-186@dont-display-UI-for-swap-on-tezos' branch_for_tezos: ${{ github.ref }} run_for_devices: '["nanos", "nanosp", "stax"]' test_filter: '"tezos_new"' diff --git a/app/src/apdu_pubkey.c b/app/src/apdu_pubkey.c index a80d7bb7f..e2dd49759 100644 --- a/app/src/apdu_pubkey.c +++ b/app/src/apdu_pubkey.c @@ -167,7 +167,8 @@ handle_apdu_get_public_key(command_t *cmd) bool prompt = cmd->ins == INS_PROMPT_PUBLIC_KEY; TZ_PREAMBLE(("cmd=%p", cmd)); - TZ_ASSERT(EXC_UNEXPECTED_STATE, global.step == ST_IDLE); + TZ_ASSERT(EXC_UNEXPECTED_STATE, + global.step == ST_IDLE || global.step == ST_SWAP_SIGN); TZ_ASSERT(EXC_WRONG_PARAM, cmd->p1 == 0); // do not expose pks without prompt through U2F (permissionless legacy diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index b1c0e4796..365e5bf2a 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -30,6 +30,10 @@ #include #include +#ifdef HAVE_SWAP +#include +#endif + #include "apdu.h" #include "apdu_sign.h" #include "globals.h" @@ -158,8 +162,15 @@ refill_blo_im_full(void) size_t wrote = 0; TZ_PREAMBLE(("void")); - global.keys.apdu.sign.step = SIGN_ST_WAIT_USER_INPUT; +#ifdef HAVE_SWAP + if (G_called_from_swap) { + tz_parser_flush(st, global.line_buf, TZ_UI_STREAM_CONTENTS_SIZE); + // invoke refill until we consume entire msg. + TZ_SUCCEED(); + } +#endif + global.keys.apdu.sign.step = SIGN_ST_WAIT_USER_INPUT; #ifdef HAVE_BAGL if (st->field_info.is_field_complex && !N_settings.expert_mode) { tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, st->field_info.field_name, @@ -208,7 +219,6 @@ refill_blo_im_full(void) } #endif - tz_parser_flush_up_to(st, global.line_buf, TZ_UI_STREAM_CONTENTS_SIZE, wrote); TZ_POSTAMBLE; @@ -228,7 +238,12 @@ refill_blo_done(void) refill_blo_im_full(); TZ_SUCCEED(); } + global.keys.apdu.sign.step = SIGN_ST_WAIT_USER_INPUT; + if (global.step == ST_SWAP_SIGN) { + TZ_CHECK(sign_packet()); + TZ_SUCCEED(); + } #ifdef HAVE_BAGL tz_ui_stream_push_accept_reject(); #endif @@ -244,6 +259,11 @@ refill_error(void) TZ_PREAMBLE(("void")); global.keys.apdu.sign.step = SIGN_ST_WAIT_USER_INPUT; +#ifdef HAVE_SWAP + if (G_called_from_swap) { + TZ_FAIL(EXC_PARSE_ERROR); + } +#endif #ifdef HAVE_BAGL tz_ui_stream_push_all(TZ_UI_STREAM_CB_NOCB, "Parsing error", @@ -438,10 +458,11 @@ handle_first_apdu(command_t *cmd) */ global.keys.apdu.sign.tag = 0; - TZ_ASSERT(EXC_UNEXPECTED_STATE, global.step == ST_CLEAR_SIGN); - TZ_CHECK(handle_first_apdu_clear(cmd)); + TZ_ASSERT(EXC_UNEXPECTED_STATE, + global.step == ST_CLEAR_SIGN || global.step == ST_SWAP_SIGN); + io_send_sw(SW_OK); global.keys.apdu.sign.step = SIGN_ST_WAIT_DATA; @@ -451,23 +472,36 @@ handle_first_apdu(command_t *cmd) static void handle_first_apdu_clear(__attribute__((unused)) command_t *cmd) { + TZ_PREAMBLE(("global.step=%d", global.step)); tz_parser_state *st = &global.keys.apdu.sign.u.clear.parser_state; global.keys.apdu.sign.u.clear.received_msg = false; - - tz_ui_stream_init(stream_cb); - + // NO ui display during swap. +#ifdef HAVE_SWAP + if (!G_called_from_swap) { +#endif + tz_ui_stream_init(stream_cb); + global.step = ST_CLEAR_SIGN; + if (global.step == ST_CLEAR_SIGN) { #ifdef TARGET_NANOS - tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Review operation", "", - TZ_UI_LAYOUT_HOME_PB, TZ_UI_ICON_EYE); + tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Review operation", "", + TZ_UI_LAYOUT_HOME_PB, TZ_UI_ICON_EYE); #elif defined(HAVE_BAGL) - tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Review", "operation", - TZ_UI_LAYOUT_HOME_PB, TZ_UI_ICON_EYE); + tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Review", "operation", + TZ_UI_LAYOUT_HOME_PB, TZ_UI_ICON_EYE); +#endif + } +#ifdef HAVE_SWAP + } else { + PRINTF("[DEBUG] If called from SWAP : global.step =%d\n", + global.step); + } #endif - tz_operation_parser_init(st, TZ_UNKNOWN_SIZE, false); tz_parser_refill(st, NULL, 0); tz_parser_flush(st, global.line_buf, TZ_UI_STREAM_CONTENTS_SIZE); + + TZ_POSTAMBLE; } static void @@ -503,7 +537,9 @@ handle_data_apdu(command_t *cmd) // clang-format off switch (global.step) { - case ST_CLEAR_SIGN: TZ_CHECK(handle_data_apdu_clear(cmd)); break; + case ST_CLEAR_SIGN: + case ST_SWAP_SIGN: + TZ_CHECK(handle_data_apdu_clear(cmd)); break; case ST_BLIND_SIGN: TZ_CHECK(handle_data_apdu_blind()); break; default: TZ_FAIL(EXC_UNEXPECTED_STATE); break; } @@ -531,10 +567,16 @@ handle_data_apdu_clear(command_t *cmd) if (PKT_IS_LAST(cmd)) tz_operation_parser_set_size( st, global.keys.apdu.sign.u.clear.total_length); - TZ_CHECK(refill()); - if (global.keys.apdu.sign.step == SIGN_ST_WAIT_USER_INPUT) - tz_ui_stream(); - + if (global.step == ST_SWAP_SIGN) { + do { + TZ_CHECK(refill()); + } while (global.step == ST_SWAP_SIGN); + } else { + TZ_CHECK(refill()); + if (global.keys.apdu.sign.step == SIGN_ST_WAIT_USER_INPUT + && global.step != ST_SWAP_SIGN) + tz_ui_stream(); + } TZ_POSTAMBLE; } @@ -685,19 +727,18 @@ handle_apdu_sign(command_t *cmd) TZ_ASSERT(EXC_WRONG_LENGTH_FOR_INS, cmd->lc <= MAX_APDU_SIZE); if (PKT_IS_FIRST(cmd)) { - TZ_ASSERT(EXC_UNEXPECTED_STATE, global.step == ST_IDLE); + TZ_ASSERT(EXC_UNEXPECTED_STATE, + global.step == ST_IDLE || global.step == ST_SWAP_SIGN); memset(&global.keys, 0, sizeof(global.keys)); - - global.step = ST_CLEAR_SIGN; - TZ_CHECK(handle_first_apdu(cmd)); global.keys.apdu.sign.return_hash = return_hash; goto end; } - TZ_ASSERT(EXC_UNEXPECTED_STATE, - global.step == ST_BLIND_SIGN || global.step == ST_CLEAR_SIGN); + TZ_ASSERT(EXC_UNEXPECTED_STATE, global.step == ST_BLIND_SIGN + || global.step == ST_CLEAR_SIGN + || global.step == ST_SWAP_SIGN); TZ_ASSERT(EXC_INVALID_INS, return_hash == global.keys.apdu.sign.return_hash); TZ_CHECK(handle_data_apdu(cmd)); diff --git a/app/src/app_main.c b/app/src/app_main.c index 00726792d..c1505899a 100644 --- a/app/src/app_main.c +++ b/app/src/app_main.c @@ -24,7 +24,9 @@ #include #include #include - +#ifdef HAVE_SWAP +#include +#endif #include "apdu.h" #include "app_main.h" #include "globals.h" @@ -124,9 +126,15 @@ app_main(void) /* ST_ERROR implies that we are completely unknown and need to reset */ global.step = ST_ERROR; - for (;;) { TZ_PREAMBLE(("void")); +#ifdef HAVE_SWAP + if (G_called_from_swap) { + global.step = ST_SWAP_SIGN; + } + PRINTF("[SWAP] : G_called_from_swap = %d , global.step = %d", + G_called_from_swap, global.step); +#endif if (global.step == ST_ERROR) { global.step = ST_IDLE; ui_home_init(); diff --git a/app/src/globals.h b/app/src/globals.h index 2da08ad67..b0510da81 100644 --- a/app/src/globals.h +++ b/app/src/globals.h @@ -75,6 +75,7 @@ typedef enum { ST_CLEAR_SIGN, ST_BLIND_SIGN, ST_PROMPT, + ST_SWAP_SIGN, ST_ERROR } main_step_t; diff --git a/app/src/keys.c b/app/src/keys.c index 7dca80111..92bb8392b 100644 --- a/app/src/keys.c +++ b/app/src/keys.c @@ -163,6 +163,23 @@ public_key_hash(uint8_t *hash_out, size_t hash_out_size, TZ_POSTAMBLE; } +/** + * @brief Sign a hash with eddsa using the device seed derived from the + * specified bip32 path and seed key. + * + * @param[in] derivation_type Derivation type, ex. ED25519 + * + * @param[in] path Bip32 path to use for derivation. + * + * @param[in] hash Digest of the message to be signed. + * + * @param[in] hash_len Length of the digest in octets. + * + * @param[out] sig Buffer where to store the signature. + * + * @param[in] sig_len Length of the signature buffer, updated with + * signature length. + */ void sign(derivation_type_t derivation_type, const bip32_path_t *path, const uint8_t *hash, size_t hashlen, uint8_t *sig, size_t *siglen) diff --git a/app/src/ui_stream_nbgl.c b/app/src/ui_stream_nbgl.c index 388d3dc92..57b49dd1f 100644 --- a/app/src/ui_stream_nbgl.c +++ b/app/src/ui_stream_nbgl.c @@ -286,7 +286,6 @@ tz_ui_stream_init(void (*cb)(uint8_t)) nbgl_useCaseReviewStart(&C_tezos, "Review request to sign operation", NULL, "Reject request", tz_ui_review_start, tz_reject_ui); - FUNC_LEAVE(); } From 6f484aa8a7b74cc37cbbca723207581d3cf55507 Mon Sep 17 00:00:00 2001 From: Emma Turner Date: Fri, 5 Jan 2024 15:45:08 +0000 Subject: [PATCH 07/78] CI: use default app-exchange repo app-exchange workflow was updated to allow overriding of app repo --- .github/workflows/swap.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/swap.yml b/.github/workflows/swap.yml index ffd20e233..e690d74f0 100644 --- a/.github/workflows/swap.yml +++ b/.github/workflows/swap.yml @@ -1,18 +1,17 @@ -name: Swap feature tests +name: Swap functional tests on: workflow_dispatch: push: branches: - main + - develop pull_request: jobs: job_functional_tests: - uses: functori/app-exchange/.github/workflows/reusable_swap_functional_tests.yml@ebc5932d939e2bad5eaf3d5e316626169da6ff23 + uses: LedgerHQ/app-exchange/.github/workflows/reusable_swap_functional_tests.yml@develop with: - repo_for_exchange: 'functori/app-exchange' - branch_for_exchange: 'ajinkyaraj-186@dont-display-UI-for-swap-on-tezos' branch_for_tezos: ${{ github.ref }} - run_for_devices: '["nanos", "nanosp", "stax"]' - test_filter: '"tezos_new"' + repo_for_tezos: ${{ github.repository }} + test_filter: '"XTZ or xtz or Tezos or tezos"' From 54c4bacbeb5331e49f7a8378a86f4e80f4fc2952 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Wed, 10 Jan 2024 14:05:53 +0000 Subject: [PATCH 08/78] Fix infinite loop bug with swap_sign --- app/src/apdu_sign.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index 365e5bf2a..6973f8085 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -261,6 +261,7 @@ refill_error(void) global.keys.apdu.sign.step = SIGN_ST_WAIT_USER_INPUT; #ifdef HAVE_SWAP if (G_called_from_swap) { + global.keys.apdu.sign.u.clear.received_msg = false; TZ_FAIL(EXC_PARSE_ERROR); } #endif @@ -570,7 +571,7 @@ handle_data_apdu_clear(command_t *cmd) if (global.step == ST_SWAP_SIGN) { do { TZ_CHECK(refill()); - } while (global.step == ST_SWAP_SIGN); + } while (global.keys.apdu.sign.u.clear.received_msg); } else { TZ_CHECK(refill()); if (global.keys.apdu.sign.step == SIGN_ST_WAIT_USER_INPUT From 33f71a1737c53e2b2190678a2071cae98bcc291e Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Wed, 10 Jan 2024 15:33:29 +0000 Subject: [PATCH 09/78] use fork of ledger app-exchange --- .github/workflows/swap.yml | 3 ++- scripts/test_swap.sh | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/swap.yml b/.github/workflows/swap.yml index e690d74f0..3583b3775 100644 --- a/.github/workflows/swap.yml +++ b/.github/workflows/swap.yml @@ -12,6 +12,7 @@ jobs: job_functional_tests: uses: LedgerHQ/app-exchange/.github/workflows/reusable_swap_functional_tests.yml@develop with: + branch_for_exchange: 'develop' branch_for_tezos: ${{ github.ref }} repo_for_tezos: ${{ github.repository }} - test_filter: '"XTZ or xtz or Tezos or tezos"' + test_filter: '"tezos"' diff --git a/scripts/test_swap.sh b/scripts/test_swap.sh index 18face654..b5d397673 100755 --- a/scripts/test_swap.sh +++ b/scripts/test_swap.sh @@ -139,7 +139,7 @@ build_app_ethereum() { build_app_tezos() { _assert_tezos_repo - _build_side_app $1 "tezos_new" $APP_TEZOS_REPO/app + _build_side_app $1 "tezos" $APP_TEZOS_REPO/app } run_tests() { @@ -153,7 +153,7 @@ run_tests() { ledger-app-tezos-integration-tests -c \ "cd /app && \ pip install -r test/python/requirements.txt && \ - pytest test/python $*" + pip install protobuf==3.20.3 && pytest test/python $*" ) } @@ -163,7 +163,7 @@ run_tests_all() { device=$1 shift - run_tests --device $device -k "tezos_new" $* + run_tests --device $device -k "tezos" $* } update() { From 9890243de97b09913d6f2133b83fdad5238ae724 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Thu, 11 Jan 2024 16:01:54 +0000 Subject: [PATCH 10/78] Bump ledger-sdk version - ledger-sdk version changed to 3.12.0 - It resulted in nanosp sdk version change. - Nanosp snapshots updated due to change in font used in SDK --- .github/workflows/build.yml | 2 +- Makefile | 4 ++-- scripts/test_swap.sh | 2 +- .../nano/snapshots/nanosp/home.png | Bin 369 -> 368 bytes .../00002.png | Bin 735 -> 728 bytes .../00003.png | Bin 334 -> 330 bytes .../00004.png | Bin 391 -> 387 bytes .../00005.png | Bin 545 -> 542 bytes .../00007.png | Bin 545 -> 542 bytes .../00009.png | Bin 730 -> 728 bytes .../00011.png | Bin 730 -> 736 bytes .../00001.png | Bin 955 -> 955 bytes .../00002.png | Bin 1018 -> 1017 bytes .../00003.png | Bin 1136 -> 1137 bytes .../00004.png | Bin 1025 -> 1027 bytes .../00005.png | Bin 1035 -> 1031 bytes .../00006.png | Bin 650 -> 648 bytes .../nano/snapshots/nanosp/settings.png | Bin 386 -> 387 bytes .../settings_blind_signing_disabled.png | Bin 458 -> 456 bytes .../nanosp/settings_blind_signing_enabled.png | Bin 444 -> 443 bytes .../nanosp/settings_expert_mode_disabled.png | Bin 433 -> 431 bytes .../nanosp/settings_expert_mode_enabled.png | Bin 423 -> 421 bytes .../reject_from_blind/blind/00000.png | Bin 505 -> 501 bytes .../reject_from_blind/blind/00001.png | Bin 877 -> 878 bytes .../reject_from_blind/blind/00003.png | Bin 365 -> 366 bytes .../reject_from_blind/clear/00001.png | Bin 499 -> 499 bytes .../reject_from_blind/clear/00002.png | Bin 532 -> 530 bytes .../reject_from_clear/00001.png | Bin 499 -> 499 bytes .../reject_from_clear/00002.png | Bin 532 -> 530 bytes .../reject_from_clear/00003.png | Bin 365 -> 366 bytes .../test_blindsign_too_deep/blind/00000.png | Bin 505 -> 501 bytes .../test_blindsign_too_deep/blind/00001.png | Bin 886 -> 880 bytes .../test_blindsign_too_deep/clear/00001.png | Bin 471 -> 470 bytes .../test_blindsign_too_deep/clear/00002.png | Bin 532 -> 530 bytes .../test_blindsign_too_large/blind/00000.png | Bin 505 -> 501 bytes .../test_blindsign_too_large/blind/00001.png | Bin 877 -> 878 bytes .../test_blindsign_too_large/clear/00001.png | Bin 499 -> 499 bytes .../test_blindsign_too_large/clear/00002.png | Bin 532 -> 530 bytes .../test_ensure_always_clearsign/00002.png | Bin 735 -> 728 bytes .../test_ensure_always_clearsign/00003.png | Bin 334 -> 330 bytes .../test_ensure_always_clearsign/00004.png | Bin 391 -> 387 bytes .../test_ensure_always_clearsign/00005.png | Bin 352 -> 349 bytes .../test_ensure_always_clearsign/00006.png | Bin 730 -> 736 bytes .../test_ensure_always_clearsign/00007.png | Bin 545 -> 542 bytes .../test_ensure_always_clearsign/00011.png | Bin 745 -> 740 bytes .../one_byte_added_at_the_end/00002.png | Bin 718 -> 711 bytes .../one_byte_added_at_the_end/00003.png | Bin 340 -> 335 bytes .../one_byte_added_at_the_end/00004.png | Bin 421 -> 417 bytes .../one_byte_added_at_the_end/00005.png | Bin 400 -> 397 bytes .../one_byte_added_at_the_end/00006.png | Bin 730 -> 736 bytes .../one_byte_added_at_the_end/00007.png | Bin 545 -> 542 bytes .../one_byte_added_at_the_end/00010.png | Bin 506 -> 506 bytes .../one_byte_added_at_the_end/00011.png | Bin 482 -> 483 bytes .../one_byte_added_inside/00002.png | Bin 718 -> 711 bytes .../one_byte_added_inside/00003.png | Bin 340 -> 335 bytes .../one_byte_added_inside/00004.png | Bin 421 -> 417 bytes .../one_byte_added_inside/00005.png | Bin 400 -> 397 bytes .../one_byte_added_inside/00006.png | Bin 730 -> 736 bytes .../one_byte_added_inside/00007.png | Bin 506 -> 506 bytes .../one_byte_added_inside/00008.png | Bin 482 -> 483 bytes .../one_byte_removed_inside/00002.png | Bin 718 -> 711 bytes .../one_byte_removed_inside/00003.png | Bin 340 -> 335 bytes .../one_byte_removed_inside/00004.png | Bin 421 -> 417 bytes .../one_byte_removed_inside/00005.png | Bin 400 -> 397 bytes .../one_byte_removed_inside/00006.png | Bin 730 -> 736 bytes .../one_byte_removed_inside/00007.png | Bin 545 -> 542 bytes .../one_byte_removed_inside/00009.png | Bin 506 -> 506 bytes .../one_byte_removed_inside/00010.png | Bin 482 -> 483 bytes .../unknown_magic_bytes/00001.png | Bin 506 -> 506 bytes .../unknown_magic_bytes/00002.png | Bin 482 -> 483 bytes .../unknown_operation/00001.png | Bin 506 -> 506 bytes .../unknown_operation/00002.png | Bin 482 -> 483 bytes .../wrong_last_packet/00002.png | Bin 735 -> 728 bytes .../wrong_last_packet/00003.png | Bin 334 -> 330 bytes .../wrong_last_packet/00004.png | Bin 391 -> 387 bytes .../wrong_last_packet/00006.png | Bin 921 -> 907 bytes .../wrong_last_packet/00007.png | Bin 369 -> 368 bytes .../test_provide_pk/bip32_ed25519/00001.png | Bin 709 -> 708 bytes .../nanosp/test_provide_pk/ed25519/00001.png | Bin 725 -> 727 bytes .../test_provide_pk/secp256k1/00001.png | Bin 732 -> 731 bytes .../test_provide_pk/secp256r1/00001.png | Bin 728 -> 720 bytes .../reject_public_key/00001.png | Bin 725 -> 727 bytes .../reject_public_key/00003.png | Bin 365 -> 366 bytes .../reject_signing/00002.png | Bin 735 -> 728 bytes .../reject_signing/00003.png | Bin 334 -> 330 bytes .../reject_signing/00004.png | Bin 391 -> 387 bytes .../reject_signing/00005.png | Bin 352 -> 349 bytes .../reject_signing/00006.png | Bin 730 -> 736 bytes .../reject_signing/00007.png | Bin 545 -> 542 bytes .../reject_signing/00011.png | Bin 745 -> 740 bytes .../reject_signing/00015.png | Bin 365 -> 366 bytes .../snapshots/nanosp/test_reject_pk/00001.png | Bin 725 -> 727 bytes .../snapshots/nanosp/test_reject_pk/00003.png | Bin 365 -> 366 bytes .../nanosp/test_reject_transaction/00002.png | Bin 735 -> 728 bytes .../nanosp/test_reject_transaction/00003.png | Bin 334 -> 330 bytes .../nanosp/test_reject_transaction/00004.png | Bin 391 -> 387 bytes .../nanosp/test_reject_transaction/00005.png | Bin 352 -> 349 bytes .../nanosp/test_reject_transaction/00006.png | Bin 730 -> 736 bytes .../nanosp/test_reject_transaction/00007.png | Bin 545 -> 542 bytes .../nanosp/test_reject_transaction/00011.png | Bin 745 -> 740 bytes .../nanosp/test_reject_transaction/00015.png | Bin 365 -> 366 bytes .../nanosp/test_sign_ballot/00002.png | Bin 735 -> 728 bytes .../nanosp/test_sign_delegation/00002.png | Bin 726 -> 723 bytes .../nanosp/test_sign_delegation/00003.png | Bin 331 -> 329 bytes .../nanosp/test_sign_delegation/00004.png | Bin 410 -> 407 bytes .../nanosp/test_sign_delegation/00005.png | Bin 748 -> 754 bytes .../nanosp/test_sign_failing_noop/00001.png | Bin 455 -> 453 bytes .../test_sign_increase_paid_storage/00002.png | Bin 735 -> 728 bytes .../test_sign_increase_paid_storage/00003.png | Bin 334 -> 330 bytes .../test_sign_increase_paid_storage/00004.png | Bin 391 -> 387 bytes .../test_sign_increase_paid_storage/00006.png | Bin 730 -> 736 bytes .../nanosp/test_sign_origination/00002.png | Bin 735 -> 728 bytes .../nanosp/test_sign_origination/00003.png | Bin 334 -> 330 bytes .../nanosp/test_sign_origination/00004.png | Bin 391 -> 387 bytes .../nanosp/test_sign_origination/00005.png | Bin 367 -> 363 bytes .../nanosp/test_sign_origination/00007.png | Bin 545 -> 542 bytes .../nanosp/test_sign_origination/00009.png | Bin 545 -> 542 bytes .../nanosp/test_sign_origination/00010.png | Bin 408 -> 406 bytes .../nanosp/test_sign_proposals/00002.png | Bin 735 -> 728 bytes .../00002.png | Bin 735 -> 728 bytes .../00003.png | Bin 334 -> 330 bytes .../00004.png | Bin 391 -> 387 bytes .../00005.png | Bin 545 -> 542 bytes .../nanosp/test_sign_reveal/00002.png | Bin 735 -> 728 bytes .../nanosp/test_sign_reveal/00003.png | Bin 334 -> 330 bytes .../nanosp/test_sign_reveal/00004.png | Bin 391 -> 387 bytes .../nanosp/test_sign_reveal/00005.png | Bin 939 -> 933 bytes .../00002.png | Bin 735 -> 728 bytes .../00003.png | Bin 334 -> 330 bytes .../00004.png | Bin 391 -> 387 bytes .../00002.png | Bin 735 -> 728 bytes .../00003.png | Bin 334 -> 330 bytes .../00004.png | Bin 391 -> 387 bytes .../00006.png | Bin 921 -> 907 bytes .../00007.png | Bin 545 -> 542 bytes .../00008.png | Bin 846 -> 846 bytes .../00009.png | Bin 878 -> 877 bytes .../00010.png | Bin 882 -> 882 bytes .../00011.png | Bin 887 -> 887 bytes .../00012.png | Bin 962 -> 962 bytes .../00013.png | Bin 470 -> 471 bytes .../test_sign_sc_rollup_originate/00002.png | Bin 735 -> 728 bytes .../test_sign_sc_rollup_originate/00003.png | Bin 334 -> 330 bytes .../test_sign_sc_rollup_originate/00004.png | Bin 391 -> 387 bytes .../test_sign_sc_rollup_originate/00006.png | Bin 545 -> 542 bytes .../test_sign_sc_rollup_originate/00013.png | Bin 545 -> 542 bytes .../test_sign_sc_rollup_originate/00017.png | Bin 545 -> 542 bytes .../test_sign_set_consensus_key/00001.png | Bin 510 -> 510 bytes .../test_sign_set_consensus_key/00002.png | Bin 718 -> 718 bytes .../test_sign_set_consensus_key/00003.png | Bin 334 -> 330 bytes .../test_sign_set_consensus_key/00004.png | Bin 391 -> 387 bytes .../test_sign_set_consensus_key/00005.png | Bin 939 -> 933 bytes .../test_sign_set_deposit_limit/00001.png | Bin 488 -> 489 bytes .../test_sign_set_deposit_limit/00002.png | Bin 731 -> 725 bytes .../test_sign_set_deposit_limit/00003.png | Bin 342 -> 340 bytes .../test_sign_set_deposit_limit/00004.png | Bin 391 -> 387 bytes .../test_sign_set_deposit_limit/00005.png | Bin 434 -> 426 bytes .../test_sign_simple_transaction/00002.png | Bin 735 -> 728 bytes .../test_sign_simple_transaction/00003.png | Bin 335 -> 331 bytes .../test_sign_simple_transaction/00004.png | Bin 391 -> 387 bytes .../test_sign_simple_transaction/00005.png | Bin 374 -> 366 bytes .../test_sign_simple_transaction/00006.png | Bin 730 -> 736 bytes .../nanosp/test_sign_transaction/00002.png | Bin 718 -> 711 bytes .../nanosp/test_sign_transaction/00003.png | Bin 340 -> 335 bytes .../nanosp/test_sign_transaction/00004.png | Bin 421 -> 417 bytes .../nanosp/test_sign_transaction/00005.png | Bin 400 -> 397 bytes .../nanosp/test_sign_transaction/00006.png | Bin 730 -> 736 bytes .../nanosp/test_sign_transaction/00007.png | Bin 545 -> 542 bytes .../test_sign_transfer_ticket/00002.png | Bin 735 -> 728 bytes .../test_sign_transfer_ticket/00003.png | Bin 334 -> 330 bytes .../test_sign_transfer_ticket/00004.png | Bin 391 -> 387 bytes .../test_sign_transfer_ticket/00005.png | Bin 545 -> 542 bytes .../test_sign_transfer_ticket/00007.png | Bin 545 -> 542 bytes .../test_sign_transfer_ticket/00009.png | Bin 730 -> 728 bytes .../test_sign_transfer_ticket/00011.png | Bin 730 -> 736 bytes .../test_sign_with_another_seed/00002.png | Bin 718 -> 711 bytes .../test_sign_with_another_seed/00003.png | Bin 340 -> 335 bytes .../test_sign_with_another_seed/00004.png | Bin 421 -> 417 bytes .../test_sign_with_another_seed/00005.png | Bin 400 -> 397 bytes .../test_sign_with_another_seed/00006.png | Bin 730 -> 736 bytes .../test_sign_with_another_seed/00007.png | Bin 545 -> 542 bytes .../nanosp/test_sign_with_long_hash/00002.png | Bin 735 -> 728 bytes .../nanosp/test_sign_with_long_hash/00003.png | Bin 334 -> 330 bytes .../nanosp/test_sign_with_long_hash/00004.png | Bin 391 -> 387 bytes .../nanosp/test_sign_with_long_hash/00005.png | Bin 352 -> 349 bytes .../nanosp/test_sign_with_long_hash/00007.png | Bin 545 -> 542 bytes .../test_sign_with_small_packet/00002.png | Bin 718 -> 711 bytes .../test_sign_with_small_packet/00003.png | Bin 340 -> 335 bytes .../test_sign_with_small_packet/00004.png | Bin 421 -> 417 bytes .../test_sign_with_small_packet/00005.png | Bin 400 -> 397 bytes .../test_sign_with_small_packet/00006.png | Bin 730 -> 736 bytes .../test_sign_with_small_packet/00007.png | Bin 545 -> 542 bytes .../test_too_complex_transaction/00002.png | Bin 718 -> 711 bytes .../test_too_complex_transaction/00003.png | Bin 340 -> 335 bytes .../test_too_complex_transaction/00004.png | Bin 421 -> 417 bytes .../test_too_complex_transaction/00005.png | Bin 400 -> 397 bytes .../test_too_complex_transaction/00006.png | Bin 730 -> 736 bytes .../test_too_complex_transaction/00007.png | Bin 545 -> 539 bytes .../snapshots/nanosp/test_too_deep/00001.png | Bin 471 -> 470 bytes .../snapshots/nanosp/test_too_deep/00002.png | Bin 482 -> 483 bytes .../snapshots/nanosp/test_too_large/00001.png | Bin 499 -> 499 bytes .../snapshots/nanosp/test_too_large/00002.png | Bin 482 -> 483 bytes 202 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index efb29f046..a9d1f94c8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: device: [nanos, nanosp, nanox, stax] runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:3.11.0 + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:3.12.0 steps: - name: Checkout uses: actions/checkout@v3 diff --git a/Makefile b/Makefile index c8ec568f5..c2586ccf7 100644 --- a/Makefile +++ b/Makefile @@ -25,8 +25,8 @@ docker_speculos: $(DOCKER) image tag $(LEDGERHQ)/speculos speculos docker_ledger_app_builder: - $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-builder:3.11.0 - $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-builder:3.11.0 \ + $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-builder:3.12.0 + $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-builder:3.12.0 \ ledger-app-builder docker_ledger_app_ocaml: diff --git a/scripts/test_swap.sh b/scripts/test_swap.sh index b5d397673..284f9094f 100755 --- a/scripts/test_swap.sh +++ b/scripts/test_swap.sh @@ -105,7 +105,7 @@ _build_app() { cd $repo docker run --rm -ti -v "$(realpath .):/app" --privileged \ - ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:3.11.0 \ + ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:3.12.0 \ bash -c "make clean && make -j $params BOLOS_SDK=\$$sdk" ) } diff --git a/tests/integration/nano/snapshots/nanosp/home.png b/tests/integration/nano/snapshots/nanosp/home.png index 74ca77cf243051705dda36593c869f391e2b2ef7..39ed6ff597a035972d1cd276b6717deb5308e2c2 100644 GIT binary patch delta 341 zcmey!^nq!DO1-(Ki(^Q|oVPaug$@e{G(6mLdG?O~6YnhLPwUwvcrily=lL<<+`S@8`JqxCYBtw}}_{8fFyF_t9sF zJmDtLpXkis1aebv9w&7Rd-OgeLJU=#@B=Qu3v} z?DRR?+b=t{l(*}aJzjdBKd{z6U|M+G|L^CnZ|XhKv3Y`Ywtf8S|3BXp-Yfaszt~&1 z*jU=pnz?G)P6odtQ-b;(f4+X(_mHWWk%KMu`40X~lmDJ&UGSbKPy3l&wcp}3uC1FD jGCtmmp8XFI0tVN__x$>|JvU_aGmxOCtDnm{r-UW|KVqK( delta 342 zcmeys^pRQ_$_b72aM z5Mw|9gYMGU|7$ANwO+nHx2vb=CdV)NFXvzI{pkthSQs=TO!L2_(}}F52dAyiT02eq z+~OFFJ4({@bp(e{;S;k{l`zmO<`p;SbB`%TE{^TKllCF z+yC6zJb&JdqN3Yb=5gQt23-Bll3MxnYyImQ-P;{sEVy@W{Pub4ulfCQ&w0)NS?s!E zWWHJOi}3>Yo!tHoKAK-8rtH7>PQuUPZb#{@4IZ1Whai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/regression_potential_empty_screen/00004.png b/tests/integration/nano/snapshots/nanosp/regression_potential_empty_screen/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/regression_potential_empty_screen/00005.png b/tests/integration/nano/snapshots/nanosp/regression_potential_empty_screen/00005.png index 1fcdee14dce21c819b5e211dbbdf546034789b00..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 516 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 diff --git a/tests/integration/nano/snapshots/nanosp/regression_potential_empty_screen/00011.png b/tests/integration/nano/snapshots/nanosp/regression_potential_empty_screen/00011.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$Sup!*M|CS)OCmaK4$FfbG5z-4iAh|J~IB#>+(aCT$_*YJI$9CE{` z3emU%LpuN*cF(Pi0gbGw>|>iNv>~W7E)U%al6b3wYk!tY1gx`?VV#5C6`+UgCXTiw z4w@)@#Q^TfbFuO$|=sf;u5j z{8gBjh<|N}=0JgiO!HXQ2f!N9g#43Z&Dx~7)Ng1=a(u!TCBuIO`0hXCebWf-)`nh} z7WF;A@p?qhnvJtzH<(vI8|&>TR!QV3l?rWvBJ1^lCmd(rWY$c^asw{?G4%7sAUL%^ zAQ13}9M(;=N%dEJ|0Bo;m8+I??oZ0*0~4|SU4O1BO0R3%Ew|-ekW4<`#h*Pn`j?ci z6gAV8j)Z_kyIrh0oJ^8ea2HL8EWV z#(zCebKlPaFRO%eCJY`ukP}&+x#NHzWR$rDHe1doK>5`=_h-Kg!rfa!uHl4EPj~yy zn+05u;HJ^!+J?6R3kENAd8ewgFCj3maU1kLK#T5^83KK$DPVh4T00008xSF493GVx@ zpGzrgI%UVOt9J*WvI1q!5c@2!8u&viE!ZPw)X2epuNBn`YY6CmB1<*wWTFU2o*k619X%9Uw?oFdmpNU-IWMbxwV9~ zX|zzP)-0I^v<5Hfhr>|-uJ-vqzSk*l;gVM)kF?H`9Pj8GBl;Rru8tH|$Wu-L*D#KGS z-3fOjcjxEifx~-J6mBHwk2$D4ZQ@!7Y3rD~EL$ zO(7OlP*@j0!s)rS)1a|6jdSc%h1CQN+U2R9ps2Sxw0|Z%BIuk!hII`_Pk^0rFrYKz0-1OQuHf|uaufGkSHgeo|9;R4zWsQd+(HJ8y}Tk(}E{)L4(jY z{w}Ob#D5M%x1pd$rh6^h3*fbAO8zOaW_{8^>UT6`IX=Zj>4-l8vHpj>Z<^7&w_((! zMcW4iUXR#Wvw34U4ek@r$9e~fH4=HoPL;N(Bk%PF!b}*AUU-} zB9Vwk^U|ifGX0fa{wVTM<>p8R{gbiz#6)b|%YQXR+50-y<@US_(#hu={Ml2Ye_8oP zQ7cu+hWz$I3&P$7-JVwkBcfI^XzZRd78>zvHgp$*7Kmprz%B+Y5MOj5b0!=opkwb) zCoC~sc2O%CG};Ogx=P{4;xrrbT}bUG5{X109Dh?qh`JYK1#WzvHq!7~9|g_6DVz5^ zEq~mfBVN{s;7k}jdSExQzH{e+KFEN%1s%4YPoVOvcki!$7euGGgwL(6h0=bZP$+B-^8De}W~SHvFGQOp0c&Ll z8{lf5utDlSQnmY@1H7(+#y+}9IymLhv-RBZZudcEfArlk9iFF~m++tp8hylQHbzkwh761SM delta 243 zcmVdj(7bu?=$OMjRVX?&;$Lx%LgTqu>cH(RORHofjUCX z^i?@e{#JX({VP`zqlB9p7yvn>>YAlW5o_+R23nbFsIA;Nm?CS*tNz7aMJxb#gjI@F zeP+SCVsZWTDOOW=gLilpjb{K}ALo=cb2|kF+MH6dHh(vKms7FO8SqB`an~8Y$xE;| z0BmZ=#n^DNF(XlrfL;4)9j#VY1ELZlU4Jc}DCBJ|=w|%fO&}TI#9d`ey}tM@x#94mkVj}~E^Atkj>tHzb4Yr2V}C6XErkqjWR>>;$TE5azGfgdz)GMu zHa3Q#F2>0lmds~Za^fT^{v-NlXSG4SSIzd=sdpp$a1@2A5l4`ya`0L8S9W+htPl@$R2orBENxB|@+2i>EYUPH%Dji(ia?UTnNV{xl?h1i z!C%HLt|x=^*8MUr@u16vwI^?EY|MvxX@64hQ;xL2Dn~^Khg)+)pLybianu_zJmc=a zXIK^nZO~5A+w_#b*Nd3Qd?jezY9{kY4*N)iA87} znjGe@2B~~FE~D`qG`B`=LDeZ!pbpZx`j*0Js|}gjA=QMU@zX@mtvDJ4`jo@ts8vzT z5(+Jh`ZRF@`nCAPvCKOIoV^8Hq^vob!c9eh{o=*zPgP9 zf)A+V=a_=)y2|hKJm)A?ZFow11E{kSWsVU0Sx`OjM|PU9Mv5utd8)rlOEHPAU%8*~ zmNGl4x3n;OGUoa=9qHZ|{WIG8Wgkc_v_(Fp-YgPSN3*fAg?|Z=!iRc5F0y|Cn6UP# zJJeOlAe~!U)H6*sTHUHG{=;nbRqwJf5<37J8yla2i-0z= zKC*wcXR8_Efq#}UmRNkUVemB62cu1#p8YA8C1Fq|XNfI&`Jg1SEdWCySvgrZP)Del zzDnoG->P=pzj7xrlWLKu;eUpoaw-8{k0g8r;o2(k)1 zu=vK`9jXZxD|0%td)3ZX5(4QgtF!od*vcUKa(p4q)2x)Ha~1(D{(Dw43zE$9gJA3K zA~=Mpet$%z5VfbAJ6%AQ3N^Ynchu%dRj4XmPQxO3oFT0Oee)cT_(S9NPwO6%p50iBGJnf52A8wM`v7DceG0y5E>mG8&>I^Y zBLR_d_Yd`@c{%bfj5YHg(Z8MD25GN~?U7SgBXu~WLRE;vNmOm{t?KXW*y&h>*uc>H zO0s;V3u_+EytaU?1rX1o)=ei^~0{iuEgg$$8AlIkYs5u&KS z27kVR1^_7|*>@TK+|&+kP7mvIc2rdjv{5W9dNE&cte~9)LmKM*wn7 zHxTcqyxj!t0nw0#GR4*$)O=J5QClo}PUZ5XNyuDU)6iDSd(2xANb)xmYHp@l0-E>1 zU&bv?DTC&%`(<3>MVAZfOy1bom=CpRQh)0yhgx8rTS*AVw(vmT^2CC1)EhB8FIk3rzD4aMXmouNJY08HYxP z`MW_fACAjt{06P9QAbd9$rPxQbV}dSIBmBfOS_3Rp=b^OsHWA9070K}c^oxUvs8#e z3&A631@v?AiF28E2RLU7xJlV?{IGIth;9FX>L*c6&sSz<7_v%@ex#9c556||Xta@W h-^4?G(_A*<_zUXCA=#VaS@-||002ovPDHLkV1kkr84>^h diff --git a/tests/integration/nano/snapshots/nanosp/regression_press_right_works_across_apdu_recieves/00004.png b/tests/integration/nano/snapshots/nanosp/regression_press_right_works_across_apdu_recieves/00004.png index 599dedb96b654765812bbbb2bf5abdb66519929c..83b3b6cb6d699b8dad03a727c4781b1b93626c26 100644 GIT binary patch delta 1005 zcmVF1Dq?z8t_dinZ(vQqgqUTCHV#n-9$0Z;M z1VUQ-r!2wq`K-^!aja1)+VCmu0kn%XQ05G=*MhhLzr53eJyK0MjzfH|E!CuU|MK&M zx769SdTR@@XT)6Jro)%_(f%`g_3Js{TG|%=YrC3Ng1FFREPrnyLb&j$E5J9|zXKNR z{dPITT}i+fx3-8ejW=rD+?IJDK6q$9oE%4k^6o<6TF6#s}i|{H6b5d{nO!w+3LgZvN03e0UH}baJSe! z3O|W4T7p4td4Ha$XnBrE4{&K3qaaq!q|qHkCPl2Zvlk-=8=3aBRVdyW|H&v&4b@tU zT@oYaf&CF<44{{Ae-7Ipqw30v5B8c8CPTAoeX33iF%Gd>L5^5rGDIvPK}lpl*d$k7 zVjviS)A9vSA!K(5M7a2+{{p zk>JIOQh%9)&rw}31nK|;WZ#7jM~|ZDD3JgUi5i8N0}#jZsM13=gcK2og%uz2*>WlN zPWWgr$sk*M$d{n0n#@D_ZdH431>);-_m}e8dxB-Sy8~WuH!|{UOVcp;61KrDL#$8p zYe)((FHKm7dFMAFd7v?C($Fy>NPNN6kI-2jYkxz}>Lb5yY;0_t0V)}%)v-KV&`3IC ztjp_Zii(*g;bK7^4bdnX>@J!QoB|`aA4sc#LlBcf?XE7Qb5yc1uQ6FrqL}<_{dpcN zEyNIfLuC{JGO?+b`4l%xS>2Zn3jB=SS&45S_0dl|>Y{q$0=%n07l5taSg5h_D z%YUPVG^WiPdJ z!N$hM#sz>!f3br&T;o{U{%+4G@CzW?c`m@KN%K&e6PdCKH=Odu bMhE@?$@R_Bdmf^`00000NkvXXu0mjfL@D2u delta 1003 zcmV*$~vi~J@FZZJ}Ud!`ptLI+7|w{)n=t2Dw>StEq{avCq7jJe3AVdV8PmN z)gi7*0%$!N1JBmz-NNYzgMhrGG>}j)5yfgmFNKg&dT8o_$ zBjSPm5n&9Vhj4!k+wY^QX2l0vr=*ghNwq#yr->Mcn5`gNEHN2EmJ~sWXF#e+F1y4) z&;zIG3;g&pNsQIDw(DmMSKt!YhKM`HZgFRw(~`df_8yN#E3vltoV@6rc1Fq z;iJJMfo$#}TY{o$G!NywRqeSYi0kL>m-5;@!7|+4057-;8F{v;X&8J6+u)KR(x>Zd zNC+@5Ojw6``!_*(pfGE~&@nDZykP1_XfKbIp?^pF$lHyLjg2!vEyihiERPnnBAqeT zt?OxwiWw&1WWhQb!ci31RhkdH1V&Cju&f3SK|~6*yS$LjQOd@=#zaAhWb(85=XtO+ z5kv3|nNb9g0g&2n;u{-ri1D3Ek4ePJD5vR`84$`LKnD1N#W-&YohA2?#ki>_!SFM~ zt$(A1IHtuLduGLuD{%+4G@B<*)c`m@CNwZM8$YuBJfh#A@=oE=qk+Pd*YeX}! zw(aUKu40f>Xv!lKF)g$N;CAJIka)wAasdKHrulFGwCz|q!L|KI!PI+Ua Z1An36&C=x&fPnx2002ovPDHLkV1j9M-n#$* diff --git a/tests/integration/nano/snapshots/nanosp/regression_press_right_works_across_apdu_recieves/00005.png b/tests/integration/nano/snapshots/nanosp/regression_press_right_works_across_apdu_recieves/00005.png index 76caf01548735d87bbb69860e0a0a207660a7298..84d06ce5f179f4bb3c437bd14486d302681ba1fe 100644 GIT binary patch delta 1009 zcmV^cEDItiU zqSy56n1buN%J1_$=QPUtu&Q+jV6XyhjxhTyuo3vCN)yINapgQu_IHsKm*DuN^T{qL zy@Tx*3GyeRuW#L<;eEkBMn}KQ1KJ9d(5En(#R3~>^e&YkBY)KR&pG)cuyfs>Q?5kUS_CGe4P{c)L% z1zl!v5oQZTVDpENX4t4c2=3QWsk9Vf$;iU!Z-)=ut-k6iiIKn{!M}K}q#3Edh3)SY~ZoHU>fQZ9)W0HNc2x(Rl?rzvMOL zjX)m67Q`baoG)T@1p#msmzc-r$T*d`kMAtC;d@R2xtEk}NIu5P}NAsEBEcrZi6JY=e&)LRKYqLb$J(1l&FB z_vT(tCx4&j%bLm7c^&$PWfnwU$n-CWONbOi8c+5iz6e7}&jpsECS@AR%kMHZn^z&F za(E5yi+|M_4_4j@&xf+pU4^gJ4*WsdYbO$k#0`n(Vij1Dgyl~t#YXk3nlALbsJz?2 z3k4M6vR5;1qGx_^Ct291#xy3tMV=V-Lok^Zlz(j6JKK@~wgJc{vPYzbhS;{Mb9@>t z7&5Bd31A~~{{G9Ag%L6ycMlMS<2|g@lY6@Ned z4^qUdYDz;@vu(x;dGNcl zl-WVMMS}eCnCoLYG`t`9$L#2r=YU#)5_%OzvuI!gjqarqq<@4epBe$W$o?fDVC}Fn@UCF8coghB=6kFICO5RhL7dfCh?KgQ}JPWxng62KaOY$AI^>M+FGsy^dk zw4lqXYEA$fk@NRot}Kj@@wj_{C>+nQQdPQ#0YJ&K`_P;Kq#dplWBr->xtSNC-O65| zk@g#V*iaYZb1KF?>|?My;Lrsj{!1Ujg3|ZpE+nxy!z!6U3!=i_q(2&)KQR!&v|z-? zxqnNl;#;s08MhCT7EC0zg-(sp_uA|jsDW~GO+G*qNE_8D$&H5SELepT>$Vw>E9%3aQ%(w`O|?1ow&JIS9Lkc?^4x#pcPbQGRtx;aIt zxoA^{Q3B3#USnyf!38mzfTk}*?n{?}p>7=UhjpWxPBsntl6P?T3%`oc!LAI;PSyS3 zE=WLiCAP9RUw2lrbOlr{HAu7`TFRrP4VB!JhEWsLF;+ud8ybUcCosdY-D?1v^TOSx juPb{QI(qX&VhDc$@EoZZpgJDg00000NkvXXu0mjfPGRDj diff --git a/tests/integration/nano/snapshots/nanosp/regression_press_right_works_across_apdu_recieves/00006.png b/tests/integration/nano/snapshots/nanosp/regression_press_right_works_across_apdu_recieves/00006.png index 044d35313c0c3d7fcda7ef536aefc2b0d9bc1cf0..8751b59811a229d4bc753a4dde6fe5abb1e7e31e 100644 GIT binary patch delta 623 zcmV-#0+9WR1&9TZB!5pyL_t(|ob8%hmct+jhSQ$eiThtt_A(DShcR3ftrybyzo(QK zL@=PHuVV@4dD3-CX-%i94ZC`8Aa~Y4oio%v3)KTZveAM$LZ+mY)N7KEN%{Ph?~`9b zqs#jx3A1O!SZ~9T?tSM!W_zFB1KCS1k#}=%k_Oe$>{%&cN`IvCsUDD%>@NTd=6>!D zbyhN@b4jA+G%2*2RVDLaF?d@yf|D|idkAGvLye0~^jivA83QW`Fng+!{FXESG^rhn zOf$R)tA%1<_lFVYywma|xE^Pv(o=*jB^$jTj(@mXeb<|SnIHfFfQ!)OM{aPOLceCY z-DMZ7M4uT_B7a+2V^NKQ!Bjvq{7@0c;an?!C`EwvFh69TCdA9wqev(a!K&~69-Wq%=gkVy^HN*m-LWvm$=6=CKn zmSjCHD`-|NVRt>X^pnzMtsvOwrk-GK-k!uv-0Rpr{_O_L=C#`ZlOaoW06=U)q@aA2 zVqL3`OV0000000000000000000000000008h+`~t+#atlfL& delta 625 zcmV-%0*?KN1&RfbB!5v!L_t(|ob8%hmct+jhSQ$eiThtt_A(DWharH9#tZ5E-&2Z4 z5e$m15}&{Nd-6+Y zbi7}Z2z^G3^)ei7-Z%d-+xqk!=w7%)mvU=T3#OsPyILX|(SMCkwSb;ve-2nM_qjRD zSt-!QC5ai+v@ln#Dw&7y!8=zFoWwY;F4Rs9H7+sHFCl294{||3=u?&OB4_+*YIZC- z%*aL9Tqp*1e`MUuJ1tLw&+B5T^en=;MmAbM9RF~)`mR?2Gl2sD07TpsNGCW>p}%FF z?&=C+l|C6-qJL}VhGXiZs|i(erDl%<(3UFe*WFt6^=c|xRm^D`e>6o1kOnN-0X&vtVY1J$^-2n$Pz z2dB=JDFCK#3t+bpSwMLWCf` zMaeyzukf1AyUD)o(D#!&gUlraeu<~@MxJyd<~LlNl>9MJt&AALOl44R_QaXoPN z+@e&4TWWaH7a+(j&QA$Gv1pzCqO@trjWhiZ&tY5~^j_1mL#@`|%aa^H6z=~v{_nGo z5Nm)Z{)`Ilq2dn!000000000000000000000000000000_$qz@lCgCQ6iHW500000 LNkvXXu0mjfR(&Hi diff --git a/tests/integration/nano/snapshots/nanosp/settings.png b/tests/integration/nano/snapshots/nanosp/settings.png index 0cc74d99eb484dcb82f51fde510e71b1c095a820..99d3e4228ec7c3b8be3672d8558b37410b03ab6c 100644 GIT binary patch delta 360 zcmZo-Zf2gKQt##I;uumf=j}~Lp+gEh4uNk%cl@7NBre_~>ilBGR?p!7(V2l=j7(R8 z7@%Oenv#;x-LAdUUa-|TAGIwtzq3gC!^X%R*=x_~{_LzVKEP9Q>BaOC;|22nbYDE4 z8uRIFL${|H^Q=P26BgfQ1Lb2{g7aHGWj>5M&*)-bf6SCGiJ{@YXg%MJ`YE}lPi(m| z=0$g#mm9rG_WW+2Hv21&fZ+LsDSUCJ>f4g{)+N-MT&Yj3iAxE4{cZB`4|=zc+Ff~} zxAaQX?}lxQeqGpanti)2>DKgfT9zj)=FO885c>PI@0HK%X(@j;&wSOK8usAkf^SYw zSxoPJ4}Q6B{msh6o3Hc#PHI~8YeD{jg;Q7mn)}&*t<8 delta 359 zcmZo>ZepIGQt#>M;uumf=j}~zu|o ztS0A|9-XW$`E}!x*YcasRk3t*q=y?>ua^=&zVV&>3wP(o;mQ><-O8wmmKLxcaikclSE&OL^!2osFZju71(2%ez!1|K}{bm2i9a!^nl- zoSw2=y?;LVWuDH>%7k0e@_#2Z&AENxXFzeD-}67gYfO@LoNbFIS_;d>hkSlz!}&fo zB=wj7p}^pr4f64ap8d8@F#Kqp$ezZ<1Pc-{z2+s?ft|M)PF-Wa3*vja`njxgN@xNA Dku0Um diff --git a/tests/integration/nano/snapshots/nanosp/settings_blind_signing_disabled.png b/tests/integration/nano/snapshots/nanosp/settings_blind_signing_disabled.png index 5048db38f728581e4946e93b535e8a2ed608f827..fa91d0fef80529d4d62d8e7f4b691846d178a964 100644 GIT binary patch delta 430 zcmV;f0a5$c$R?T*BHO-r8|sjDEp`^K7V7wqSu(M$STekhxX z$%zuA)txc`Kc-pGw#FXeD^(M_;z~F%-VconrP=E#n{^A&+A-d;?d81X)+^Xjc~90Y zKqM9~@0+KsUI5`u8`0671Qx5VJh@ktvmv2)_`J#U938h<>U8I!!0X@NI`ox9Kc`-k_ z5?LqiT)=x%e+VoYQst!7isuO^K0V^=Ub@3DL-|ML@qaruTMj*k+!|d-^qm5I5@2HBtJ=w22TxePB)aNZ)?Zv0uzx zcan9-T??Gs^@olHaEQAhEmiE4T=8lG#oi-dw^Fs&o&4)8g%_osWw0 zop{v1|8>VB{bTNTU&E+#?X5_Z&8gzZsFs|e{XG>VmQy8W)+zj000000000002%-Q0NVQj($qfUbNdQO00000 LNkvXXu0mjfzP86+ delta 418 zcmV;T0bTyP1H1!}B!7cRL_t(|obB0LvV$NHMNyN=OqlJhr{d-^tn5D)6to+$mvw22UcKhP6C(x+c^>=*OY zm1Ny<=K|+;{h?z43dG%zmMV5iu6Uk6arVg9tyI5;8Rh?09)It)ajCz?8SydCwdD%M zYtxEW1I-WUsD?TgAoovHRlVfgU2;zy3(!@y1`Q|Ju5px92^xB^g%fURhJ4l&Dsk)PGg89L*?7cp&f4Hq+ux_ShsE>V+x0tCpK9evmhexX z_IpqIfgj(><&VCde*1Gw=CtaQ>?dP*{6Bnn$obA7*!zNg`tu8|EGost4LMI9_`Q0= zu6Jy&XnTyhMNGZ1gpOiQd_$n-1w^L+-Sc&oXTk%zz zkDl=@EZkQUzlMp#m=5|+X6 zaAmo#dj^be|L{@Ve}z5kHpk=9>DLdEb1^)@!-uDY!z?X9|D2ygFC?H?m;+QJ2X``O zKXEbctvK{L!GG?W!C(nt`~qy+gaM@Tf!!ut(g`?j3d#brpqqu){?tnm z2XEN0Qk`yAY~BR;S60c#I+-)?vCCexY-k6gr95vv^x_p{@!Ft zwka>V3LX5IHTX0Z1^@s600000000000D$v;0Bh|ecMzz@V+;TQ002ovPDHLkV1kUU B!leKJ diff --git a/tests/integration/nano/snapshots/nanosp/settings_expert_mode_enabled.png b/tests/integration/nano/snapshots/nanosp/settings_expert_mode_enabled.png index 56ac955adaacc9373240c39b37dcc8e18ec28638..90dc4e8dc0c28bb0657b78cea8b3bcc348466d90 100644 GIT binary patch delta 395 zcmZ3^yp(x@N_~!}i(^Q|oVPavCp9bZG$fX%=O6mpKV|ou=FL88omV!hM1A`|Zw)KU z;>Jt4%nS&ix$n~~v59qeqE7F=;8HzbyZZO!+QvNxuiRh5^OEt!FYb#`-2J~LgZIrB z5sbgr?kH}2{gds-yWGF`EOq^5y*SXZTUb;)Ae-psbW z*}l^&_`*M%zTkGbbc<)@^IYyfxS0D@(LZQ3Gr<=$jSZ)?J!{(nW}f#T;4a?G1cZlC8b nd&Kto+`;>~h!A67nDJ6PuhGnB*(a_dkg%t#p9{-6r-UW|PIa-+U`hQQB zBB0Sg>9zp?00000000000Du&ayrxB@AGg->I+|!7bLD7%vpdMUnEIQQAw2+He<50H z;c+i9^?RX+`1(E!x|-?BkHilz9P^eI>7R^7H4!;_RCS5@wtt_}Z@n(p^?Mz2x{g`c zvTyd}80IQXLHqMKP96F>!)t!$N%RdK-Bus+By}n11$W5r*<(mgL0b6w8(~VBB}{{1 zcV)4!n*+wLe>fG(zp!Op=lpnd`1M5c+89=__~j|#WtOI(FXz|L8v!U5#sJlb!IjM2 zPuz@q>S(h;SAQ6P)UAzw`kFfa#2S8hR|*%VM{85RmJN^3{MHS3lL~ysDrn(pDtz`Y z-iin}Ca0hNW-rScBnOjlo@SemNI{`nZ^mh>=B1kk;N%}Q3%Ktb&|_ehZhQG)OLegB r9Q@q|00000000000001hnf?H;pg7|%NxZ)R0000$kh% diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_blind/blind/00000.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_blind/blind/00000.png index 19a17f45f334b6150445ad8c955131108e65e899..f2f7e61ba18c4c034b59fdeaeff18af7f308308b 100644 GIT binary patch delta 475 zcmV<10VMwU1N8%tB!9d~L_t(|obB3M4uc>NKvCOtC+vSo?4=*1gvJjiNuDoRTr3O zXN805@o}{wK1h1-Jt(n5I-^tZF4K%FXN~t>#B@J8xp-WsIDb@HjRJ!L*sY9R!ir4v zKluFlJ9=nPE>ojoDief|vCTNcw%z>P`UMm>yu$Bjx!)P4H9a8(MS_?$!0LKZGng z5ldg0#hhSwihq!sH^exGYjBGSPcHfj-F4`0N^hUqs7Ym}MO(mGmvhj3kT5QQ_RnE4 z&g2VwS#%J7j@7%Mnh#+YK9)6J2mk=^7tCi{SeL;UF}=8^H{!{aOLB+1xj4DxZmWIa z?C_GpZhhowjDJhnt}X}d{%<1Ing60X8x%m7eA)fqEmUT@?s=AFzZe&?N&mHafe6wi z=4i89K;`;Z`5Yaj=BrtK>QA?Rwe85h3wk&T0000000000000000002sKE5qQcLROO R)A;}Z002ovPDHLkV1l~`;q&`% z{44T)S@7P+W9M8rbGVi_S)Sv>CHsMt0BC(^qnky{p zXNABt{JPcG7e1mQ-e1v4N|O diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_blind/blind/00001.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_blind/blind/00001.png index 833cbdc542480950d8a625a26b89652dc32b39f7..d75768e73bda894da6da26893036ef7c3fc866ed 100644 GIT binary patch delta 855 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 diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_blind/clear/00002.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_blind/clear/00002.png index 250fb0413f25bdb029580640cd917ea3d2dc84de..8fbaf47a7a2430ca5e936981cb45a46e6d857bfc 100644 GIT binary patch delta 504 zcmVurYi(9anw<-g||)BPMBjd0G~QNLnr4IjxfpRBEpC z;$oCn{qbsPLLt|qE372(@;DA*q};M3u!4Mk{2M@1`*~JJTz2Z>rpof>`Zjo# z9w^8W3g5P&6@L@`Z3$Agffza#(sF03n}g2kut~!QI4v8bp~&bv$Msq)-<{!2srdy- zMp1UL008jCoO;FdW`9;-MRwsKM>@Y7$DS1uT>b{Bdm4DPfYBpjy)gn uVc7dQw@&3icw<)p0000000000u%AC``EvnIqxN3_0000ztHkX z6HP+UIRF3v00000000007$JlZLf9?E7_Z#|+=e;TM?S;=N&DXWy^@S#$pAGEV^{mm zmH{Hd2Bx*|Y#AV_I4Rw__MLM-y9F4g^g?#E?`*vR5ut9=+J85U#grca0N{;nX=olo zPcxa=xijGz>ik3$vWqJ@%<0&6hmGme;kxn-2q7puJK`bDFAv+Ik;uEHJBNMpg=)if z{)&6<4G_g_Y(N#Q2y7b-)Bc(f{XXo%zfEAR_$G-tIwO>|s#AT;0E~=~?u5W`^ z?FR)pV&mI3w1473e{(@PHaJ|ObPle=DPMeL%i*hiz)1{nDmI8qOozVYuZ8>WOmAw# zCnOm~Im7}0z!!5E74w_@Re=@Ng@+vJ{BB(Pu9RSIo`)nP%MH*-H$@_tXTXhZT3JSI zmlNW&<>aTU>zw{CKa}qmx=fQB>A9%<)E3PR*_Nc%p>uy%IEUU>5u*V?dnakUJ#xrIn?xfT0Oo|U#nxaUJ#x@RE^3BYudT-j79Uf#yrAWSK`EtQ?;=d w13nCUALq7d90+fm3IG5A00000008#$2h-bj0n>*7DgXcg07*qoM6N<$f>I0Xvj6}9 diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_clear/00001.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_clear/00001.png index 35abc6eefa0a2bd7e1a19fc8cefec7dd15b10fa0..184e20ac9663c78aa55d75a0c5e954ed57779967 100644 GIT binary patch delta 437 zcmV;m0ZRV!1M>rrNPiNd&^97MUfTrwzRRyErOv8)YFONlEmG-gHY95)rN?C7P3+qq zH0gq6^SOzmxqO@3W8?^s2de`l6~9}jYE*uer$lkKWgxdD3qMA{yzFm(_p;5Jo53iI zD8gLmX5Y4}8nyA%#MwaIWSblT!?RzwNE?<8TC+=b-tq?hP0GF zN4J$5Tt1~fm~x*jHH)b0`gjD{0dl>zS=T+Qt)Bi$3hZ5_C*k4aKvsL&yY56?!%mxS zyES#nQ)XxX-&37>`|xextOIbR*WCg18o25PaJk+`P_%gq6CJRWi(13JKRH{DKm;x1O$B8`Hau~#;64sgR=VZZMn|DUiw zT^8i(bAZi-d;-)jg9}HN_a6(LvD8BqjqceCnzw<&)-DhL00000000000000000000 f0000006g6rrNPjX!p>0&s%xjxq-*@?EN~yD}o*owWW1Cd^nhnWXO6f7#cN6=z z2Ti(QIeZ@C7%t!D_89pD$b;1Zl8WE$Qw=Krl&3^-wq+oXB^y7UfO*;9{_bU)H8+D% z7*T||(apXcR}E_8sfn|Jy2&>A1Psr9;UaBV_Q?KVqIA21Mt{$fOv|X3s_gR}eKBOD z{5iU<+~D#l^}&?qY^ha5UDwAe$UY#~Yg={Qv)cOU@1(%qReBK~{v60|PiNO%sB73| z(;c^_PkGAh?EiaeQfuaTHBKFXE4}Uxpx3~v8^GmyUqR94fozEy3tdI$ZeDp&)3f`P zYL9|+M``}SHh-8~I@-_mHT`M*T&QoOp56ANF$%0)MHkw?#jl{7=|Zf*S7pwV47u`nMW2u)a8r`-RG;a@w-7X;j00000000000000000000 f000000C==tU%+SAmlRvA00000NkvXXu0mjfi#OF) diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_clear/00002.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_clear/00002.png index 250fb0413f25bdb029580640cd917ea3d2dc84de..8fbaf47a7a2430ca5e936981cb45a46e6d857bfc 100644 GIT binary patch delta 504 zcmVurYi(9anw<-g||)BPMBjd0G~QNLnr4IjxfpRBEpC z;$oCn{qbsPLLt|qE372(@;DA*q};M3u!4Mk{2M@1`*~JJTz2Z>rpof>`Zjo# z9w^8W3g5P&6@L@`Z3$Agffza#(sF03n}g2kut~!QI4v8bp~&bv$Msq)-<{!2srdy- zMp1UL008jCoO;FdW`9;-MRwsKM>@Y7$DS1uT>b{Bdm4DPfYBpjy)gn uVc7dQw@&3icw<)p0000000000u%AC``EvnIqxN3_0000ztHkX z6HP+UIRF3v00000000007$JlZLf9?E7_Z#|+=e;TM?S;=N&DXWy^@S#$pAGEV^{mm zmH{Hd2Bx*|Y#AV_I4Rw__MLM-y9F4g^g?#E?`*vR5ut9=+J85U#grca0N{;nX=olo zPcxa=xijGz>ik3$vWqJ@%<0&6hmGme;kxn-2q7puJK`bDFAv+Ik;uEHJBNMpg=)if z{)&6<4G_g_Y(N#Q2y7b-)Bc(f{XXo%zfEAR_$G-tIwO>|s#AT;0E~=~?u5W`^ z?FR)pV&mI3w1473e{(@PHaJ|ObPle=DPMeL%i*hiz)1{nDmI8qOozVYuZ8>WOmAw# zCnOm~Im7}0z!!5E74w_@Re=@Ng@+vJ{BB(Pu9RSIo`)nP%MH*-H$@_tXTXhZT3JSI zmlNW&<>aTU>zw{CKa}qmx=fQB>A9%<)E3PR*_Nc%p>uy%IEUU>5u*V?dnakUJ#xrIn?xfT0Oo|U#nxaUJ#x@RE^3BYudT-j79Uf#yrAWSK`EtQ?;=d w13nCUALq7d90+fm3IG5A00000008#$2h-bj0n>*7DgXcg07*qoM6N<$f>I0Xvj6}9 diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_clear/00003.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_reject/reject_from_clear/00003.png index 6041767630409d90e0fcb2090b7226c6b63e58cd..137ca9e4946dcd461fab8ca146124917077d946d 100644 GIT binary patch delta 339 zcmaFM^p0tQO1-J4i(^Q|oVPb4`3@QIxCS=g@ch1C<$Wu^cjn0po=zWEzx&A~xa5j{ zaI`T41gzMxd-wg{rfa{y;fuMpc2m;J<{*aCn~t=vy7M$UQ^7@(;dQD)Y^`zi*>?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E*X;Fw3MNcM%Mj4 zThbUHAfTYUeE;{nsP{KzcdUs_J$i|KDZ{kXPI1?r*H3S46j;izW@=-}*RyX-cQcn? z;qJ@$>YK;bvgppPtL7IO=D8R(+*4cQq2KU#-EC`ePQiNa1$LiTq%RP0cz;B5ZetL` z!pdh8?Kl_@=yc|}zS(|ZqN(jI`+~3YOQ%KTzxedeqZvF`-Iu=poL~91+0ALQ=IJ&_7+p5*$h%@I z`7*-x#%Jq4!g0%U<-EgR*S&0(H0fKo`I+O!zS}q0toL!g-+!}2=#=)unV;D9&Mx$L iD0x^O>URkBp*nuryo0Bv{i`Yl33$5txvXNKvCOtC+vSo?4=*1gvJjiNuDoRTr3O zXN805@o}{wK1h1-Jt(n5I-^tZF4K%FXN~t>#B@J8xp-WsIDb@HjRJ!L*sY9R!ir4v zKluFlJ9=nPE>ojoDief|vCTNcw%z>P`UMm>yu$Bjx!)P4H9a8(MS_?$!0LKZGng z5ldg0#hhSwihq!sH^exGYjBGSPcHfj-F4`0N^hUqs7Ym}MO(mGmvhj3kT5QQ_RnE4 z&g2VwS#%J7j@7%Mnh#+YK9)6J2mk=^7tCi{SeL;UF}=8^H{!{aOLB+1xj4DxZmWIa z?C_GpZhhowjDJhnt}X}d{%<1Ing60X8x%m7eA)fqEmUT@?s=AFzZe&?N&mHafe6wi z=4i89K;`;Z`5Yaj=BrtK>QA?Rwe85h3wk&T0000000000000000002sKE5qQcLROO R)A;}Z002ovPDHLkV1l~`;q&`% z{44T)S@7P+W9M8rbGVi_S)Sv>CHsMt0BC(^qnky{p zXNABt{JPcG7e1mQ-e1v4N|O diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_too_deep/blind/00001.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_too_deep/blind/00001.png index 53ff3ba83c5f798d3c8adeba16d72d6859a39c3a..03f8a150dd97ece2e177c23cfd2e522d3b7a056f 100644 GIT binary patch delta 857 zcmV-f1E&1;2Ji-uB!4$aL_t(|ob8)ia>F1DMcqtx;{7j)z4XHqm*{bkgaN0~`RLdb zB!NJH-2QAUD5adw`@SEq`@Z)`JDLYXb!zYA$%{%UL#^Q*Ue)=@hyzO?2_^vCKlYbJs3U5bZ^<7;i2%9iTytpLtw#~|cB#+Cap&SO+UGSbYg={E+I9W{2 z7_~MB+HSpgUjd0WY_@n^z}3zY;sfob?U-kLS@CE7v)NV*ARq*JUwId_CZM^o(9#!+ z7S^?f1z(!y2`xqLge|CSac00FA#@!ihQ=D%}lKdCmLJ(PEWJ4!WRlCP)^+gH%wHAW!?ykdz zSXn#LV1KLZSVm8n1G`%?weU<_WP5p47mprNUBKd;o(Wf0P%8=30uB ziPIu=b2jx{K5^Uq1!)q~#gQFw;o0{5`<&Pyj(@(^2jur;a5?QiOCe{WnYj+5qOd(Z z9WnZ#IeJf0wcifcC#|iuPm&Vx8-Uo50}h>_Vbi1=F?!ob+N2MXBuSD8+8x+<3*D*{ zQS%~+<$Niztehn&g4L}Z{bk8GaC;bW(bFkCJ+|3jB+5^6jbU>0MNs=T< jk|arzBuSDaNiu<7a~cW1+6^~I00000NkvXXu0mjfM~RrX delta 863 zcmV-l1EBoy2KEM!B!4|gL_t(|ob8)ga_k@sMV+qf#QR?odwCyJ6QbcF#N@oz`AFFW zgpe47oP1p;NGX-)`@Zw*ecvO}a&w2M!QKb?=0z!`rP}ZTpBnsTM8i@CthT-gpTaeH ziIjzMnH@&f87QpF*A2f6q%M5bFFUQz4P8^zs11j8ODPeV_kSDST`A{1E~TDEnI8vi zv%WYPr-&u`r#HN^R=xq^gO~P;)k@?Ct;g|$u}A?Jf!HHXAsbpl zd@E*V?430YZ5JipS3r!fDO{e#wcDW*Q2++TaD@zuni`A@BF{VHxCU<>Mf6+6{h z0SU%JU?OZiQYdFb9XSb0Tdo}0g1X=h(;J7hQwZM!+<&r~ZF_@y$Hy{lKbZ(nsotra zX8_Jq);llXg%{%S^OU6B%?zlb(0>rN^h~Klxb^MaD5#sHf*B2%5 z*IEc(;D23VhFDpY-_**E#d?A^nwIq?(~<_@m(pGdShud&16S6P9KF3@$>NX~MnOKB z^ID4qGvK4Y<-oMeaUy5hv5Z%MHb?LZ0I!#{L^L(T?krKcr6CYil+@;Lv%97dA zY37ooOq{k;H)qqxwG+3!-;gH0zBsZ2CPua8?|*ZAMjWxM1&92R3@)erXDK8W+L`4r zcI4J)WFST#G_Chds*dYn9Fmxc<0lv?5x)V54LKm_1Pz-iJ&4uEM$jgF5ClOGc+l>^ z##`uBMMTYuB$o4`__A`AqzLZrto4s2f!iD#VwA4oVL p2!bF8f*=TjAP9mW2!bHkz&}o36;_|^Oy&Rp002ovPDHLkV1oA*qU8Vp diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_too_deep/clear/00001.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_too_deep/clear/00001.png index 4a29c45114303cef92ce0025d3b2cad511d1751a..c7d4300fc25a8f886470c84e8082ba85ba7feb67 100644 GIT binary patch delta 444 zcmcc4e2sa6O8s0<7srr_Id5-7Pij^Wa0oP>I(Nf=)t%FSdhlL-$!=uRvgF-QuO72p zWycB`;W^JW_b;1b<^0v<#+`oKC8w_Ecw7zgiVv>czQMox(h})uXP>LZoqc-z&OBxJ z2Ajya3M>EIov|wLXK0+z)0<(9cc$6=Fk^Za`u|7uwA`zAxZE;b>Ls5w=Y7rHy()0F zzwbQWE6!yn1P%85YMs3$^QQ6d$(^U(no0GlM@|c@UuE>n_*bHb_s`-l5j#&l^?o&3 z^ZU)P%^kbeZ{M$A?eOlp+3Q{5TaUiv4@#J?Wy{Gg&u;W4_5Cj4QeNxaU2m@)nKJ#% zx_`%m=kBWcVODUBamVH4Ql`CZ_3L&q-pRWWAF!ocq2Gm_d*PyN{`|RyDn(OjK1<*7 zy<@uMZ_NKoMLQ?x>69!!5qM@6$K<%}72Hui`bVn%WbfT9UCtgNJ2Nqb{f5ik>KmKq zXPGIcrPys^)+zt~w#Yj#+IZd!>t_t*{rT;^`(qhy>FVdQ&MBb@0Px1pA^-pY delta 445 zcmV;u0Yd)P1J?tPB!8YsL_t(|obA|cl7k=&fML7Sn{fXld6)gsStiYgvJjMZ-se|K zHN>D&cx)5w`!2thQU*hfL|EL9ZBpgymQuA+%GXriE$q`CH0gq6_qB^xcl9>6$H*r@ z9;^qJIo)qg#F3uj+Ka}ACT+y&ARSceR0Nv9I$tlo`ln%0~z*oblr)%g`GCtep_P7Q)XBHi}Hoad!fv5`S0S04|sI3W|0SWJ}a|5Gp!%^VS(Dk)!0h|Dj#PT|?T>?Th=AM*E%Cy?pquH1*oc3vcUI%>fU1@mG6%pW>R!W|`T zWzD!_u9ySdJ-!t-{#NiYbATN%xlP}`9*+J^-Zcl{W;XZl1urYi(9anw<-g||)BPMBjd0G~QNLnr4IjxfpRBEpC z;$oCn{qbsPLLt|qE372(@;DA*q};M3u!4Mk{2M@1`*~JJTz2Z>rpof>`Zjo# z9w^8W3g5P&6@L@`Z3$Agffza#(sF03n}g2kut~!QI4v8bp~&bv$Msq)-<{!2srdy- zMp1UL008jCoO;FdW`9;-MRwsKM>@Y7$DS1uT>b{Bdm4DPfYBpjy)gn uVc7dQw@&3icw<)p0000000000u%AC``EvnIqxN3_0000ztHkX z6HP+UIRF3v00000000007$JlZLf9?E7_Z#|+=e;TM?S;=N&DXWy^@S#$pAGEV^{mm zmH{Hd2Bx*|Y#AV_I4Rw__MLM-y9F4g^g?#E?`*vR5ut9=+J85U#grca0N{;nX=olo zPcxa=xijGz>ik3$vWqJ@%<0&6hmGme;kxn-2q7puJK`bDFAv+Ik;uEHJBNMpg=)if z{)&6<4G_g_Y(N#Q2y7b-)Bc(f{XXo%zfEAR_$G-tIwO>|s#AT;0E~=~?u5W`^ z?FR)pV&mI3w1473e{(@PHaJ|ObPle=DPMeL%i*hiz)1{nDmI8qOozVYuZ8>WOmAw# zCnOm~Im7}0z!!5E74w_@Re=@Ng@+vJ{BB(Pu9RSIo`)nP%MH*-H$@_tXTXhZT3JSI zmlNW&<>aTU>zw{CKa}qmx=fQB>A9%<)E3PR*_Nc%p>uy%IEUU>5u*V?dnakUJ#xrIn?xfT0Oo|U#nxaUJ#x@RE^3BYudT-j79Uf#yrAWSK`EtQ?;=d w13nCUALq7d90+fm3IG5A00000008#$2h-bj0n>*7DgXcg07*qoM6N<$f>I0Xvj6}9 diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_too_large/blind/00000.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_too_large/blind/00000.png index 19a17f45f334b6150445ad8c955131108e65e899..f2f7e61ba18c4c034b59fdeaeff18af7f308308b 100644 GIT binary patch delta 475 zcmV<10VMwU1N8%tB!9d~L_t(|obB3M4uc>NKvCOtC+vSo?4=*1gvJjiNuDoRTr3O zXN805@o}{wK1h1-Jt(n5I-^tZF4K%FXN~t>#B@J8xp-WsIDb@HjRJ!L*sY9R!ir4v zKluFlJ9=nPE>ojoDief|vCTNcw%z>P`UMm>yu$Bjx!)P4H9a8(MS_?$!0LKZGng z5ldg0#hhSwihq!sH^exGYjBGSPcHfj-F4`0N^hUqs7Ym}MO(mGmvhj3kT5QQ_RnE4 z&g2VwS#%J7j@7%Mnh#+YK9)6J2mk=^7tCi{SeL;UF}=8^H{!{aOLB+1xj4DxZmWIa z?C_GpZhhowjDJhnt}X}d{%<1Ing60X8x%m7eA)fqEmUT@?s=AFzZe&?N&mHafe6wi z=4i89K;`;Z`5Yaj=BrtK>QA?Rwe85h3wk&T0000000000000000002sKE5qQcLROO R)A;}Z002ovPDHLkV1l~`;q&`% z{44T)S@7P+W9M8rbGVi_S)Sv>CHsMt0BC(^qnky{p zXNABt{JPcG7e1mQ-e1v4N|O diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_too_large/blind/00001.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_too_large/blind/00001.png index 833cbdc542480950d8a625a26b89652dc32b39f7..d75768e73bda894da6da26893036ef7c3fc866ed 100644 GIT binary patch delta 855 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 diff --git a/tests/integration/nano/snapshots/nanosp/test_blindsign_too_large/clear/00002.png b/tests/integration/nano/snapshots/nanosp/test_blindsign_too_large/clear/00002.png index 250fb0413f25bdb029580640cd917ea3d2dc84de..8fbaf47a7a2430ca5e936981cb45a46e6d857bfc 100644 GIT binary patch delta 504 zcmVurYi(9anw<-g||)BPMBjd0G~QNLnr4IjxfpRBEpC z;$oCn{qbsPLLt|qE372(@;DA*q};M3u!4Mk{2M@1`*~JJTz2Z>rpof>`Zjo# z9w^8W3g5P&6@L@`Z3$Agffza#(sF03n}g2kut~!QI4v8bp~&bv$Msq)-<{!2srdy- zMp1UL008jCoO;FdW`9;-MRwsKM>@Y7$DS1uT>b{Bdm4DPfYBpjy)gn uVc7dQw@&3icw<)p0000000000u%AC``EvnIqxN3_0000ztHkX z6HP+UIRF3v00000000007$JlZLf9?E7_Z#|+=e;TM?S;=N&DXWy^@S#$pAGEV^{mm zmH{Hd2Bx*|Y#AV_I4Rw__MLM-y9F4g^g?#E?`*vR5ut9=+J85U#grca0N{;nX=olo zPcxa=xijGz>ik3$vWqJ@%<0&6hmGme;kxn-2q7puJK`bDFAv+Ik;uEHJBNMpg=)if z{)&6<4G_g_Y(N#Q2y7b-)Bc(f{XXo%zfEAR_$G-tIwO>|s#AT;0E~=~?u5W`^ z?FR)pV&mI3w1473e{(@PHaJ|ObPle=DPMeL%i*hiz)1{nDmI8qOozVYuZ8>WOmAw# zCnOm~Im7}0z!!5E74w_@Re=@Ng@+vJ{BB(Pu9RSIo`)nP%MH*-H$@_tXTXhZT3JSI zmlNW&<>aTU>zw{CKa}qmx=fQB>A9%<)E3PR*_Nc%p>uy%IEUU>5u*V?dnakUJ#xrIn?xfT0Oo|U#nxaUJ#x@RE^3BYudT-j79Uf#yrAWSK`EtQ?;=d w13nCUALq7d90+fm3IG5A00000008#$2h-bj0n>*7DgXcg07*qoM6N<$f>I0Xvj6}9 diff --git a/tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00002.png b/tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00002.png index 8ace1d8be1f2d497ee5ce715fc0e48bea5dcc7e2..fc2f4b72997ee897e1202b3f2436c2e5babbc59c 100644 GIT binary patch delta 704 zcmV;x0zduV1=t0UB!8btL_t(|ob8%hmck$mhSB3r*#DBcmwD(J26GR^f^+`wsa8lr z5-vd>Whai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00004.png b/tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00005.png b/tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00005.png index c4768d4fa3e1b0a3daa4967d264c1c4d3d228e4c..ca01281085c22f97d87672ca375c634fc9674dbf 100644 GIT binary patch delta 322 zcmV-I0log<0^I_TB!47HL_t(|obB0JZo?oD08lsTO}PJ&xJy5*Qp~tsq6$d*-d6&) zm@sU1mSqk(=bZECCCiQv7}$DQsXc9?zP)@-DRut6F@Fa?2^c%}Z}mm&@fX@Z znjAcStLW_iY{Jbz-z-7>b5NSAXTWI;ajs0VZ=H(EOuGpWnFsZveCw8aCn&D0rRDaX zKX#r24gjz$AEN^}a^;XyKP}gn#X={Ldk)^vU8%ZQKHTT%0G?4ERxS?enGfJQucPVd z{Sz?r@SobB>^lL|F8#&(&j6mc`?BnKjK{C>k23%O0000000000000000DxEZ1-Xy! UJc{I~Bme*a07*qoM6N<$f<^P34*&oF delta 325 zcmV-L0lNO(0^kCWB!4GKL_t(|obB0Lj=~@m0MKe?C+vSo>}5V0kwTwi0!%&UON)eC zF0a;U8bgdR#@IWG4xaU;_8pO0Y}Ry_e6O}xCLqQbLTD1tfjQjNQ}HGL!RnQ1*}rx5 zyr^XwLI`zpiv)D({UWBKL+5zvz~-N&(!(b5>gjU`q4E9JIe&O3pzqkf)E9M+|D*k* z$iZ`~pt0}Sgo}Z`Sc2N;AT^iIfWsK-xiZMUb*Nru%1yY-JjfU2OI7lnAUU&^rs^$k zcANta05DCD-T~}6bI6&$7KfSo3EA=EvYj_{TSZ%E%8?)OetHM+7iq|!8P|iKzE@sH z)6&foF!=Bv+CJxdz{pE~a`PF$M^;~!?f-#OSO1gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$wpiY` 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 delta 395 zcmZ3;yp(x@N_~!}i(^Q|oVPckH#IBpG$h`#v`+l*U8G-|z&BZq(e>k`bN_8Eud+!g z1jW6SIlbx1>p7o2*XF$UeA&F`-oLf0Pu_Xkx1i~Uzh3d4myvVJoB!NwU&ddZd&BRT zN?K&*F1yF;6n{&HY`HRb+bZU~;;gkh=H6fK5-fOcRlV@${NOpo_1l&@Jo9@RXse%p zvRmqG?T-7-mJ;ubw|#bB(K+=AgU^||^h3MkZ|zzBzjgmCUrXortBRbjNbHF=?=uh9 z`*t*B@~+bGts3HIlUH{B3vF7~b1;i#_JWI3PU_g(+&y*5TH&ljvykInhLljxWo5e^ zgLbc4@yaA*)3?8i{L;5sCpQ<@Yff#_aNX~}o+0Kiv0tTLtnNV%YoV<%z6enfmA2{{s&%{S7voS89K! jf69Ud`V2TggQ5JpX6dV)0qehlRCv1jxv;ErN@xNAPe-_@ diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00005.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00005.png index 5b226371abe91f0ab8d0288788b6fd6ded2f177e..c5894b08c2f035d393960ca23b646f4f1d8ea84c 100644 GIT binary patch delta 352 zcmV-m0iXVm1C0ZaB!5&%L_t(|obA|Aa)clZfZ=qfH{t$A%3b=vEDZz|XIc_x|L zLD)nkB9eous%rEs0=)d8{efsBZW}rz-_sGt1gL5$Wy^dn)akZJ>6>jZJtBR4eRq3m zXBtW=ez-0HA<-Y^Gz7HH$4{&_YiBQqu-)75Qp)E4>vQm%fPdI~|5hw~#2>VN3^{lm zo!IPi7UAJW?_NRsbI^vfPr&6I{Iil|-MZvoGvgv0@*LQg@~tj*C1_UOrLFtUKbxn( z0RR9ZU(pkoS2EI9sMB8O#gF}pw$1#(kFHEsw&AAVz0>w5S3A0X_}AZLH#E7EYPx>J zte4vv3iF30AU#9K{#Nz`{9nYA)L_t(|obA|AZo?o9fMKuNO}PJ&e3w0-F~B4wQfE8r|2=I@ z2(Fz52az09RaK*-2=KBW`6r^y=r(moy_Yl21yI#eic35jHQbgd{neka{6xn5+Tr~n z&oY!!>~uo`Lb5-_G$pjgV*{(FwWHf9`r+;GQi}8UwKe!FK!5DLe=8R@;}2RtrW(AC z4mkUqMR>Z=hewcq4cc`5FJK#k{jDTfx3=tKW?qCteh2+S`PPtrC1|cZOWSbIFPo>q z0RR9ZU(o@G95gdBHmS=|=lxIpcj|NO%k!sqCRcXimao3c^N+4}bn)=Fzr}87ekToe zz2z@<+!-44=RXx7L)PBt0R{M{j3+5%_5#>-RmOe)<@wtUl_c30k?-gL&e$~BCdWOf zH;XSoyIcF+P`fjFcTugEJsEZD%9CLM6&e5l04e+ckn9m_##tZA00000NkvXXu0mjf DZqKfn diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00006.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00006.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztTc?9lLqhrP``?db{pjpG zrn-!U0To35*yKO|c_nY(;}iDl3pp15@@+0yKj(GZ2jO)Qi!0;h?@JvK{bu>h_dw;m zC>H&`#}l@1wo&cf>|r+HxasUAEeqn77VM}Oo1S&_%OUo&8v|3VEAJn(oc*S;Wc7xV z>D?PkR$Jt~$Y$Ht9=o-3_wDs}M9Xa%!wV&h zZNFN6;N2?O)%sV(gcCHDR}1D{YwOw0a+TZU?3Pm&UgqzdJ2R!)ms}J0cxC>UPkbi= z&zTbu>O1h^SwFMXWt&w=+!tJ^WxjS-qlUF zYO+4%EXdpBY{z)GdjALI+^B77^+ti^yB!xl_bfZT!ZCDPW&b`2Ax(Mr?NevR*e$i2 z`N{NlmRR8a*Qp$v_)k>jZeCX%7H$2vSLDWSFaJY_=QH1Yb9?n`zbmG1w!A#HHZyph z(eCg6ZR$${?f?BSE4aoO@$%bCmMY$uQs#(tg&bYqcv3t=GG?^wfsK)n&nHY9i!jg&Y8-?fE6sb Yr7x8=$-zY^w+tlj>FVdQ&MBb@0I#63R{#J2 delta 383 zcmeyx{EK;lH?xYsqltc6tTS(0ed3!~D_$>au>O1h^Q}46XWt&w=+!tJ^WxjS-qlUF zYO+4%EYREJe2?*P_5Kgaxl!BF>Wu=+cRMcr?OAqug=grt%Km*4LYngK)2Ggkv0G|4 z^V5vntz9ebe>GygDV?%+Tj+J$)obVebK`mwx>Wq(!|#nb-`>91#a+s~J7-s6_N^() z&%FCc#gz;LhN>hjF; zW{=+tH|omUpS-fTSsB02aNFkpOV;lGVitCO+s;~sHHV7KlQWVcEhDEUe?2qj@pT6C z+1{FAVbkgj&Y0<6TbAu$^uJGZp54>!t?c)=nb!ucssFL(!`!g_+_zp`JsWnC0Xum0 Zhe_n}l>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>zF1DKvB2Tov{BUv6p^i%1|K$#1f7@_k6Vu z7A-r>U4)HJ&kvttsO2tiM`Y{FI^h_q4$@wfYrt@~fVZiW>c5ll14dsxeqSC+ zgw;dccjmdB?tf5|gAE3Q{IDFTi|71`>VDj7qsc|s*nNk3%*ocE&i;Yr=+dQ8VpES) zYDGx2w`*s;TAo@4AKn$}+{)e^~ ys;>{rpS?DdH`-eR000000000000000EcgY@OI)4~jL3`t0000 diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_inside/00002.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_inside/00002.png index 32580b8ffdb61c4595eb9a4fc3b5a4d76d1a5798..d6deabe98f0ae465442e6f8d89e55adc6a1c56ce 100644 GIT binary patch delta 678 zcmV;X0$Kge1;+)DB!7-cL_t(|ob8%Rk^>H8n4?=lN34naUfTV4F$VyffV zfcOHES2~INzRUAh%RE>lL#qo^ayXdrh;jxhtXne})5h4ave~D8@JL`C#5C2D28UA? zJ5>%yFfwg>P=ARP!y;lMi#a^$s4%0$crMOy+mRfr)KQM$O?SP*N5UUX* z>4Se?YyRp|6n@=fSn_RjmLAd?t!NuBM;q$37G}`&WG}WRSao_tlqR1F2}sB^CV*j> zYs|`XhtDoiHsaiCSQF4ZJw2v)`cTQUin4=e+A@R*5PwfP7PmQvH04~f>v3I*x>8TM{>nT=@Zl+25+&3elwcU7wSto82_n31C(F>B8c zF1DhH0iZ@%@kFyL7>XDtaMg0xbS-(Qzo2 zgm_6xe#%MQ_uZba>)L3^PN)|a>)oY#4eIEAWv8Q-UNgE`Ra>s>Y7gaYHfw1@td_-8 z3z_N{{cwW!shcc^#$T+kmWZ@3(N;<0e*(69pRIA}qpsJge}A19PdMe6g}>|{+vmXY z{w(?55IY2O^2ZURE}u0>z0z4h_oZK4fL!7~kxpw+FG=eXE}vVL-WHa$?U(TO0|o#9 z000Cf3R02LNFmpHFu-83Cd)inBtxqURB}3)iHHgYDy&;K7_-LcnHU)c%`oFaSO+yt zjikZpl*Lb#6Mqt%Oxqt+p_#Cgg65)Ex!w~(nke?V+&WAPU6tx;by}o$DL*lUqV0fA zDdJ)75Z~99zlId0Uym48VjG>MhqOkk+Q!S#mTs#>8ZfBqH6VN?6gQi6KP~o$RvVRZHv}GvYh{2oBhEs4XvjVlnW}L5R;0~ZXKiokjIRWt?B-kGS02=q3ZVUa$Bsd=(rCkZn zulFZqrJFF_umSsq)H_usr_YxrfK7AIyokD-VXuCd*{Ft2$-L;=lv}oht5V%(tN)O| ziXH{2S$}(dc`g3>TzAFx z?ANQj3rzywes$QQTdd(&zWrymVS32&U*82y{xuy5cCTLJ^+D65-t*t8@KS(ChR?nZ?1jhYNu(t zKu?aRJ#NpkGd1T@{?EOYbZ1xJ_7f+4WuJuXyT`O9sA$HP8%#9;{ja$;{oTGyY|EBO zmuD7*&3ThwpULFk% zDzT+TQ0V`vVZ%6*ZLkdUo-kcIqh2O)lS5hMn^XH^S?|z zEWqAheR27Zy5*N2&x#JH-5Bx6-6A1@@qxT_h-1IRHOs@xBIjPdBJs3jN4NOSpenb$ z^#wOeJ}ohNZCvfy(mt=uI4{%v)cupM6+(Yb;@)s--C^0+x(B4Ai}otK+;3X#xLP}L z@12WX!hhfP>oUC0{%4=r_uJ_5i(^Q|oVPckg$^n3I0Tm5;rtyR^!*XLvhd`FrAzxQzSorMu<=X? zlY1#~defEHb3QxnT_f))*}Nz2|Juzb@8tF^Xu9F=w|W2T$ma6qJvobCUXHWg)@|4s z8n$a)?j75d`sS`_yH1Dk9(e2bRRf;rDDIrIcHh3>zX+()|?!%W{SN=PHuYe2e d3^>4n8RjPpB(6@H^O*&t!qe5yWt~$(698oRv;F`8 delta 395 zcmZ3;yp(x@N_~!}i(^Q|oVPckH#IBpG$h`#v`+l*U8G-|z&BZq(e>k`bN_8Eud+!g z1jW6SIlbx1>p7o2*XF$UeA&F`-oLf0Pu_Xkx1i~Uzh3d4myvVJoB!NwU&ddZd&BRT zN?K&*F1yF;6n{&HY`HRb+bZU~;;gkh=H6fK5-fOcRlV@${NOpo_1l&@Jo9@RXse%p zvRmqG?T-7-mJ;ubw|#bB(K+=AgU^||^h3MkZ|zzBzjgmCUrXortBRbjNbHF=?=uh9 z`*t*B@~+bGts3HIlUH{B3vF7~b1;i#_JWI3PU_g(+&y*5TH&ljvykInhLljxWo5e^ zgLbc4@yaA*)3?8i{L;5sCpQ<@Yff#_aNX~}o+0Kiv0tTLtnNV%YoV<%z6enfmA2{{s&%{S7voS89K! jf69Ud`V2TggQ5JpX6dV)0qehlRCv1jxv;ErN@xNAPe-_@ diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_inside/00005.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_inside/00005.png index 5b226371abe91f0ab8d0288788b6fd6ded2f177e..c5894b08c2f035d393960ca23b646f4f1d8ea84c 100644 GIT binary patch delta 352 zcmV-m0iXVm1C0ZaB!5&%L_t(|obA|Aa)clZfZ=qfH{t$A%3b=vEDZz|XIc_x|L zLD)nkB9eous%rEs0=)d8{efsBZW}rz-_sGt1gL5$Wy^dn)akZJ>6>jZJtBR4eRq3m zXBtW=ez-0HA<-Y^Gz7HH$4{&_YiBQqu-)75Qp)E4>vQm%fPdI~|5hw~#2>VN3^{lm zo!IPi7UAJW?_NRsbI^vfPr&6I{Iil|-MZvoGvgv0@*LQg@~tj*C1_UOrLFtUKbxn( z0RR9ZU(pkoS2EI9sMB8O#gF}pw$1#(kFHEsw&AAVz0>w5S3A0X_}AZLH#E7EYPx>J zte4vv3iF30AU#9K{#Nz`{9nYA)L_t(|obA|AZo?o9fMKuNO}PJ&e3w0-F~B4wQfE8r|2=I@ z2(Fz52az09RaK*-2=KBW`6r^y=r(moy_Yl21yI#eic35jHQbgd{neka{6xn5+Tr~n z&oY!!>~uo`Lb5-_G$pjgV*{(FwWHf9`r+;GQi}8UwKe!FK!5DLe=8R@;}2RtrW(AC z4mkUqMR>Z=hewcq4cc`5FJK#k{jDTfx3=tKW?qCteh2+S`PPtrC1|cZOWSbIFPo>q z0RR9ZU(o@G95gdBHmS=|=lxIpcj|NO%k!sqCRcXimao3c^N+4}bn)=Fzr}87ekToe zz2z@<+!-44=RXx7L)PBt0R{M{j3+5%_5#>-RmOe)<@wtUl_c30k?-gL&e$~BCdWOf zH;XSoyIcF+P`fjFcTugEJsEZD%9CLM6&e5l04e+ckn9m_##tZA00000NkvXXu0mjf DZqKfn diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_inside/00006.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_inside/00006.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$bu>O1h^SwFMXWt&w=+!tJ^WxjS-qlUF zYO+4%EXdpBY{z)GdjALI+^B77^+ti^yB!xl_bfZT!ZCDPW&b`2Ax(Mr?NevR*e$i2 z`N{NlmRR8a*Qp$v_)k>jZeCX%7H$2vSLDWSFaJY_=QH1Yb9?n`zbmG1w!A#HHZyph z(eCg6ZR$${?f?BSE4aoO@$%bCmMY$uQs#(tg&bYqcv3t=GG?^wfsK)n&nHY9i!jg&Y8-?fE6sb Yr7x8=$-zY^w+tlj>FVdQ&MBb@0I#63R{#J2 delta 383 zcmeyx{EK;lH?xYsqltc6tTS(0ed3!~D_$>au>O1h^Q}46XWt&w=+!tJ^WxjS-qlUF zYO+4%EYREJe2?*P_5Kgaxl!BF>Wu=+cRMcr?OAqug=grt%Km*4LYngK)2Ggkv0G|4 z^V5vntz9ebe>GygDV?%+Tj+J$)obVebK`mwx>Wq(!|#nb-`>91#a+s~J7-s6_N^() z&%FCc#gz;LhN>hjF; zW{=+tH|omUpS-fTSsB02aNFkpOV;lGVitCO+s;~sHHV7KlQWVcEhDEUe?2qj@pT6C z+1{FAVbkgj&Y0<6TbAu$^uJGZp54>!t?c)=nb!ucssFL(!`!g_+_zp`JsWnC0Xum0 Zhe_n}l>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>zF1DKvB2Tov{BUv6p^i%1|K$#1f7@_k6Vu z7A-r>U4)HJ&kvttsO2tiM`Y{FI^h_q4$@wfYrt@~fVZiW>c5ll14dsxeqSC+ zgw;dccjmdB?tf5|gAE3Q{IDFTi|71`>VDj7qsc|s*nNk3%*ocE&i;Yr=+dQ8VpES) zYDGx2w`*s;TAo@4AKn$}+{)e^~ ys;>{rpS?DdH`-eR000000000000000EcgY@OI)4~jL3`t0000 diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_removed_inside/00002.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_removed_inside/00002.png index 32580b8ffdb61c4595eb9a4fc3b5a4d76d1a5798..d6deabe98f0ae465442e6f8d89e55adc6a1c56ce 100644 GIT binary patch delta 678 zcmV;X0$Kge1;+)DB!7-cL_t(|ob8%Rk^>H8n4?=lN34naUfTV4F$VyffV zfcOHES2~INzRUAh%RE>lL#qo^ayXdrh;jxhtXne})5h4ave~D8@JL`C#5C2D28UA? zJ5>%yFfwg>P=ARP!y;lMi#a^$s4%0$crMOy+mRfr)KQM$O?SP*N5UUX* z>4Se?YyRp|6n@=fSn_RjmLAd?t!NuBM;q$37G}`&WG}WRSao_tlqR1F2}sB^CV*j> zYs|`XhtDoiHsaiCSQF4ZJw2v)`cTQUin4=e+A@R*5PwfP7PmQvH04~f>v3I*x>8TM{>nT=@Zl+25+&3elwcU7wSto82_n31C(F>B8c zF1DhH0iZ@%@kFyL7>XDtaMg0xbS-(Qzo2 zgm_6xe#%MQ_uZba>)L3^PN)|a>)oY#4eIEAWv8Q-UNgE`Ra>s>Y7gaYHfw1@td_-8 z3z_N{{cwW!shcc^#$T+kmWZ@3(N;<0e*(69pRIA}qpsJge}A19PdMe6g}>|{+vmXY z{w(?55IY2O^2ZURE}u0>z0z4h_oZK4fL!7~kxpw+FG=eXE}vVL-WHa$?U(TO0|o#9 z000Cf3R02LNFmpHFu-83Cd)inBtxqURB}3)iHHgYDy&;K7_-LcnHU)c%`oFaSO+yt zjikZpl*Lb#6Mqt%Oxqt+p_#Cgg65)Ex!w~(nke?V+&WAPU6tx;by}o$DL*lUqV0fA zDdJ)75Z~99zlId0Uym48VjG>MhqOkk+Q!S#mTs#>8ZfBqH6VN?6gQi6KP~o$RvVRZHv}GvYh{2oBhEs4XvjVlnW}L5R;0~ZXKiokjIRWt?B-kGS02=q3ZVUa$Bsd=(rCkZn zulFZqrJFF_umSsq)H_usr_YxrfK7AIyokD-VXuCd*{Ft2$-L;=lv}oht5V%(tN)O| ziXH{2S$}(dc`g3>TzAFx z?ANQj3rzywes$QQTdd(&zWrymVS32&U*82y{xuy5cCTLJ^+D65-t*t8@KS(ChR?nZ?1jhYNu(t zKu?aRJ#NpkGd1T@{?EOYbZ1xJ_7f+4WuJuXyT`O9sA$HP8%#9;{ja$;{oTGyY|EBO zmuD7*&3ThwpULFk% zDzT+TQ0V`vVZ%6*ZLkdUo-kcIqh2O)lS5hMn^XH^S?|z zEWqAheR27Zy5*N2&x#JH-5Bx6-6A1@@qxT_h-1IRHOs@xBIjPdBJs3jN4NOSpenb$ z^#wOeJ}ohNZCvfy(mt=uI4{%v)cupM6+(Yb;@)s--C^0+x(B4Ai}otK+;3X#xLP}L z@12WX!hhfP>oUC0{%4=r_uJ_5i(^Q|oVPckg$^n3I0Tm5;rtyR^!*XLvhd`FrAzxQzSorMu<=X? zlY1#~defEHb3QxnT_f))*}Nz2|Juzb@8tF^Xu9F=w|W2T$ma6qJvobCUXHWg)@|4s z8n$a)?j75d`sS`_yH1Dk9(e2bRRf;rDDIrIcHh3>zX+()|?!%W{SN=PHuYe2e d3^>4n8RjPpB(6@H^O*&t!qe5yWt~$(698oRv;F`8 delta 395 zcmZ3;yp(x@N_~!}i(^Q|oVPckH#IBpG$h`#v`+l*U8G-|z&BZq(e>k`bN_8Eud+!g z1jW6SIlbx1>p7o2*XF$UeA&F`-oLf0Pu_Xkx1i~Uzh3d4myvVJoB!NwU&ddZd&BRT zN?K&*F1yF;6n{&HY`HRb+bZU~;;gkh=H6fK5-fOcRlV@${NOpo_1l&@Jo9@RXse%p zvRmqG?T-7-mJ;ubw|#bB(K+=AgU^||^h3MkZ|zzBzjgmCUrXortBRbjNbHF=?=uh9 z`*t*B@~+bGts3HIlUH{B3vF7~b1;i#_JWI3PU_g(+&y*5TH&ljvykInhLljxWo5e^ zgLbc4@yaA*)3?8i{L;5sCpQ<@Yff#_aNX~}o+0Kiv0tTLtnNV%YoV<%z6enfmA2{{s&%{S7voS89K! jf69Ud`V2TggQ5JpX6dV)0qehlRCv1jxv;ErN@xNAPe-_@ diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_removed_inside/00005.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_removed_inside/00005.png index 5b226371abe91f0ab8d0288788b6fd6ded2f177e..c5894b08c2f035d393960ca23b646f4f1d8ea84c 100644 GIT binary patch delta 352 zcmV-m0iXVm1C0ZaB!5&%L_t(|obA|Aa)clZfZ=qfH{t$A%3b=vEDZz|XIc_x|L zLD)nkB9eous%rEs0=)d8{efsBZW}rz-_sGt1gL5$Wy^dn)akZJ>6>jZJtBR4eRq3m zXBtW=ez-0HA<-Y^Gz7HH$4{&_YiBQqu-)75Qp)E4>vQm%fPdI~|5hw~#2>VN3^{lm zo!IPi7UAJW?_NRsbI^vfPr&6I{Iil|-MZvoGvgv0@*LQg@~tj*C1_UOrLFtUKbxn( z0RR9ZU(pkoS2EI9sMB8O#gF}pw$1#(kFHEsw&AAVz0>w5S3A0X_}AZLH#E7EYPx>J zte4vv3iF30AU#9K{#Nz`{9nYA)L_t(|obA|AZo?o9fMKuNO}PJ&e3w0-F~B4wQfE8r|2=I@ z2(Fz52az09RaK*-2=KBW`6r^y=r(moy_Yl21yI#eic35jHQbgd{neka{6xn5+Tr~n z&oY!!>~uo`Lb5-_G$pjgV*{(FwWHf9`r+;GQi}8UwKe!FK!5DLe=8R@;}2RtrW(AC z4mkUqMR>Z=hewcq4cc`5FJK#k{jDTfx3=tKW?qCteh2+S`PPtrC1|cZOWSbIFPo>q z0RR9ZU(o@G95gdBHmS=|=lxIpcj|NO%k!sqCRcXimao3c^N+4}bn)=Fzr}87ekToe zz2z@<+!-44=RXx7L)PBt0R{M{j3+5%_5#>-RmOe)<@wtUl_c30k?-gL&e$~BCdWOf zH;XSoyIcF+P`fjFcTugEJsEZD%9CLM6&e5l04e+ckn9m_##tZA00000NkvXXu0mjf DZqKfn diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_removed_inside/00006.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_removed_inside/00006.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztTc?9lLqhrP``?db{pjpG zrn-!U0To35*yKO|c_nY(;}iDl3pp15@@+0yKj(GZ2jO)Qi!0;h?@JvK{bu>h_dw;m zC>H&`#}l@1wo&cf>|r+HxasUAEeqn77VM}Oo1S&_%OUo&8v|3VEAJn(oc*S;Wc7xV z>D?PkR$Jt~$Y$Ht9=o-3_wDs}M9Xa%!wV&h zZNFN6;N2?O)%sV(gcCHDR}1D{YwOw0a+TZU?3Pm&UgqzdJ2R!)ms}J0cxC>UPkbi= z&zTbu>O1h^SwFMXWt&w=+!tJ^WxjS-qlUF zYO+4%EXdpBY{z)GdjALI+^B77^+ti^yB!xl_bfZT!ZCDPW&b`2Ax(Mr?NevR*e$i2 z`N{NlmRR8a*Qp$v_)k>jZeCX%7H$2vSLDWSFaJY_=QH1Yb9?n`zbmG1w!A#HHZyph z(eCg6ZR$${?f?BSE4aoO@$%bCmMY$uQs#(tg&bYqcv3t=GG?^wfsK)n&nHY9i!jg&Y8-?fE6sb Yr7x8=$-zY^w+tlj>FVdQ&MBb@0I#63R{#J2 delta 383 zcmeyx{EK;lH?xYsqltc6tTS(0ed3!~D_$>au>O1h^Q}46XWt&w=+!tJ^WxjS-qlUF zYO+4%EYREJe2?*P_5Kgaxl!BF>Wu=+cRMcr?OAqug=grt%Km*4LYngK)2Ggkv0G|4 z^V5vntz9ebe>GygDV?%+Tj+J$)obVebK`mwx>Wq(!|#nb-`>91#a+s~J7-s6_N^() z&%FCc#gz;LhN>hjF; zW{=+tH|omUpS-fTSsB02aNFkpOV;lGVitCO+s;~sHHV7KlQWVcEhDEUe?2qj@pT6C z+1{FAVbkgj&Y0<6TbAu$^uJGZp54>!t?c)=nb!ucssFL(!`!g_+_zp`JsWnC0Xum0 Zhe_n}l>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>zF1DKvB2Tov{BUv6p^i%1|K$#1f7@_k6Vu z7A-r>U4)HJ&kvttsO2tiM`Y{FI^h_q4$@wfYrt@~fVZiW>c5ll14dsxeqSC+ zgw;dccjmdB?tf5|gAE3Q{IDFTi|71`>VDj7qsc|s*nNk3%*ocE&i;Yr=+dQ8VpES) zYDGx2w`*s;TAo@4AKn$}+{)e^~ ys;>{rpS?DdH`-eR000000000000000EcgY@OI)4~jL3`t0000 diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/unknown_magic_bytes/00001.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/unknown_magic_bytes/00001.png index b0e8287da8e50b8b410c291da889d5cffa4a8e1a..393a15fb76753fbec14215b680629fedbfa392f5 100644 GIT binary patch delta 383 zcmeyx{EK;lH?yb0gNc4xtg~-hed3&0D_$>bu>O1h^SwFMXWt&w=+!tJ^WxjS-qlUF zYO+4%EXdpBY{z)GdjALI+^B77^+ti^yB!xl_bfZT!ZCDPW&b`2Ax(Mr?NevR*e$i2 z`N{NlmRR8a*Qp$v_)k>jZeCX%7H$2vSLDWSFaJY_=QH1Yb9?n`zbmG1w!A#HHZyph z(eCg6ZR$${?f?BSE4aoO@$%bCmMY$uQs#(tg&bYqcv3t=GG?^wfsK)n&nHY9i!jg&Y8-?fE6sb Yr7x8=$-zY^w+tlj>FVdQ&MBb@0I#63R{#J2 delta 383 zcmeyx{EK;lH?xYsqltc6tTS(0ed3!~D_$>au>O1h^Q}46XWt&w=+!tJ^WxjS-qlUF zYO+4%EYREJe2?*P_5Kgaxl!BF>Wu=+cRMcr?OAqug=grt%Km*4LYngK)2Ggkv0G|4 z^V5vntz9ebe>GygDV?%+Tj+J$)obVebK`mwx>Wq(!|#nb-`>91#a+s~J7-s6_N^() z&%FCc#gz;LhN>hjF; zW{=+tH|omUpS-fTSsB02aNFkpOV;lGVitCO+s;~sHHV7KlQWVcEhDEUe?2qj@pT6C z+1{FAVbkgj&Y0<6TbAu$^uJGZp54>!t?c)=nb!ucssFL(!`!g_+_zp`JsWnC0Xum0 Zhe_n}l>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>zF1DKvB2Tov{BUv6p^i%1|K$#1f7@_k6Vu z7A-r>U4)HJ&kvttsO2tiM`Y{FI^h_q4$@wfYrt@~fVZiW>c5ll14dsxeqSC+ zgw;dccjmdB?tf5|gAE3Q{IDFTi|71`>VDj7qsc|s*nNk3%*ocE&i;Yr=+dQ8VpES) zYDGx2w`*s;TAo@4AKn$}+{)e^~ ys;>{rpS?DdH`-eR000000000000000EcgY@OI)4~jL3`t0000 diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/unknown_operation/00001.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/unknown_operation/00001.png index b0e8287da8e50b8b410c291da889d5cffa4a8e1a..393a15fb76753fbec14215b680629fedbfa392f5 100644 GIT binary patch delta 383 zcmeyx{EK;lH?yb0gNc4xtg~-hed3&0D_$>bu>O1h^SwFMXWt&w=+!tJ^WxjS-qlUF zYO+4%EXdpBY{z)GdjALI+^B77^+ti^yB!xl_bfZT!ZCDPW&b`2Ax(Mr?NevR*e$i2 z`N{NlmRR8a*Qp$v_)k>jZeCX%7H$2vSLDWSFaJY_=QH1Yb9?n`zbmG1w!A#HHZyph z(eCg6ZR$${?f?BSE4aoO@$%bCmMY$uQs#(tg&bYqcv3t=GG?^wfsK)n&nHY9i!jg&Y8-?fE6sb Yr7x8=$-zY^w+tlj>FVdQ&MBb@0I#63R{#J2 delta 383 zcmeyx{EK;lH?xYsqltc6tTS(0ed3!~D_$>au>O1h^Q}46XWt&w=+!tJ^WxjS-qlUF zYO+4%EYREJe2?*P_5Kgaxl!BF>Wu=+cRMcr?OAqug=grt%Km*4LYngK)2Ggkv0G|4 z^V5vntz9ebe>GygDV?%+Tj+J$)obVebK`mwx>Wq(!|#nb-`>91#a+s~J7-s6_N^() z&%FCc#gz;LhN>hjF; zW{=+tH|omUpS-fTSsB02aNFkpOV;lGVitCO+s;~sHHV7KlQWVcEhDEUe?2qj@pT6C z+1{FAVbkgj&Y0<6TbAu$^uJGZp54>!t?c)=nb!ucssFL(!`!g_+_zp`JsWnC0Xum0 Zhe_n}l>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>zF1DKvB2Tov{BUv6p^i%1|K$#1f7@_k6Vu z7A-r>U4)HJ&kvttsO2tiM`Y{FI^h_q4$@wfYrt@~fVZiW>c5ll14dsxeqSC+ zgw;dccjmdB?tf5|gAE3Q{IDFTi|71`>VDj7qsc|s*nNk3%*ocE&i;Yr=+dQ8VpES) zYDGx2w`*s;TAo@4AKn$}+{)e^~ ys;>{rpS?DdH`-eR000000000000000EcgY@OI)4~jL3`t0000 diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/wrong_last_packet/00002.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/wrong_last_packet/00002.png index 8ace1d8be1f2d497ee5ce715fc0e48bea5dcc7e2..fc2f4b72997ee897e1202b3f2436c2e5babbc59c 100644 GIT binary patch delta 704 zcmV;x0zduV1=t0UB!8btL_t(|ob8%hmck$mhSB3r*#DBcmwD(J26GR^f^+`wsa8lr z5-vd>Whai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/wrong_last_packet/00004.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/wrong_last_packet/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/wrong_last_packet/00006.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/wrong_last_packet/00006.png index 6266aa247ff9ac94b5f4767209d6fb4cf0be20b0..b0b2a69409d2a7c8a8fec206b3f1462e43c6fbc6 100644 GIT binary patch delta 884 zcmV-)1B?8b2a5-gB!5y#L_t(|ob8)!a>O7AhSSd8B=^`HV8EAbwrqx3K&Wn>LEvTuwp>Y{)<(#mK z<*%VRQ|JFoCb_9e8Jlk3%w3^wBSnZ75AiO{}rm z1HJnjLihqmp_)DE2TGRbohCJnwpwEam_R7q;ilyS}#Sb)xn4s59E%(jkd zEbw5pqB#=20G&f!B-)lI=61!j-oXjjqM6Zans}(ngnwqOvqw4>{{&W?u7FR3FalewcF&CIy8Yz&^#WvoBHUAgx92cPtQ$|Bp;0@lS3a5 zLRGRe1tev9{H?Q<-;?(fal)GaptucX?GHGfxk6;`C1<^+qVgzp7upx~JVEU}u z%ki7|?SIt7md{$*>8!!tzG@r}0c@`QHY`}RvaO!e1i@;yRiyid{)HMsye7!Gv*aF` zN9^zgEY)&8AV9z}RC&fl-n9TTrf(kevNuvP^*S*RnA)!1-@&{bX*>%nk| z4n%%^HI?`^^bq;KSSZLCb(3i|0))^dvB_T~ceKqsqB_d5EtnV|Cr{OZjw#QuIybJ4T{t0{{-NYmjF z0yU}X|9m>P^CG9=v+0?{T!5R&1xS)4Ns=T=Kcgcfm7)2XGfK7M)?_sKK z(84A_@q8W2IM1{GE~Tt9u}Jx2(2g5XGDXkh7ALAz^?b=nQzn!(H>(r1=(1SrvkJ{p z_P&<-f`_(1sfeXE*Bi9?Ov$%jJQq4Dv~AU{>VRK*QQwzR*niNfg4Gk|46CWC9YGH2 z{{gtC_x(5bK)d^XAJ`bYSiz@lXfBU5mUZ&45F{7KL}Y898texrSz`}4=8Zv(t#p~Q zopaoZWijX8xLTjT7GMAX0D!&Wsfal2Fk|HyXnm`Q>8vp2=_5oWE$Dk2mzCYZ4wiEc zLYGGMWJd3q>VJDn(5ho8OyFp+ybT&vZ`Z04rtn1{)C0TvI5A;YiR)w&%JS1v>rD29 z^|+wQi#;=q&7d)Ys$8yjn$&b;t?XufSs!WACDJa{CFwbHCfHqk00uicA#NogWn-SY zNvaF07i%N=H2{O{+~=w-SIpzSS=RXqII?NcTniWVOMg?R8rB9a(ze9=(A$Ki0jpFM zZyvwcQOa8BiOy=eDzUtsK2%$21KzQGfe}&VPyD#09v^1e5YJT5~phxmx84Rl|a;9E>w+Q7~vUWt|YDR#PjpAM#(z zPewZg1t*c58cU%j#=}>$+Ae!Qf<%0e@G+D@lAaJmU*>+L3SCgxgOeOlo?+?|YTGJk!_Y(57+AsI&l$mZP*0LWq8a%(B8 zX-TPD=byb-HBbd;g>)rGh7`NYgC(PC=)Z zjbe|@ZBTBNw_W$tixO>x{Pb!y`D5rQl7G4HStzrPF}*<`Hx;Z~@zLXd#{lFyx9gI5 zPJ8+Y&RM48vqWm6wtD^N|4Gjx?Q|(cF8S-_+Rf@shz`IYTXpwV&h&+#>xcT`TU?3r z{hk^_txZzKmbe=-bVQV>o~Ua7)>V9PI`6X@-k6b2!~i@D1^@s60000000000007qW Y15(#KvB%3ivj6}907*qoM6N<$g02O=5&!@I diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/wrong_last_packet/00007.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/wrong_last_packet/00007.png index 74ca77cf243051705dda36593c869f391e2b2ef7..39ed6ff597a035972d1cd276b6717deb5308e2c2 100644 GIT binary patch delta 341 zcmey!^nq!DO1-(Ki(^Q|oVPaug$@e{G(6mLdG?O~6YnhLPwUwvcrily=lL<<+`S@8`JqxCYBtw}}_{8fFyF_t9sF zJmDtLpXkis1aebv9w&7Rd-OgeLJU=#@B=Qu3v} z?DRR?+b=t{l(*}aJzjdBKd{z6U|M+G|L^CnZ|XhKv3Y`Ywtf8S|3BXp-Yfaszt~&1 z*jU=pnz?G)P6odtQ-b;(f4+X(_mHWWk%KMu`40X~lmDJ&UGSbKPy3l&wcp}3uC1FD jGCtmmp8XFI0tVN__x$>|JvU_aGmxOCtDnm{r-UW|KVqK( delta 342 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 delta 701 zcmV;u0z&=Q1=R(RB!8SqL_t(|ob8%Pa>O7EMM+m~!u^lryJX=if;Az;V7u$TC1wx; zF?^iT12~T3I1c|OBme98@TARsE6sh4Pc_62{_;#Y=PmX$5X}{%A?JLipO)8o{3#na z?Ig`zB4EGwi9<;=5M#tdQc1}pI+~Q_DXS@SrSKmCH_mY!qYf!<8|Jh@G=o&m%LY$A#%H)e}5v0^trg-s>2`0C3h_;rJjmH3_I8b-tb@8h_rd&!`a~My|FWHr+uM8SNOF ze4Z_%YglDiqNNy;pJqdEi(3c#uGfWk(O!bU`v25M zqqvF1wcGy4L+PgXPD3&?GJ6!Xm`-OD_uFjPS*LV~fF2sBAZHJYR%HlzN%_%g#g2Vk znOpf>8h-;&UpI^ZFTzV##KlVaD=+m2${M}qvGTj(Hzjq>94o!nn1&pER6 z2M6F5{X~2D65)GkZ*=k+R?xl)Pn6ZBEXPg}X3@$votbj9J!L!!8h5VkM3O)7u+zK# z@S2U2YqRz4CU=&dRq)-Xpb-WaF2COUY8p4;JvJNBbe7*m0RR91000000000000000 j000000000003OL7b1~v98GHw?00000NkvXXu0mjfa}Y|( diff --git a/tests/integration/nano/snapshots/nanosp/test_provide_pk/secp256k1/00001.png b/tests/integration/nano/snapshots/nanosp/test_provide_pk/secp256k1/00001.png index 5dfdfd9a058b29ef49e825243a396c4a0dda2fec..821420b1b53a460f5fd8908b4c9e34f13e477c0c 100644 GIT binary patch delta 689 zcmV;i0#5zh1=|IXB!8kwL_t(|ob8!gl7t`(MVYSNiThs?dzlZb7`%B9K+*2G=gWdf z!Xq)nlpa9NIp-Yja^ydbmuy-*x1#QA*3?3s;9Cl9+qT4>2CBKLH*DLsx9^tMGVzuL z>~?~>g9of%eOOTN1~5i#gh7goy3p{hY`L0pRtkR}aO2sB#eWK({jm}1Ia)hQ-(-%0Cp zYMtmueT1Kr;1EIxAwuAI#zlKwZV zX0jxp3d=65Ab-(oDqQG-!**FXId{ps$f?q|=dJNWR9EGK12)Gz7u6%*$*9te-5UIO zRSE;adH}=|UvJRb=9L?SC+kIU+b>GX1D2yL<1BN*J~=%rAU4BpWL9Z(X@VOj*Grlq zC#bH5r9$6;xVg8K@YFJO9eLLT7MS~(Qe^|Wa*`*|Yk%#%g?I3q!~X#J3^^7Aafy>r z49t1bz0?y5?ovWCya*%6mIyO*e;jK9-2yG3Lis8GpSkg`)YJKbb%A>#Aw<$umQf|0 zL`X{ZmVIQkM<#E%!Z$z)tCBF9YM83mSFLl!2B^KhylQ~@u0LS2*Eud-T}{2#i=msa zeA&Nb4}a&s*CozYRp*o<&x~Qw4aizuOl?fZ?QsflzKZyTHXvz3Vmr2-cZr28W3 zR*6-e%*@4IdTTveJ>lN?qv}$3Yk!W!jp3MfN({-`w1&*{ks;`t;0BYe0v8z}gnSRb X^ok&9-vo7#00000NkvXXu0mjf(vMYa delta 692 zcmV;l0!#hd1>6OYB!8nxL_t(|ob8!glEfegMV+qRN%p@a_c9-;atvG$H8JU)d%n61 z5qv;^PU!*UoO90cM~?i*@zO(!*H+Yh&7NAo1-`Y=wrxx7X#mZI-mq=kKE7LC%fv?( zu-hrr9Xw$D?u!i--XM&DgJO~*12{OCv!KHto??iFf1EI&(JbhOV5=B$EC& zyJos20EP7D}@ra=+*=eOz)RA zLoX2ShNS`@K-}D0T6nNcT}R$Efkmu+Oer{kuAJlv^nY4=Z{uC~&Efw5{afT%B8Y38 zjACHTlkNp?sBo7On#GG^20apCX6=t-O`uz#MW_IO%Kv9>{8#Gfe8IkmI*||p>FUft zNhcT5lD(ZD-SE-*Tds&0P$Z$4m3Y;uYP}e$ zgyH*soqs)?0$-Oq!^X}jO`aL6Iu0PC))*X2$K!E&aK4IoO&bvo5^TVA+3C>d0h8z~ zI}+bY6R~TlGdC1g1HlW?t90oB2!gHVnaM?59(I@DD+7o9sgb6)t9`cGnJD&n7;Vle+*Q$x_#zylzYuL2bt5JCv~ a9)1CX2Ow$5Y1;?@00008J9(j6Y=q zr%uw`Wd`i`K5;0S4MdEXNQ|^HqN7P&p0b)2D~-<#_`}#I&VO>oe$GPQM{PuxLgvAX zWbBmEn7*kV9cAS7{d->D`eg~)JO-_;eksr4tye-;*5Lk*!oHVl$mLUeu*JFPF| z)2gGT*uhHzA@mvjp*5Oow;^^pq`?mP!3^M#FcBB=9OB#TP15fu{Ca%fjbDCblzVEw@Ae}MfVcvRdlC0ww14^N`ztRmiU}!+4zr=bBjC{? zb@NENuC1j;9>o14`JTEH?F4SZOW8Rw)8~2sz#@j%U2<2nEf^JtH$$f$vG7nNH(0M2 z+Qb5ePFtZ+QoK(ay)~M#D;mZVdhUoETCn}gg?R>mWaV$dy{-G_?u0eZ@q?J{-8B7q z(QaKs{eNp>9bJRPe=4NWtZ90x^qOCobNQqEuwS-FqQ{^yjJ10FcoppXoqISG4u4X6^!O z5Ssz#56>#3RkX+0FGgH{xx%Q~BF)R(!21;f05Jdn0000000000000000000000000 e0002M7w`*as)4fo>!iW}0000VBE?IOHrZpikx#Rk8qT=^_+fw&ud%1EkTFJptjX61=>XP#Hmr{3F}XidiUcgv`CU$Cf z$Y-Zvo?-_tiGt8)^oQ1{zg?155qlkyVTZgm12`l`#6^4z@nLq7nMV|UJ)XDY?430L zlTt!DmbCZ;8R@=ibx{Xk_rnEI$vyQE-e3T-#GK1t4TwS}wX2A8svkGYyHMfSkDz3j=Ues)o{ssgx6F?q?lc53^ldu8=81NnZ0o`7K UvZj;flK=n!07*qoM6N<$f_&pmSpWb4 diff --git a/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_public_key/00001.png b/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_public_key/00001.png index 836223b4f1f4c52eea56647dbed759d7380e6767..13cef4a9515aca7f7f7ce141ced45ae785157131 100644 GIT binary patch delta 703 zcmV;w0zm!M1=j_TB!8YsL_t(|ob8!Qa>O7EM9EZc;`<-Tcgez43f2!HFt(@qtr7-< z5C~9H$^+QU@sUM~$41?KjZZDq0shKL+qNySr-5p&8V%dF9p#7Rb)9(0 z0uDP_cc%zg?|tS_77ff8wU9MJbyP>QZ)M5V&{`q>BjCoh&wrd1T>H5e>M>d~dMPXp zKJ15;rV!H))vcnmoWB0dt9w6fL5t^r`l`1AD-a{=)T#4?{ikT7`-xP#&YEH`PxYL% zj#FzzKk5*E&IJbm0002$EvSi;zgP!7E2n?!n`qrQ!OG*e9rn3zThIp83~NO6ZRYah zWCO=fj(FK@(|=ENrLLfMYN@1ModzpM8gc6QU2`$6xGuJm7iqCvdQ39wBAuE^(iuSQ z7AsZ~C=;MYjT1-pPh?*mlKwcIy=6RYk+Yumopg&FcmibtB$uXea-N#9go9k*OkZ&} z&sk&a3bN1yOd%cmHY*cN>S{`P5o6?xJJ#K$zJH#j8{R9?m=U0ct#ueSeZh7Z z=NejKo}~$P40DXJN*vYCvZ1%fb(4M9>%zNeZ$aRFOn>150DLJKF|GuTb@kToyfOyG zI9V8x+tkmkY=7jTblrQWBbiw>Bl1~LO>3%V34yj=7FhVF1i?mK!m9OPFpG;&w zGq>@%w0|d{PB)wwC*dU?bcs*mP_yYY{`gznso1L*@x zdiNjMvU787_TE8y@!tO7>u*7626wHv*!ybQnKvp002ovPDHLkV1m;IObh@3 delta 701 zcmV;u0z&=Q1=R(RB!8SqL_t(|ob8%Pa>O7EMM+m~!u^lryJX=if;Az;V7u$TC1wx; zF?^iT12~T3I1c|OBme98@TARsE6sh4Pc_62{_;#Y=PmX$5X}{%A?JLipO)8o{3#na z?Ig`zB4EGwi9<;=5M#tdQc1}pI+~Q_DXS@SrSKmCH_mY!qYf!<8|Jh@G=o&m%LY$A#%H)e}5v0^trg-s>2`0C3h_;rJjmH3_I8b-tb@8h_rd&!`a~My|FWHr+uM8SNOF ze4Z_%YglDiqNNy;pJqdEi(3c#uGfWk(O!bU`v25M zqqvF1wcGy4L+PgXPD3&?GJ6!Xm`-OD_uFjPS*LV~fF2sBAZHJYR%HlzN%_%g#g2Vk znOpf>8h-;&UpI^ZFTzV##KlVaD=+m2${M}qvGTj(Hzjq>94o!nn1&pER6 z2M6F5{X~2D65)GkZ*=k+R?xl)Pn6ZBEXPg}X3@$votbj9J!L!!8h5VkM3O)7u+zK# z@S2U2YqRz4CU=&dRq)-Xpb-WaF2COUY8p4;JvJNBbe7*m0RR91000000000000000 j000000000003OL7b1~v98GHw?00000NkvXXu0mjfa}Y|( diff --git a/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_public_key/00003.png b/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_public_key/00003.png index 6041767630409d90e0fcb2090b7226c6b63e58cd..137ca9e4946dcd461fab8ca146124917077d946d 100644 GIT binary patch delta 339 zcmaFM^p0tQO1-J4i(^Q|oVPb4`3@QIxCS=g@ch1C<$Wu^cjn0po=zWEzx&A~xa5j{ zaI`T41gzMxd-wg{rfa{y;fuMpc2m;J<{*aCn~t=vy7M$UQ^7@(;dQD)Y^`zi*>?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E*X;Fw3MNcM%Mj4 zThbUHAfTYUeE;{nsP{KzcdUs_J$i|KDZ{kXPI1?r*H3S46j;izW@=-}*RyX-cQcn? z;qJ@$>YK;bvgppPtL7IO=D8R(+*4cQq2KU#-EC`ePQiNa1$LiTq%RP0cz;B5ZetL` z!pdh8?Kl_@=yc|}zS(|ZqN(jI`+~3YOQ%KTzxedeqZvF`-Iu=poL~91+0ALQ=IJ&_7+p5*$h%@I z`7*-x#%Jq4!g0%U<-EgR*S&0(H0fKo`I+O!zS}q0toL!g-+!}2=#=)unV;D9&Mx$L iD0x^O>URkBp*nuryo0Bv{i`Yl33$5txvXWhai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00004.png b/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00005.png b/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00005.png index c4768d4fa3e1b0a3daa4967d264c1c4d3d228e4c..ca01281085c22f97d87672ca375c634fc9674dbf 100644 GIT binary patch delta 322 zcmV-I0log<0^I_TB!47HL_t(|obB0JZo?oD08lsTO}PJ&xJy5*Qp~tsq6$d*-d6&) zm@sU1mSqk(=bZECCCiQv7}$DQsXc9?zP)@-DRut6F@Fa?2^c%}Z}mm&@fX@Z znjAcStLW_iY{Jbz-z-7>b5NSAXTWI;ajs0VZ=H(EOuGpWnFsZveCw8aCn&D0rRDaX zKX#r24gjz$AEN^}a^;XyKP}gn#X={Ldk)^vU8%ZQKHTT%0G?4ERxS?enGfJQucPVd z{Sz?r@SobB>^lL|F8#&(&j6mc`?BnKjK{C>k23%O0000000000000000DxEZ1-Xy! UJc{I~Bme*a07*qoM6N<$f<^P34*&oF delta 325 zcmV-L0lNO(0^kCWB!4GKL_t(|obB0Lj=~@m0MKe?C+vSo>}5V0kwTwi0!%&UON)eC zF0a;U8bgdR#@IWG4xaU;_8pO0Y}Ry_e6O}xCLqQbLTD1tfjQjNQ}HGL!RnQ1*}rx5 zyr^XwLI`zpiv)D({UWBKL+5zvz~-N&(!(b5>gjU`q4E9JIe&O3pzqkf)E9M+|D*k* z$iZ`~pt0}Sgo}Z`Sc2N;AT^iIfWsK-xiZMUb*Nru%1yY-JjfU2OI7lnAUU&^rs^$k zcANta05DCD-T~}6bI6&$7KfSo3EA=EvYj_{TSZ%E%8?)OetHM+7iq|!8P|iKzE@sH z)6&foF!=Bv+CJxdz{pE~a`PF$M^;~!?f-#OSO1gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$wpiY` 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 delta 701 zcmV;u0z&=Q1=R(RB!8SqL_t(|ob8%Pa>O7EMM+m~!u^lryJX=if;Az;V7u$TC1wx; zF?^iT12~T3I1c|OBme98@TARsE6sh4Pc_62{_;#Y=PmX$5X}{%A?JLipO)8o{3#na z?Ig`zB4EGwi9<;=5M#tdQc1}pI+~Q_DXS@SrSKmCH_mY!qYf!<8|Jh@G=o&m%LY$A#%H)e}5v0^trg-s>2`0C3h_;rJjmH3_I8b-tb@8h_rd&!`a~My|FWHr+uM8SNOF ze4Z_%YglDiqNNy;pJqdEi(3c#uGfWk(O!bU`v25M zqqvF1wcGy4L+PgXPD3&?GJ6!Xm`-OD_uFjPS*LV~fF2sBAZHJYR%HlzN%_%g#g2Vk znOpf>8h-;&UpI^ZFTzV##KlVaD=+m2${M}qvGTj(Hzjq>94o!nn1&pER6 z2M6F5{X~2D65)GkZ*=k+R?xl)Pn6ZBEXPg}X3@$votbj9J!L!!8h5VkM3O)7u+zK# z@S2U2YqRz4CU=&dRq)-Xpb-WaF2COUY8p4;JvJNBbe7*m0RR91000000000000000 j000000000003OL7b1~v98GHw?00000NkvXXu0mjfa}Y|( diff --git a/tests/integration/nano/snapshots/nanosp/test_reject_pk/00003.png b/tests/integration/nano/snapshots/nanosp/test_reject_pk/00003.png index 6041767630409d90e0fcb2090b7226c6b63e58cd..137ca9e4946dcd461fab8ca146124917077d946d 100644 GIT binary patch delta 339 zcmaFM^p0tQO1-J4i(^Q|oVPb4`3@QIxCS=g@ch1C<$Wu^cjn0po=zWEzx&A~xa5j{ zaI`T41gzMxd-wg{rfa{y;fuMpc2m;J<{*aCn~t=vy7M$UQ^7@(;dQD)Y^`zi*>?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E*X;Fw3MNcM%Mj4 zThbUHAfTYUeE;{nsP{KzcdUs_J$i|KDZ{kXPI1?r*H3S46j;izW@=-}*RyX-cQcn? z;qJ@$>YK;bvgppPtL7IO=D8R(+*4cQq2KU#-EC`ePQiNa1$LiTq%RP0cz;B5ZetL` z!pdh8?Kl_@=yc|}zS(|ZqN(jI`+~3YOQ%KTzxedeqZvF`-Iu=poL~91+0ALQ=IJ&_7+p5*$h%@I z`7*-x#%Jq4!g0%U<-EgR*S&0(H0fKo`I+O!zS}q0toL!g-+!}2=#=)unV;D9&Mx$L iD0x^O>URkBp*nuryo0Bv{i`Yl33$5txvXWhai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00004.png b/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00005.png b/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00005.png index c4768d4fa3e1b0a3daa4967d264c1c4d3d228e4c..ca01281085c22f97d87672ca375c634fc9674dbf 100644 GIT binary patch delta 322 zcmV-I0log<0^I_TB!47HL_t(|obB0JZo?oD08lsTO}PJ&xJy5*Qp~tsq6$d*-d6&) zm@sU1mSqk(=bZECCCiQv7}$DQsXc9?zP)@-DRut6F@Fa?2^c%}Z}mm&@fX@Z znjAcStLW_iY{Jbz-z-7>b5NSAXTWI;ajs0VZ=H(EOuGpWnFsZveCw8aCn&D0rRDaX zKX#r24gjz$AEN^}a^;XyKP}gn#X={Ldk)^vU8%ZQKHTT%0G?4ERxS?enGfJQucPVd z{Sz?r@SobB>^lL|F8#&(&j6mc`?BnKjK{C>k23%O0000000000000000DxEZ1-Xy! UJc{I~Bme*a07*qoM6N<$f<^P34*&oF delta 325 zcmV-L0lNO(0^kCWB!4GKL_t(|obB0Lj=~@m0MKe?C+vSo>}5V0kwTwi0!%&UON)eC zF0a;U8bgdR#@IWG4xaU;_8pO0Y}Ry_e6O}xCLqQbLTD1tfjQjNQ}HGL!RnQ1*}rx5 zyr^XwLI`zpiv)D({UWBKL+5zvz~-N&(!(b5>gjU`q4E9JIe&O3pzqkf)E9M+|D*k* z$iZ`~pt0}Sgo}Z`Sc2N;AT^iIfWsK-xiZMUb*Nru%1yY-JjfU2OI7lnAUU&^rs^$k zcANta05DCD-T~}6bI6&$7KfSo3EA=EvYj_{TSZ%E%8?)OetHM+7iq|!8P|iKzE@sH z)6&foF!=Bv+CJxdz{pE~a`PF$M^;~!?f-#OSO1gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$wpiY` 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 h2qA delta 702 zcmV;v0zv)L1=aP`d_c9MT<5+&KsEOLn{hm^T zNDvk2V_S*W>y@652u(D z|0?}=sI5Xc`E3g_!)FY7TGw#CuM?^oegudWnG+)+6e6p+w|GI?omb3_M)XPO~MN{6ua5`IS=l!uL$? zE$*WGMjnC&dw+(B7VMegjU9L2b0Jf-YVvV7V_&yKO$jr=n~AUQqJ|{7=Z4~?)G%IL zQrxP{$++(#qeu5*#oL#H-q+n_IT~mbEtk}eIyK}D5(4NhzCl;S(YkYl))oSJ;d0ifO|5PPB1%G}nMROhVZ3URF6qPKn4w45w zNkLq)t@|C57qMAPhOnX7eI{)|bT=S{?I(H${7)`SVOIxV;uc|j3kmr&LdCc$^g$19 zwxVxD3}3Ijnp#g4!TchvO&D-fais#Yl(xa7qN={8+d)mOwxEW^8Z7sQKv_`L%x{6z z_}UQY&wr^+rwmTjL$#pvtep<_lLl(*0p?xWtEuU$CHNduK<{s<(X>3`le&8V4jIu1 zykqtiUlO#ZcB_s zs~qX15S-Os^u^e=&PKnNj(5JCtcgb+dqA%qY@ k2qAi&85qgb~*>&<|sPHxOms9=+^VwF6jIWy}ta&9a~8kugnX35;yCFzcN1i zelOEPlR(|Ctr?oZYaGij|A{ywb=CK;HA}Djgo;-g-s@S`J6%3e|NhslTkPB0OCq;- zHgEr(HT%)&nNI!LZ3})q$?Ed7NI1-N!2Vh!tL=*2w<_PR|2VtU)$&c=J=Zve)`0g) zJg4XUyne6NY47VTvkNb4>i4Tpwz`${$5!u9{H&GC`~2@^yp%uvQN}>#LVK~piiP`U yJm#FR(>!zEB9r*=ZTBPA$(7}+Gclk7gI@X0Lzg$+Uhr@sNW#c7w zv9x-P!t*!6}ziw>k zZvI}q(f{MyxnA2}FI(^}W#bVgnGMN|59FoaG`%yu^TDQX`_H@A7Rm6%-*dgE;CgYN z$Bb(;|Gj>pv~XVOujz%_t2F=n#kt?^v40-=W7$!*2mL>#b^ji=jAvd}{OhNbK-R1E z({?heym#HjuX&e!+TZkPlMmNk)cnB3fCf(gVBLE2^2U-#?Rb!kr>mdKI;Vst0Mf>i A-T(jq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_delegation/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_delegation/00004.png index bf7bf3f8c12fb0a69090a7ebaed89f9921c82261..3f82f8bfd01d0f44e6fb059855154a7f6d597621 100644 GIT binary patch delta 315 zcmbQmJe_%h3S-Q*Y`Xgt;_WUa~x2E^~P2x$Lx^&%ivx!Y=^;@=2e{)bs_x27OCu_-@W_2IZPaNVZ zW0FeSzae3>dhNZ#<&X2zF0Z?=d(|C1Blh)Mxu5U$WIvvCYEj&7E!$hZpCdM1sP_uE zZ5i=cc#C3+}Q4sql35b6Mw<&;$UL CzKV$e delta 318 zcmbQvJd1gP3S;6#RV8b~EM{JTwR4^1KilZPl}KJ5_sV_Jv4q=S=kJ|-COVDb%t!4PX%2+Z91_@tv)8-|K>3v-Ri>1mNKJF*MA(GugI-^ zgEM2s-$PAj<-Sz%-|yW&(|5Pi`&C7|Psr@K<~QfPnrYwBDXx3V!m75+ezq}X;r}TM z)QUGq9#qfBKb130eqP?jLVgb2X9}(pq#M?19lZK3XTpZK&?Q!HwIYx23rsZlT4nPf z#w*Cc>!SYUV%dgn-*Wzh`CFd{GQ3#(O!RX7otg7J?wt%Vo7cZwA>_7>h4Q zVhC{cm3D9(2mP6Iu2%NzJeMC?#Jn?)ob&0{Wj!9pv8*q(cUkzBmG;IOwNkZ2R*(bB zIXl(pl&W@jA*WTWmya266Yo1S!>Ld#KQHnhNhC2@zHB10$bU$52HeE^$#z7wf?Bz| zyGgKl@V0Jjq-ukcnqCEjDLlEm@>1E_)sz;hC$C7ezWwUUNU3o6@|?4?nuRK9HEDB^%2EjHFl?}E zI?=|nA3U+bj z8u0BxYZnv0jJxCX1ONa400000000000000000000000000QlGZ0*6DjV=1V%X8-^I M07*qoM6N<$f^`>X1^@s6 delta 724 zcmV;_0xSLU1?&ZoB!9C>L_t(|ob8%fmV_V-MXf%y6ZXF(_tGDp_N0>V2*{va?|vyF zLrfSRzP1(Y`z~)&O2y1L&vW^)Ny<9oNGTm=omS(%@6+mXYqyDSn`y1D$yT~8u^DW~ zQc57345?yu9XVR1YWawOn^+%22FP%>{J2PeY-SL%>C*yHd4I+xBj6_1-|~hiW^gk% zS2qY12k+d2g%sNWh9>LsMf*nCT(_?PpeG1#MP{ezap7Nv_sy?>T;9k znWs1jgG8A=e-ggQ0Mi+@vRu2+Y{1zEkeN6`(Br7uR}(_+M8yyURwG+1@a-$^l13GE zq(qi0#g&hJ-GA*A$bbP22$cZV567dNHV_2A?ru%vHOA9zMe;)BuUb~+S`K#IZ}#@)Du`9;&8E+Wg3b^xQFw2Zrvv~6=O ztmSCQh@BhQ$IAYkJy(4T`bTi!R)%iqj-__oM;~AWu76)dUbOuIw!0{5xsfr5>`wS8 z!o^wv@jA|ln7y9=C2|vzY>&FleF>Yc#=5O*2ZQGjk8tk(tcsOK$7p9J+v0KREFt8p zs21Z6zyaX~m#|=Ma~4wEe?^MLU2xAMtMb0DI(X~TtT>;hEc_qBLyN?EXuWC)|-3k zHcypbwQ&oIl66{87gxg5Ku6))CSLy)rMvPmT#Und@0l{9>d|6&7q0%6QtY04nA7G* z^2_1zrx{i3pjsq#5#Z`ycw%UqHX23=aMGZP4Nab(1X(-V`|RH7=FNwKRdk*MzFKQ- zV(g!BcMMNL2qAWhai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_increase_paid_storage/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_increase_paid_storage/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_increase_paid_storage/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign_increase_paid_storage/00006.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$Whai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_origination/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_origination/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_origination/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_origination/00005.png index b2d9de9c868d85c1dd57359af76e5c50293b66c1..3d919b22e2cc228d3cf87946ed6d5e6b720cefde 100644 GIT binary patch delta 318 zcmV-E0m1(70_y^hB!4nVL_t(|obB0B4uc>JfZ@7$6YqZ{?y?6G!wLmv)B^dxr>Rw0 zLB+a>w-7?QcpOJPvJx<(PrgcJH#+)iBwyS2el`mnVw zi+Vs0uYanN{PPe_Z=h?)v+O&<@*%EgL0)}Od`?;|X$Dxq>e6}n0Wio71^@tvh{)#M zfFD-5&8i%zd4=^J=U9H2N#z~2GFiN^*HG^|x)?W|^TnleP>(hlpQZ!y8s{43=zwBj z`GV1gzZ5^n%o-);w5NhHVD@E!4#1sMbxeIWY0h(+i|-fUlR*I&7y$0{1+rNYvUa1~ QjsO4v07*qoM6N<$f|zlfr2qf` delta 326 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 delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_register_global_constant/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_register_global_constant/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_register_global_constant/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_register_global_constant/00005.png index 1fcdee14dce21c819b5e211dbbdf546034789b00..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 516 zcmV+f0{i`;1fB$tB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztTc?9lLqhrP``?db{pjpG zrn-!U0To35*yKO|c_nY(;}iDl3pp15@@+0yKj(GZ2jO)Qi!0;h?@JvK{bu>h_dw;m zC>H&`#}l@1wo&cf>|r+HxasUAEeqn77VM}Oo1S&_%OUo&8v|3VEAJn(oc*S;Wc7xV z>D?PkR$Jt~$Y$Ht9=o-3_wDs}M9Xa%!wV&h zZNFN6;N2?O)%sV(gcCHDR}1D{YwOw0a+TZU?3Pm&UgqzdJ2R!)ms}J0cxC>UPkbi= z&zTWhai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_reveal/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_reveal/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_reveal/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_reveal/00005.png index 9e9418c7d7a456eb304fd7b3c50a3fc70986cd04..cc6c26e2f358364ce7047f340f272d2a148e47e2 100644 GIT binary patch delta 911 zcmV;A191GS2c-v)B!6s4L_t(|ob8%hlItK0L_N2%6YqaX*~|TK6+@(^Y4h|{bUvmM zEQ1i@)tR4TA@BD)|9YM$w=@QMAv6%{c@+PAkqOgqhJ@oh&nJf!0t5Tp4i6vcNJ)ds4PaGJGVsoGRVqDw<h872Ay^#ZE}HUH3|_;hu~Si-`iFNn>~w0~9A!^oTPKwtakQ=2n-zK`mx zm7~*V(uUtjAS9#HK1Mb---_S;#3=CTl{=&NPH!FBx2MTtINztkD%PDHLkV1n7s!rTA= delta 917 zcmV;G18V%G2df8=B!6;AL_t(|ob8%fj^i*4MBRhj#P>f^?lK<+)C^gqN{b~o!uK(7 zWLly~t=02$Ead%u%b(|Y#+J%J7D5BEo=5S|7O5~zXG%EE^L%nxAuzBnYqYpyWsus@ zT0FKcDP!3;=znYv-%gLi)sU+8V+O2`ehleMiI+Dm)X>E|Z1<&JEXct_CYf@>j?J4;LH<~RmO0T%kTWKo{K4t&Q&VLR zIQHcLPCn9;65r~oq7Jf)SD~kEv5#ZRt^n=f&z1{3}1N&%1}y8qU}ICu3*TH2ChEPt1MZuHeN&g7f$6sN~$QimJ- zc%Pe?k3B$Et@cdot~B!qmS%4^R+~_;0g{2RX3!13Q+(6Ve!?ofU}Am`DaLIk6Obgy zMt;<9cp9^JVDF>|MTL=LW%XOtA`}%!rNOJ*ei+Lwu~(H)R7EJyOcr)4Q;a|MttZvl z)91+Naeqmm)5SGtF%HtCE>(e}M%6}MKIZC9G9T4x*C81}Gb#ZPM(G@^@bG0pX5DCY z1B#thpgzjSVdgQ^(|L~etK$eo&Z;h7Q+)Go+N8SGKLbdfd~KfPTXpILZ>bqDI6%7P z)w`MKTlX{qGeDi0uBz?A>gi>N*hsB*7VNQcXMcD-iwQ*4H@Jw!?UqX59xzjk`$C?) zkbVo9gCt457f)AFN>OZPWhHA6)B`{FL<>g3YV|gtsyj`wE~+{HzsNGHVP%l%QA)%02j*ci9Eic$^Af91y?pw(PPBN5uZ2nsKFR;pP%_3vo^DB5BMu% rKS`1#Ns=TWhai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_add_messages/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_add_messages/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00002.png index 8ace1d8be1f2d497ee5ce715fc0e48bea5dcc7e2..fc2f4b72997ee897e1202b3f2436c2e5babbc59c 100644 GIT binary patch delta 704 zcmV;x0zduV1=t0UB!8btL_t(|ob8%hmck$mhSB3r*#DBcmwD(J26GR^f^+`wsa8lr z5-vd>Whai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00006.png index 6266aa247ff9ac94b5f4767209d6fb4cf0be20b0..b0b2a69409d2a7c8a8fec206b3f1462e43c6fbc6 100644 GIT binary patch delta 884 zcmV-)1B?8b2a5-gB!5y#L_t(|ob8)!a>O7AhSSd8B=^`HV8EAbwrqx3K&Wn>LEvTuwp>Y{)<(#mK z<*%VRQ|JFoCb_9e8Jlk3%w3^wBSnZ75AiO{}rm z1HJnjLihqmp_)DE2TGRbohCJnwpwEam_R7q;ilyS}#Sb)xn4s59E%(jkd zEbw5pqB#=20G&f!B-)lI=61!j-oXjjqM6Zans}(ngnwqOvqw4>{{&W?u7FR3FalewcF&CIy8Yz&^#WvoBHUAgx92cPtQ$|Bp;0@lS3a5 zLRGRe1tev9{H?Q<-;?(fal)GaptucX?GHGfxk6;`C1<^+qVgzp7upx~JVEU}u z%ki7|?SIt7md{$*>8!!tzG@r}0c@`QHY`}RvaO!e1i@;yRiyid{)HMsye7!Gv*aF` zN9^zgEY)&8AV9z}RC&fl-n9TTrf(kevNuvP^*S*RnA)!1-@&{bX*>%nk| z4n%%^HI?`^^bq;KSSZLCb(3i|0))^dvB_T~ceKqsqB_d5EtnV|Cr{OZjw#QuIybJ4T{t0{{-NYmjF z0yU}X|9m>P^CG9=v+0?{T!5R&1xS)4Ns=T=Kcgcfm7)2XGfK7M)?_sKK z(84A_@q8W2IM1{GE~Tt9u}Jx2(2g5XGDXkh7ALAz^?b=nQzn!(H>(r1=(1SrvkJ{p z_P&<-f`_(1sfeXE*Bi9?Ov$%jJQq4Dv~AU{>VRK*QQwzR*niNfg4Gk|46CWC9YGH2 z{{gtC_x(5bK)d^XAJ`bYSiz@lXfBU5mUZ&45F{7KL}Y898texrSz`}4=8Zv(t#p~Q zopaoZWijX8xLTjT7GMAX0D!&Wsfal2Fk|HyXnm`Q>8vp2=_5oWE$Dk2mzCYZ4wiEc zLYGGMWJd3q>VJDn(5ho8OyFp+ybT&vZ`Z04rtn1{)C0TvI5A;YiR)w&%JS1v>rD29 z^|+wQi#;=q&7d)Ys$8yjn$&b;t?XufSs!WACDJa{CFwbHCfHqk00uicA#NogWn-SY zNvaF07i%N=H2{O{+~=w-SIpzSS=RXqII?NcTniWVOMg?R8rB9a(ze9=(A$Ki0jpFM zZyvwcQOa8BiOy=eDzUtsK2%$21KzQGfe}&VPyD#09v^1e5YJT5~phxmx84Rl|a;9E>w+Q7~vUWt|YDR#PjpAM#(z zPewZg1t*c58cU%j#=}>$+Ae!Qf<%0e@G+D@lAaJmU*>+L3SCgxgOeOlo?+?|YTGJk!_Y(57+AsI&l$mZP*0LWq8a%(B8 zX-TPD=byb-HBbd;g>)rGh7`NYgC(PC=)Z zjbe|@ZBTBNw_W$tixO>x{Pb!y`D5rQl7G4HStzrPF}*<`Hx;Z~@zLXd#{lFyx9gI5 zPJ8+Y&RM48vqWm6wtD^N|4Gjx?Q|(cF8S-_+Rf@shz`IYTXpwV&h&+#>xcT`TU?3r z{hk^_txZzKmbe=-bVQV>o~Ua7)>V9PI`6X@-k6b2!~i@D1^@s60000000000007qW Y15(#KvB%3ivj6}907*qoM6N<$g02O=5&!@I diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00007.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00007.png index 1fcdee14dce21c819b5e211dbbdf546034789b00..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 516 zcmV+f0{i`;1fB$tB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztTc?9lLqhrP``?db{pjpG zrn-!U0To35*yKO|c_nY(;}iDl3pp15@@+0yKj(GZ2jO)Qi!0;h?@JvK{bu>h_dw;m zC>H&`#}l@1wo&cf>|r+HxasUAEeqn77VM}Oo1S&_%OUo&8v|3VEAJn(oc*S;Wc7xV z>D?PkR$Jt~$Y$Ht9=o-3_wDs}M9Xa%!wV&h zZNFN6;N2?O)%sV(gcCHDR}1D{YwOw0a+TZU?3Pm&UgqzdJ2R!)ms}J0cxC>UPkbi= z&zT2F?bMN`FGBKys~*vWDmL*?v5ZV^N?z)Z5u{BV_Ds9$F{lci z!WZ)^oI~mne1Fy>e%>t>vH)uPtfrk%ZE;(yD+bsmB-W^b980)R6$@F5q!~cy?nsLW zj5QSicE;k|d=Je6~E zzKo@e^Cg>SXMgO)aJM)lJyThx6{*k@+=7(KHqYUfB7YQOu_esTg6Om8OA({-nwCN% zi^^M37BZyG@%sKD?ztO_blyAy)4S;0QW?w|?R1OvHud9??XRYI#n$uPX=supNs=TBvHv8As9+v# zE-E6|)PGc-LFcO1<>r7@966;eIQ`n3P~53HW4p?!@ts`rRzy@ib%V@$Scu^h(C~`c zPHoP7FP^f?rNouqOho49vtiUmcBPGo__2Am9U##O3Mpa=@`@Q*weP3xXo-9P2(jAS z4Va{%&ez#O($J|l*^k*XvYLlzd`XfdNs?T_st^AMRHIF0Lo~H@ZB%!m9h1}oDI|Rb z*IX*~Z8YgXG44$)Q92+WAC5~4Le#hN#hMQ?KFjxjuN{*i0~r)@__Wh{7LOqS0000< KMNUMnLSTX{3v1H= delta 728 zcmV;}0w?{>2F?bMN`C@WXmYKOvWDmL*?v5ZV^N?z)Zy$H2$?&Zht>)CIBjnZw1}uE zT_+FT$bXa1NYzjKu^y9yO4kBjNIJkhw3nB`_nH`EmolH;ANlkKYQ*C>+UV1sj4l*B zkabzuEO);vaugN(d-Hz-E}4CVkS(zupYzClcK4YT`x}Y=Gk-dfEP{N|U$&t4yayo* zAF&|KoJ^hpCFma1J+!WC5|#9$ZQr(;4xoFX?15ifUN?GfjN)xKd5S;n+moJ#KvzJr znY;l>l3WOtA}T_eE)?$Eg7{e%3$Y;mA*GzwbMfRtZ1mRew~mkW4He z!WZ)^oI~mne1Fv=e%>t>vH@!QtfpO1ZE;(yI|kS$B-W^b980)R6${ymq!mEuK9Lp? z7;7p3?2N^^`7>ar{9=oxNJCZ0VpQ7ajAct7ofdBV3=J+xk|asKi(wXY(xz5ssY~mv z_%fC<&X;VSo&B*F!`lo?Q)CtHud9??XefTM<$9)D1H0VIhVuK*K9$ zJGD9USUhEyONlGJm58j(XTzwC>`EIE@niFBJ3yin6jH<#v?^k|eo;RS*9Us79O0hG=T*+NegMos-l8DI~ap zYc7@gHd=I`822WYC>@Z`567hiA?jQCV$BDcpXJYhubq=20~r*21Gj3%JQ<7t0000< KMNUMnLSTYvwO)7t diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00009.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_execute_outbox_message/00009.png index 2afcc241392199be0c8e3a3d924576979a70c1e2..445ef21fe185e57ff3b78779e82da747efef8e42 100644 GIT binary patch delta 854 zcmV-c1F8J(2JHrrB!4tXL_t(|ob8%ha>FnPMcqz!;{7ivd+CQestO2Q9#TCH=PMxy z;TJ+T{y5g~dcFFu=XoxgXbL2mRvCFq{lAmzbFEQni>$r^AZU4vFb z+jC83C3*Dzz0dRj#C1}SAdc+|JvU}?+agbiw|#rs(-i0vP;90yKv5L`2$doZX@fqs zn1&#u6rV%tQhyY&jPxF$r>?$DV~S$TC>jmzuprLJD3cF3YTDY0p30DE%*z5sd-5WT z_uaXkre^<3oPz|yE!INe^8s@nRS%OV$qkH&M4KFm=>s3W&I0BWG>Vy+hQDoDQ@w#6G|LJ2Sjp4@&Wb4{-?A? z$hRjn#Zi2eILIij@nz|NdWK-Mi(80si$HF=+z#Eb6C8?h5q*kVkT_Q5>)5CRf*Fc2 z5jAi~P@h8L_@-a9QuiA)^o< z4)TVY?=3bYLp)kh6h%=K_h9&!WR^tbklwh(B)#!b>9580On2j+Mkq_7LgJV<(k6>C zmuZ)aOK+yEF65nXR@3_I<~L<4ZrBO?Bq}`4VXSx#DGFnPMb%Ds;{7ivd+CQestX8R9#TCH=PMxy z;TJ+T{%C7>ym_?9)s}1AmnWwXIDJ8LgKF=eMDb|@4^^MH_Ir^bk1i8`wl%RWFgOmp!u^?_iCTl=Tx(2<5 z_UD?+O7gh+Uwx(rAP&?c@UiW0q36adZd>Fj@wRVIdzu1$0*cMl1t^N*AE8o2lQ!s6 zi)jclO7Uq@mw%#&Wu*52J$3bM8dDTwM$u?!hXrv)MwxuTQPb8|^i+mSW1bc;+LISy zyzkESG&TEQ;v6IpZm|{$pAVSxsCt+@Np4_FB--RiOdt60brvw6pi#`kH2kegP_M#D zIbP>!LMTBG0I3`6JWbFGK>jlVEs%W^ zb5M`!;6AwY=BQ)ur3Hz9s5yMd+7_ur?{xvPa7%BT$(wP$Hq`XWn>Z@cET%6cqvPU7 hhh$Y0MNt$#d;;5vasrYhc_XwGQ5o&X z!Cm{PmrsKD<&v~lQ?Q?s}>ZcCbR*>sa8{Qb-l&bqoRbujI(&x69+w+@#F%Fro zsKoX(Jvbp7Mt@r=;=WMJbJnujj2>&7nerUzC6wM`-Ug(oq%L_<>hkG{Z6iy-SR@B1 z#H$;_3UC0Hx)6>k5SdDE^4+x)5XDiWUo53J)pK+LuGfRzBV)urF7fH%Li|G_`-6Ch z_>6m=BuSDa$r+$0<65EVaGcQQEfqS%pLG%sLbc1Z!+%sY^IJ=|wUe4BB^ATTxSeV2 z=cLTiM$BEM0wvbnN^FG=@n?m^j8IonW5{Hi`RW^94csiL{Eb@B2({7@SPfjnA3hy@ zT7}MsEe$Q~vDIYJ*M{2?J}t$PP$K@Em4+rsk|as8gkcs`kyDYEKWi1+f@61qzpvH!8t;T-i)(%)3wC%>ZVaqB8;$aAf$ z7(&Qv=PlK)SX=H8WYWWZCiGVTiIPGr+F9*7u(GB`Y1QZc1mGvXKADh_v6Z8d;LgvH qt*dSMY(+g6Z|1X}BuSEdC_ia+q+Lg@P;vkO00{s|MNUMnLSTa3S4b}a delta 656 zcmV;B0&o5D2J!}w?tgZaHSoUWHPCZm6vqa6%6!_lCp`^;u7G4SIRQzMyb)T8sEl^x z;I4ht%O^qn@%1V!=Mgl^dRm2o4-i5ML3ZudUOtIWv*{@&J!~avGTo9N;Yb{r{x2ur5?fFf=7>7(( zRAPIY9-NR3qkpXwabKwAIcr&MMvt}4OnHv<5=w6|Zv#?PQkOg_b@}wfwvi=ZERq8h z;?<2|1vmgpT?j`Nh)kt7`R>{Yh~lWxFP74q>Nz?A*XzOVkul;Qm-zH>A^ste{XslL ze8xRbk|arz&pL?*q1t8IVSlQc`K_hf+DXlml8WJE+|D%i zb5dq$Bj&DBffDO(CALC`__IP{MyM;PF=VpMeDw{l25y#A{zffmgj#6{tOhRP51)=c ztwQI+mWCGg*lM!qYr|~`pO#`tC=q|oN<)(*Ns=U4!Y~V}$f-!_B`|7*&X>}dY=tL6 zQMPQfdw)nGS1)*DM9-ux!KhGG#C!Q{3EicQ*#Fq+aE^K?>2Ip;lV4HwxOJ5^-^r>IM`=aS&RHXeenq zsWHTDM6*#zz@#&kO&l}m%M3}=FKK({u+ev%${xm~gSg;2>wIwzyo9s%!aH@=?caZu zb4WhI6PeLcMRYE8{YG?rml=!x9&-OG0x&n&L)D0+#;vlpX(NNNK zQe%kQh-RabfJtX6n>c3Bml=|#U()u@VWaOjl|76}2XVo5*7@QbcnN3ig?H+#+rR%R z=a77aCo-d@is)SG`i5~S%z+r#Vi z8h>8bwaL&K`fyGRgv?z`!>EM(H08sFHj!mTRPw=v)))D<)b)%%`!%`fh%I18;sDn$ zc5jpCnl$EaWj?*1`t1XBi`R9H)=f`l9Tg2^Up6+&;C-!ahh#w;Ei6b8`3;&p`nc?#M zkJ!Iin+2C?-}mfnw>B0K6v@WofD&*>1yt{)YhL#}9)k1@1;!$M%bSu&FhP8a$*g#; zbcaGvN;J4__uy!TT}1LQ<~#&E7ebKNDhRSqy^<$EJbwvzP8T4SqVYH@MqUv-MdLb= z)DY=~$nZwo^GF(66h%=K#a^bxxQ11o%#ssw<_v2?vLK`d_lisM83X6R04!96Psm|y z;0ZH!S~k5x)Ve&67vpk|NZw=48Fm~(3Gzu;-*k#+cmXR{8xr(#y=p*|i!a_vU5woA ztZTz%kbjog7!_At7CUk|8Z0@P^86WD(UwT!7#FdNah%*@+4<6&_kFX~D|-P}%4$g2 z3)dF2h$Nl3SFwU%Q4~c{6wiYe<8Eg4ro~UmaIt>N_2oz`DFXczy;8J+V-&!vOJH}` z>2bV;RKcnuZe&`FyMHfShoG5^Hw58TFvKG6RaX6R^=LNR zO-M}&+@68jT+AXa6Z0ypt%HUjWcQ`)&>q>95bss^K(9JbG49yxx9lp|Grbzo(oiI| zQe>3$4*YA0n1&KbZ&K(=Lrt&NwG~BC6h-kSge)jfz;Y!#P09!K)M7Zs0d8|O|^x#XYSW$`nMEbZLtxV zE#bQ1jj#YDtb1F;Q|PSM45E!+#I&Wi;1*{@KFmT;mZ3u;<6`v4)ppF{t_48It#IwD zmz}oAa}u-V^@Y+R>KSi&`-0kHBTBc(WgCj3D2o4`zjAFmT7RTzQ~&?~07*qoM6N<$ Eg1L9gQ2+n{ delta 930 zcmV;T16};W2f_!CE`OHWFbG98bGj4ne@WR(KYT`20Ko$x#cjD?j*I|V5dp^Y)%Ngu zy~dB%b!{?qhQ6E=3n9-greRb>lEY6j`&8bf6s0dn;>8Gw-EHqJxDqD$Os~~i18cHlJ=m-(0;CoRpQ4eKgyU3 z5GU#y_}um$==oq4j}7va^|bFydYS?~0mWfz1B#;fAVMqRz95YReWXd5gVMkn^8vlj zMKXt3pTOmttA7LGeGY*&${=MSso=#6Q8Sn|B8h3hH$}#!8TVX~JpCh#=fZzY*358u z{!5(StiyuKwD&VRJFSfc1Vys3IG_X^(gD?H>6+I)kB1=rK!LGHKk}v|5=;=^Vlpe9 zE7PG6loAbY+dVj%VHc4+jQJb_o(mz!YZU}Jr(VgEAb*|&Jf|BFOVN0o6(g?*o}zJ` zNNR}8LS*ikSqup!M);={E30j!2oPjg)8K+ zHn75sRm-MVh+3ED@n&3ZiR3MF&ak5hCCHVqe&`g>@CH_{HYDifdewj^7vH>_`O zs>ksb(gn*ZjCDU}ULkW8ZSAqIr~li%xshoz?ti{;6+tr@ZwSJ>V2DNBtE~RxYH2n* zO-N4)Jf4BxT+AXa6Z0ypt%HUjq>95bss^K(9JbGw#^aZ`ob2XL>cFrJ+b_ zrN}7h9r)K0F%2b>-lWi#hMHcjYb%PPD2n1k2w6~|f#phgnv@Udsl|%6*owdruSGi% zihs4S_${yw?6<-tw5ct&BJZjZi%XU8K62}tTy0qv6@lr$skYGZ%zgVzf0x3mEw&S|cOoE-~rN{Rg)hmpL ztZQYn=RA+Rw`_`-=oa_7xw867xAJt_jf4wt_sZ*KOk5GPYUZAj3pMKTs!wZ9-LBEq z+mzMy*)foDuJg|y7bUJM8J20iepY+iK7WF@kLJ{+<=L02E}U?zKXcl7Yf*zGyeU<-GT9%114hN*IQFy>7X+cg7j_<5M(~pRcRm z#_7(x@y0?c<8SuKPi6O(e>i?4@!yOUn@;s_x)!7sH1FpgA>(uN&i&eEdhq?Rkml3< zA7<7>CC>A*>OI47)|hKi(ylM_cJ|%yW_u-nfieE-ui0nUyKc8uc;%3}W<#0Jb~`Jx lR2})hQ___g8L)$h7wmC~H{KjDX!;0J;OXk;vd$@?2>`fF(lY=6 delta 444 zcmcc4e2sa6O8s0<7srr_Id5-7_Z?Q?aR`h$>v!Y-q)pR*b{q+qEg{Zx(&KxL>J=Ly zxyF5$q>dL}*>3sVRrGD3T>A0mj&k!br`V1iZ;$bZZ}AAxJ?j)_m9cN~`B`3;Uvqbg ziMtvfof&B2Fg+mMU;J^D$}zvxzg73YotK^>ReY}W?cHfHsU}|a0-udmZoea=U8Wm< z@$s|u%z2f+cG}%vthagRxit~@UEaQ5Ex(~d;)T5T1>@feDUYgyY!WA1-ER=N z!k)^j`#I{0)~&$f*A4HoXQXZMzEFAjxzl>##WrOVr$5_XTfJ?$;uD?&X(bE|(kJ&T z?fUYuR>xJnDrwTKMG`v?o!(ggf70!}CqK@S?iER%o^)i6=C@^+cg)anKYm3s`S-f| zZ-RYNNgJI@)872=xjMb-{Dc0DhyNG`mR@b&w0fz}k~_tFgpAJ>i{;9ds3*@l_*JoH z*__n|{>pRR(i)ygvIZK){+hkB@5eNrE%pnT<-UG1pB>-5?_I+R-lZE4-7>uU?Zp(+ kjYTDT=i6Bru!Dq!@##6Yo7s0saex$fy85}Sb4q9e07+QUi2wiq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/00002.png index 8ace1d8be1f2d497ee5ce715fc0e48bea5dcc7e2..fc2f4b72997ee897e1202b3f2436c2e5babbc59c 100644 GIT binary patch delta 704 zcmV;x0zduV1=t0UB!8btL_t(|ob8%hmck$mhSB3r*#DBcmwD(J26GR^f^+`wsa8lr z5-vd>Whai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/00006.png index 1fcdee14dce21c819b5e211dbbdf546034789b00..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 516 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 TD-sYx00000NkvXXu0mjf(r!?g diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_set_consensus_key/00003.png b/tests/integration/nano/snapshots/nanosp/test_sign_set_consensus_key/00003.png index f620b54b7d2f1dfbecf99f36023806651a706cba..af9beddbf5a4054f133e1e3bb642d636df49a95b 100644 GIT binary patch delta 303 zcmX@dbc$($O1+?`i(^Q|oVPa}*EJakFa#L<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_set_consensus_key/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_set_consensus_key/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_set_consensus_key/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_set_consensus_key/00005.png index 9e9418c7d7a456eb304fd7b3c50a3fc70986cd04..cc6c26e2f358364ce7047f340f272d2a148e47e2 100644 GIT binary patch delta 911 zcmV;A191GS2c-v)B!6s4L_t(|ob8%hlItK0L_N2%6YqaX*~|TK6+@(^Y4h|{bUvmM zEQ1i@)tR4TA@BD)|9YM$w=@QMAv6%{c@+PAkqOgqhJ@oh&nJf!0t5Tp4i6vcNJ)ds4PaGJGVsoGRVqDw<h872Ay^#ZE}HUH3|_;hu~Si-`iFNn>~w0~9A!^oTPKwtakQ=2n-zK`mx zm7~*V(uUtjAS9#HK1Mb---_S;#3=CTl{=&NPH!FBx2MTtINztkD%PDHLkV1n7s!rTA= delta 917 zcmV;G18V%G2df8=B!6;AL_t(|ob8%fj^i*4MBRhj#P>f^?lK<+)C^gqN{b~o!uK(7 zWLly~t=02$Ead%u%b(|Y#+J%J7D5BEo=5S|7O5~zXG%EE^L%nxAuzBnYqYpyWsus@ zT0FKcDP!3;=znYv-%gLi)sU+8V+O2`ehleMiI+Dm)X>E|Z1<&JEXct_CYf@>j?J4;LH<~RmO0T%kTWKo{K4t&Q&VLR zIQHcLPCn9;65r~oq7Jf)SD~kEv5#ZRt^n=f&z1{3}1N&%1}y8qU}ICu3*TH2ChEPt1MZuHeN&g7f$6sN~$QimJ- zc%Pe?k3B$Et@cdot~B!qmS%4^R+~_;0g{2RX3!13Q+(6Ve!?ofU}Am`DaLIk6Obgy zMt;<9cp9^JVDF>|MTL=LW%XOtA`}%!rNOJ*ei+Lwu~(H)R7EJyOcr)4Q;a|MttZvl z)91+Naeqmm)5SGtF%HtCE>(e}M%6}MKIZC9G9T4x*C81}Gb#ZPM(G@^@bG0pX5DCY z1B#thpgzjSVdgQ^(|L~etK$eo&Z;h7Q+)Go+N8SGKLbdfd~KfPTXpILZ>bqDI6%7P z)w`MKTlX{qGeDi0uBz?A>gi>N*hsB*7VNQcXMcD-iwQ*4H@Jw!?UqX59xzjk`$C?) zkbVo9gCt457f)AFN>OZPWhHA6)B`{FL<>g3YV|gtsyj`wE~+{HzsNGHVP%l%QA)%02j*ci9Eic$^Af91y?pw(PPBN5uZ2nsKFR;pP%_3vo^DB5BMu% rKS`1#Ns=TF1DK+zBRbOl}?qW^G&Hi{<8(y1u~Vp zdkhJ?TXGgV#h;N%9ckoYX(y@Qgqs=$Z^CX(b+*(cTc_3eJK?-X(&Hk1o6-N*ewF_r zI5)4eoAtQz3V#4_Yw6dK2m|{QiRr#|cSk!@q-T+5j6vOr2Jg-|u&erG+(7mrz48EF zY5OQVmD_4=!+Q4I%1zW4?F4r7v8#J`4py4ft5vcDvj=0gZdnmyRzT$SwaLM@SDBar zBex*;!+m$CBMoo#8+_-R@ZztEM~qnk_Gak*@5xR~cSxj4ZG$OPiR|RSWpS;W@N9RP z&KA{*QCQ`&3XMf(=*hEx_L1MWXQ^d(# zpmX`s0c(lDw52m((E^tcw?t=y^HaK0&Vlm9J2dV)-4 zt{y|e9+sR%5AlbmQbU^bFt?JFH{q&=&P~{?DbD7)r0di=eUA zZt$H;(2ei|0000000000000000000000000002OxH^@V^<}}R$9RL6T07*qoM6N<$ Eg4}K5bN~PV diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_set_deposit_limit/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign_set_deposit_limit/00002.png index 023ebeda5e0c7f2ab352f57c81455d0bae482a8c..54c4dbfab7289334c4aeae2cb99d67b7ef3b4258 100644 GIT binary patch delta 701 zcmV;u0z&=U1=R(RB!8SqL_t(|ob8%ha>F1DMV*Xy!v2@!z4XHqiuFPWY)E_0M<*d5 z2_e9e``T9GIF9@|r8Lo!nUr35Snn*=&mhij=be@cy=-*0>TF3VkE&if{eNo=T;Y@>7VhMS>1&{Q zf0Xc2C z=A z;^KDo8h`PZSY{dGsh+gPNo4`j^*;~FY(m>*9(QoGS{3(u)nI3Te+N5RGlo~K-JU#x zMg>u-Ri`;&?c9lWy|e6~WyOU00t6waDDK(I6SdzfQU zk`MxzIFIE{yk4(zy{_v-OJ-7gVX)p=s>fiC?x`QTRp=F?i&b08x~}D7d7CX-iV&}5 zFq?%!^-uld4&JZbE0JHu6=aqwSUdOLB~7na>Bx=xG{YW zJn#3Ce}&jn2q*8hATxZ%p!I5Jf$mFp9Dok-2lCJu%tO*UgqQu2txpS2+Vn$s`UXP? zA%u_wuQ%nVxEuFEG9WF}(-Nrjx|`_*B1d%BV=-GyvBw}iwHMBMHYXe$p_%l0nJ^*; zw*hxZ%_kEMQh!kM?Nt=Ngl_MJw|*Da*IK5jMF@;Fnr4fK#i*}%Tlcb%gHnX>QEZ$@ zi%g0Z{rB{ke2sPcsr)%-3GNwfsw_u)-9Qt^S27YBktz3r!(4DJlNU`uj2UH(i&x7$ zjOAY2#bFfJ>N>{Rk9Q-zEgVvZRreCC5a`L*WykWV0DsrgZtY@z5!2VTJ~QgY5xS%T zQ_HO7n67NmD4eL}fWcuJAdcLLW#&uhI~XuIxJX_8444AAQ-2Z0_ke$h_mX~*uD=vO zgtXyqL0*{wTs~%Uk7WFb6&mLXdV7gmJj2Y6USFNQc``3NgiRAcvvP_+GrShWo}g5d zqbUV;-77HfhU;=Ujz7^idjEv~isB`s(J}Y3@JS7VKHzzp( zNEOTs2Xl+>SgVRlW9f+Y4z?Rr*(Ta?7Z;>(zdQ$!F?2WsCZ5t?9s7h3LI@#*5JCtc pgb+dqA%qY@2qAwQ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_set_deposit_limit/00003.png b/tests/integration/nano/snapshots/nanosp/test_sign_set_deposit_limit/00003.png index ffea3b01d2cbf9cc3646c9bc14c02ae8880b8e0c..9bf3a483e4c0a473ad690a6ac2ae0def7ae3b641 100644 GIT binary patch delta 313 zcmcb{bcJbxO1-qFi(^Q|oVPa<`I;4Y+7e^SCg1z-aVOQ@BO-Y9gK000f3w>!aw5oU zyW+ajJYJgruAO<;^@J;N8<&@6Q{ddGeh+ubnt0d#{JCYuWjDdJYo6h}TKGncW=o%Yl4tmMy-{q;@1;stE&Zf( zEfnw0c31BY%g>j;c@Oyccg3>z zYbwt-zEQWdLc)CgHxbK-D@waR{S-@>rrhq>|4+a$?OW|D*HiT~3mLy%nbRke{xYTh z=Tg=K&kvoRTp+7uReO1pY;lc|bliIe9N^4D){@!_Q!Ku5Jp!rlboFyt=akR{09Zkd Ai2wiq delta 315 zcmcb@bd70(O1-S7i(^Q|oVPa<`I;4Y+7e^SCg1z-aVOQ@BOzopr E04Nogk^lez diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_set_deposit_limit/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_set_deposit_limit/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_set_deposit_limit/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_set_deposit_limit/00005.png index fac0093f45dfb946ed4f1008fac2c40e59462a21..6bf73fb0597d521a5cd7ce8407e4586e5150bbae 100644 GIT binary patch delta 400 zcmdnQyoz~(N`0ZHi(^Q|oVPckH#IBpG$h`7>38SD$zgSu+?3m5 z=jj@2@3-5NDZN|$`zy9t-$nNX#QDVD-=~&jBK$D-*LCyX&!UgkJL%-dE1pcK+f_OD zO25YYd2&66%`(qN&zLFxh2hKDeJ!6h?W~{cRv}@`mjB*qy82Nksjz9q$93-i+#Gq> z=SzKbz<0wRz1ug>zqd8!TeD=tg?yeb-;`$WyYjlo&f~4HyU&6{_vT4`X(~3JJY6!Z zKy)`#!N%)%WnUaP^NU@t_`$~dWjC6P)_-^w^y_-mtJ2=Oi$0!{``S3j3^P6^tC;^|zsIiIo~xaoq$MvlPqr;TPHxqv%UV{2rj9;yHY`~Z+CTA*yyK&m*7+NP`ZK5R zOHExmzyHRjuZJgZ+tnoYn`>jh#u>Zz{G0jVqEE|q$@trEX6HZEumAJ)+v6slWz(Z` zChY3|^zh|Li#5W1d)gu^{rnwnzwurXVfKA~PRr35mKDeIOkSRhZ%KSwm^b68dcE0s z1Ma{1+*zjVQyr76tG8V(xmljZ6tmd!gX0>t!OYX+#G+(!Fwm2GPCdhRv0W!ygAW~@`FYyr z?VF|w|37w~f16>ogt=+$j%jOcPDER-U&ueZlu7IQdxg{YeXSTbe);+7P39?!o8`uS z2LfJ3yH_lkyrZ<@-LxMP_ggTe~DWM4fpp?cL diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_simple_transaction/00002.png b/tests/integration/nano/snapshots/nanosp/test_sign_simple_transaction/00002.png index 8ace1d8be1f2d497ee5ce715fc0e48bea5dcc7e2..fc2f4b72997ee897e1202b3f2436c2e5babbc59c 100644 GIT binary patch delta 704 zcmV;x0zduV1=t0UB!8btL_t(|ob8%hmck$mhSB3r*#DBcmwD(J26GR^f^+`wsa8lr z5-vd>Whai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-SeCDpw^l&s;h=W_TJdMG!rmOr{StOCg6oO+)%dVzjVEz8MU0A>0%|!{_+PVfOqQN zqI7Rp4(pu5%_+U#0RR91000000000000000n8OcF+{gbV#V#NK0000D&!Q`$&K-8AAiJ$d~8>hJ5 z_pq=k`MYYdchKMKoo9DQ=4#ffuHP*B*jV>~&e^u;Wswc?C6B&sTKZq8%5id5qHS)9 zYR|t<=3))^MdFsUi0drBdhvtqtq;5_S1B-{f(Ge*4AUnb|IfD8X)Z{{)78&qol`;+ E07tx%1ONa4 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_simple_transaction/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_simple_transaction/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_simple_transaction/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_simple_transaction/00005.png index f5639cf651b25c7f6f5ff95bff6026110fd17854..10f978ef0d4390d22e149106068d62e78efc2ef7 100644 GIT binary patch delta 339 zcmeyy^p0tQO1-J4i(^Q|oVPbGiZvfLV-0Vs zPYPdJTH4~p5(yuDKX!U3xAEF8xp!6YG}DZktJ;oS-q1GNC^h~k<5jVn&#up(SMEB^ zG4yZ2Y$l$Qb%MbYFPO^7->8asmCHAA{=B%=Ss%WCHT@x)@aB$v{Z#JxAGz1cyYf!k z+m~=YvZcFo-%i$}*A;lD$1|Rl__NjMxsB!4|gL_t(|obA~`dW0YhfYEfm-X!-wQtr|PZHfd2?IKY9->Mar zOoGBNB6~11Gg}?S0^Ctr2`%x&z{+XfI_;vq-2Yb9XYMmvYwqyX?{jqkm%SOYKIG4g z>rGbWo$Y93dL?K9HW~hMvjUW~PIpuG$-dmI0QkH3+t#Qlp3prqx|`qdIUC@UK>-#S c0N_5p08;$}gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 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 delta 395 zcmZ3;yp(x@N_~!}i(^Q|oVPckH#IBpG$h`#v`+l*U8G-|z&BZq(e>k`bN_8Eud+!g z1jW6SIlbx1>p7o2*XF$UeA&F`-oLf0Pu_Xkx1i~Uzh3d4myvVJoB!NwU&ddZd&BRT zN?K&*F1yF;6n{&HY`HRb+bZU~;;gkh=H6fK5-fOcRlV@${NOpo_1l&@Jo9@RXse%p zvRmqG?T-7-mJ;ubw|#bB(K+=AgU^||^h3MkZ|zzBzjgmCUrXortBRbjNbHF=?=uh9 z`*t*B@~+bGts3HIlUH{B3vF7~b1;i#_JWI3PU_g(+&y*5TH&ljvykInhLljxWo5e^ zgLbc4@yaA*)3?8i{L;5sCpQ<@Yff#_aNX~}o+0Kiv0tTLtnNV%YoV<%z6enfmA2{{s&%{S7voS89K! jf69Ud`V2TggQ5JpX6dV)0qehlRCv1jxv;ErN@xNAPe-_@ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00005.png index 5b226371abe91f0ab8d0288788b6fd6ded2f177e..c5894b08c2f035d393960ca23b646f4f1d8ea84c 100644 GIT binary patch delta 352 zcmV-m0iXVm1C0ZaB!5&%L_t(|obA|Aa)clZfZ=qfH{t$A%3b=vEDZz|XIc_x|L zLD)nkB9eous%rEs0=)d8{efsBZW}rz-_sGt1gL5$Wy^dn)akZJ>6>jZJtBR4eRq3m zXBtW=ez-0HA<-Y^Gz7HH$4{&_YiBQqu-)75Qp)E4>vQm%fPdI~|5hw~#2>VN3^{lm zo!IPi7UAJW?_NRsbI^vfPr&6I{Iil|-MZvoGvgv0@*LQg@~tj*C1_UOrLFtUKbxn( z0RR9ZU(pkoS2EI9sMB8O#gF}pw$1#(kFHEsw&AAVz0>w5S3A0X_}AZLH#E7EYPx>J zte4vv3iF30AU#9K{#Nz`{9nYA)L_t(|obA|AZo?o9fMKuNO}PJ&e3w0-F~B4wQfE8r|2=I@ z2(Fz52az09RaK*-2=KBW`6r^y=r(moy_Yl21yI#eic35jHQbgd{neka{6xn5+Tr~n z&oY!!>~uo`Lb5-_G$pjgV*{(FwWHf9`r+;GQi}8UwKe!FK!5DLe=8R@;}2RtrW(AC z4mkUqMR>Z=hewcq4cc`5FJK#k{jDTfx3=tKW?qCteh2+S`PPtrC1|cZOWSbIFPo>q z0RR9ZU(o@G95gdBHmS=|=lxIpcj|NO%k!sqCRcXimao3c^N+4}bn)=Fzr}87ekToe zz2z@<+!-44=RXx7L)PBt0R{M{j3+5%_5#>-RmOe)<@wtUl_c30k?-gL&e$~BCdWOf zH;XSoyIcF+P`fjFcTugEJsEZD%9CLM6&e5l04e+ckn9m_##tZA00000NkvXXu0mjf DZqKfn diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00006.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztTc?9lLqhrP``?db{pjpG zrn-!U0To35*yKO|c_nY(;}iDl3pp15@@+0yKj(GZ2jO)Qi!0;h?@JvK{bu>h_dw;m zC>H&`#}l@1wo&cf>|r+HxasUAEeqn77VM}Oo1S&_%OUo&8v|3VEAJn(oc*S;Wc7xV z>D?PkR$Jt~$Y$Ht9=o-3_wDs}M9Xa%!wV&h zZNFN6;N2?O)%sV(gcCHDR}1D{YwOw0a+TZU?3Pm&UgqzdJ2R!)ms}J0cxC>UPkbi= z&zTWhai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transfer_ticket/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_transfer_ticket/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transfer_ticket/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_transfer_ticket/00005.png index 1fcdee14dce21c819b5e211dbbdf546034789b00..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 516 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 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transfer_ticket/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_transfer_ticket/00011.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 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 delta 395 zcmZ3;yp(x@N_~!}i(^Q|oVPckH#IBpG$h`#v`+l*U8G-|z&BZq(e>k`bN_8Eud+!g z1jW6SIlbx1>p7o2*XF$UeA&F`-oLf0Pu_Xkx1i~Uzh3d4myvVJoB!NwU&ddZd&BRT zN?K&*F1yF;6n{&HY`HRb+bZU~;;gkh=H6fK5-fOcRlV@${NOpo_1l&@Jo9@RXse%p zvRmqG?T-7-mJ;ubw|#bB(K+=AgU^||^h3MkZ|zzBzjgmCUrXortBRbjNbHF=?=uh9 z`*t*B@~+bGts3HIlUH{B3vF7~b1;i#_JWI3PU_g(+&y*5TH&ljvykInhLljxWo5e^ zgLbc4@yaA*)3?8i{L;5sCpQ<@Yff#_aNX~}o+0Kiv0tTLtnNV%YoV<%z6enfmA2{{s&%{S7voS89K! jf69Ud`V2TggQ5JpX6dV)0qehlRCv1jxv;ErN@xNAPe-_@ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00005.png index 5b226371abe91f0ab8d0288788b6fd6ded2f177e..c5894b08c2f035d393960ca23b646f4f1d8ea84c 100644 GIT binary patch delta 352 zcmV-m0iXVm1C0ZaB!5&%L_t(|obA|Aa)clZfZ=qfH{t$A%3b=vEDZz|XIc_x|L zLD)nkB9eous%rEs0=)d8{efsBZW}rz-_sGt1gL5$Wy^dn)akZJ>6>jZJtBR4eRq3m zXBtW=ez-0HA<-Y^Gz7HH$4{&_YiBQqu-)75Qp)E4>vQm%fPdI~|5hw~#2>VN3^{lm zo!IPi7UAJW?_NRsbI^vfPr&6I{Iil|-MZvoGvgv0@*LQg@~tj*C1_UOrLFtUKbxn( z0RR9ZU(pkoS2EI9sMB8O#gF}pw$1#(kFHEsw&AAVz0>w5S3A0X_}AZLH#E7EYPx>J zte4vv3iF30AU#9K{#Nz`{9nYA)L_t(|obA|AZo?o9fMKuNO}PJ&e3w0-F~B4wQfE8r|2=I@ z2(Fz52az09RaK*-2=KBW`6r^y=r(moy_Yl21yI#eic35jHQbgd{neka{6xn5+Tr~n z&oY!!>~uo`Lb5-_G$pjgV*{(FwWHf9`r+;GQi}8UwKe!FK!5DLe=8R@;}2RtrW(AC z4mkUqMR>Z=hewcq4cc`5FJK#k{jDTfx3=tKW?qCteh2+S`PPtrC1|cZOWSbIFPo>q z0RR9ZU(o@G95gdBHmS=|=lxIpcj|NO%k!sqCRcXimao3c^N+4}bn)=Fzr}87ekToe zz2z@<+!-44=RXx7L)PBt0R{M{j3+5%_5#>-RmOe)<@wtUl_c30k?-gL&e$~BCdWOf zH;XSoyIcF+P`fjFcTugEJsEZD%9CLM6&e5l04e+ckn9m_##tZA00000NkvXXu0mjf DZqKfn diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00006.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztTc?9lLqhrP``?db{pjpG zrn-!U0To35*yKO|c_nY(;}iDl3pp15@@+0yKj(GZ2jO)Qi!0;h?@JvK{bu>h_dw;m zC>H&`#}l@1wo&cf>|r+HxasUAEeqn77VM}Oo1S&_%OUo&8v|3VEAJn(oc*S;Wc7xV z>D?PkR$Jt~$Y$Ht9=o-3_wDs}M9Xa%!wV&h zZNFN6;N2?O)%sV(gcCHDR}1D{YwOw0a+TZU?3Pm&UgqzdJ2R!)ms}J0cxC>UPkbi= z&zTWhai~XwS9Qg_f+O_rlG3SE;@Sada=-K04*-tmOIiAehpElV1I0a)&RlH=S*uGdcg8h;&kSmlU?FY?9m7--&~ zCI1s*QxGS=EkR=Xtb#i$=)U2OH^5W;5ovS};wGtW!sUI+_Pd29ZTTj=e1QP~006*T zNOhAv$Q~U;0{^NgWtygxS6-r`l$~xf*Qzvzpo?{rJtT23#zRE@^GrilDB7bjXA|zV@}qPK?4Nzv(t9?0=CR#9cE`v2YI2MkQ|sac zAZR*wdVg<1U0iQbeC?K0;y}1D1SbGoee;es+Mu*Zd)}7^c&ysg zMiIOevSqe6kzr1&1IGSyN!Iby$fxaf^WZUX-Lkk4%l?ES_Psw6hN;;Z8QlY19i*jr z7dX5blGT}K*}-mJUA@8*sBRO_uXgbB!8w!L_t(|ob8%PlEWYjMV(Y`;`<-Tcj<+zX`=Cii6LG8tr8m~ zA&EgGk8LH6<0zl^eV=H_OlmLOtap~`doV}$(v6l%y<&8+>U^^Ad-<^ank}9bA>Nal zIV}{bpY@j&ykEP?b12^NL_9&HeTb4Jg}(qy_rAz+?W5Fdr+($Nz-Phgm26T!)kVf}lZj#<6yuDA^dbjYTP2Ys4FEE4< zLI@d%C~aC#u}6iFpkLJu%!jFY7Y#P;F`M*?%h85&x zoGHr`RPI$o`+xd&tb7nh;PN$)(2A!5>?H~guxJRH4LkLxcQRmlf|+Z+4L&2Z+yyPlrKUw@+nUO}5-8rEv<3YYwY0gr$e zrH!4M0ZZ=zf^;4KM!qQk>Gqhm(d`K#%W}N4b^TMp6KKBGjdfp8dr)u3m2F%Ddjmmw zHItU?qmCR~Hu4}~=`kh^wr-jBjYDYK<1uCvuC?lO^akvob0>wG+)qnDvejZWb?yC7#kim)5&EzE0~Yb0FFnK@tG1zIewQEhr6X zulwo%_m!I7D8L(`SY~;G40Bi=(D$E9v5q&5eAr$$4jqHkEt3nej-OC;-}@sGnA$oc z(LEs5AzGRjf!&*-Se<>OSba{ z&#`%bwz%_rHQQW0o2FmKo(b6>;uPj)u+Q1RZFR3;^5$z>w<&Wa-+KE&ME|qjOP0S6 z52jr&dh+4s^EWy6K{h?!?_3Y+{Z}d%E1eYkGq;-K|4Vmq1<#-U_qQbP0l+XkK`pb_j delta 307 zcmX@bbdG6)O1-G3i(^Q|oVPav`cew(A{9OL4us|8%=-!9mFCER+x)aMO`9aAnjRviwD%-f=S z_iK)WMr=s-ZNarEtAxI6IP?AJoWR+y?$2NFSl`1YcS~t#lm9~R`cI4BYG;4=HX+W; zr|`ob@!LZ2=XrL;d>6iACbs>DFyD*_h961Iu@_X^e$R=#o)dhf_vX7*ryEXKFU{Wa zoV`8v>y?LpYSZ}51?8%K9p3SyENk1eKQnjnZPKon;eTjf`;v)8^Z(PsVhfgh{otbQ z_iZ|VG{e7j)%BNR-@oZg)7`vV=c;sDZ89?hDlquUTrY4|vyzAPHb}zL)z4*}Q$iB} D(OHnv diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00004.png index a250608bfaa5596a4df1cf4a13256dbe4c2d1877..908600200d45a13b6992c9edeaa2393b0861e45e 100644 GIT binary patch delta 360 zcmZo?Zf2gKQt##I;uumf=k3kdbxevpZHXrDTK?*1etX0^@yhy!&xadS-WQt|Zn(lE zYx`XA-NxMLeSL=aOiusv3F7-!^?$e9=B?JUj!i$p+jiQOu7A?)7*`kYJ@vfs@3RtT z^t^+g8y+=&V&Ck-eKuE{Q)Kz%%|Sl@=7{(z*{JUCyZT+V&+u1$SVFdX>6DM(rtLj( zv8(yE$_`NB;$MD z%g;71U07!H`|d~9bPdgeTE2<ZfBmLQt#*K;uumf=k3kdzQYPUZh=u}{cil9v}wBC0>^jh3iT{qCFg^$1U!~1 zu(}*xaco=ePpe};F6bOL_O!h5`tf_Iv)A4gv2Z?$mwfi`%HB!(Y(GCY@6xZHcO(B; zLRsW2tA5RSivJ~5qB8QLJr`KaoijD*)Ac18LJxI+maf^SU)Xc8emhgN^~%LP+qb`Q z?F*B+bMAtkTVap?Kfaq02lX6|zcM$=`RE$|{X_kS^3|E;FV^Ulcda?NyX^5llb4U8 zd~ROZy4z^6t%<$2*{^W!SDV;&3)VEAn|3Db=ke3JW%C#p9+z6e@rhwWtm=+?u{=Vr zVqJG#UOBDwt+44N%Xgjn7S5ijoMD;2a;umOZe*7+J-@QApXq>(w|&?2dJg^AzfYIG z+RRpb;=iW&)*9}pyGixzDO=^)3>bAe7;pgR8isrm&bWp;g?S(qp00i_>zopr0HiLY AGynhq diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00005.png index c4768d4fa3e1b0a3daa4967d264c1c4d3d228e4c..ca01281085c22f97d87672ca375c634fc9674dbf 100644 GIT binary patch delta 322 zcmV-I0log<0^I_TB!47HL_t(|obB0JZo?oD08lsTO}PJ&xJy5*Qp~tsq6$d*-d6&) zm@sU1mSqk(=bZECCCiQv7}$DQsXc9?zP)@-DRut6F@Fa?2^c%}Z}mm&@fX@Z znjAcStLW_iY{Jbz-z-7>b5NSAXTWI;ajs0VZ=H(EOuGpWnFsZveCw8aCn&D0rRDaX zKX#r24gjz$AEN^}a^;XyKP}gn#X={Ldk)^vU8%ZQKHTT%0G?4ERxS?enGfJQucPVd z{Sz?r@SobB>^lL|F8#&(&j6mc`?BnKjK{C>k23%O0000000000000000DxEZ1-Xy! UJc{I~Bme*a07*qoM6N<$f<^P34*&oF delta 325 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 delta 395 zcmZ3;yp(x@N_~!}i(^Q|oVPckH#IBpG$h`#v`+l*U8G-|z&BZq(e>k`bN_8Eud+!g z1jW6SIlbx1>p7o2*XF$UeA&F`-oLf0Pu_Xkx1i~Uzh3d4myvVJoB!NwU&ddZd&BRT zN?K&*F1yF;6n{&HY`HRb+bZU~;;gkh=H6fK5-fOcRlV@${NOpo_1l&@Jo9@RXse%p zvRmqG?T-7-mJ;ubw|#bB(K+=AgU^||^h3MkZ|zzBzjgmCUrXortBRbjNbHF=?=uh9 z`*t*B@~+bGts3HIlUH{B3vF7~b1;i#_JWI3PU_g(+&y*5TH&ljvykInhLljxWo5e^ zgLbc4@yaA*)3?8i{L;5sCpQ<@Yff#_aNX~}o+0Kiv0tTLtnNV%YoV<%z6enfmA2{{s&%{S7voS89K! jf69Ud`V2TggQ5JpX6dV)0qehlRCv1jxv;ErN@xNAPe-_@ diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00005.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00005.png index 5b226371abe91f0ab8d0288788b6fd6ded2f177e..c5894b08c2f035d393960ca23b646f4f1d8ea84c 100644 GIT binary patch delta 352 zcmV-m0iXVm1C0ZaB!5&%L_t(|obA|Aa)clZfZ=qfH{t$A%3b=vEDZz|XIc_x|L zLD)nkB9eous%rEs0=)d8{efsBZW}rz-_sGt1gL5$Wy^dn)akZJ>6>jZJtBR4eRq3m zXBtW=ez-0HA<-Y^Gz7HH$4{&_YiBQqu-)75Qp)E4>vQm%fPdI~|5hw~#2>VN3^{lm zo!IPi7UAJW?_NRsbI^vfPr&6I{Iil|-MZvoGvgv0@*LQg@~tj*C1_UOrLFtUKbxn( z0RR9ZU(pkoS2EI9sMB8O#gF}pw$1#(kFHEsw&AAVz0>w5S3A0X_}AZLH#E7EYPx>J zte4vv3iF30AU#9K{#Nz`{9nYA)L_t(|obA|AZo?o9fMKuNO}PJ&e3w0-F~B4wQfE8r|2=I@ z2(Fz52az09RaK*-2=KBW`6r^y=r(moy_Yl21yI#eic35jHQbgd{neka{6xn5+Tr~n z&oY!!>~uo`Lb5-_G$pjgV*{(FwWHf9`r+;GQi}8UwKe!FK!5DLe=8R@;}2RtrW(AC z4mkUqMR>Z=hewcq4cc`5FJK#k{jDTfx3=tKW?qCteh2+S`PPtrC1|cZOWSbIFPo>q z0RR9ZU(o@G95gdBHmS=|=lxIpcj|NO%k!sqCRcXimao3c^N+4}bn)=Fzr}87ekToe zz2z@<+!-44=RXx7L)PBt0R{M{j3+5%_5#>-RmOe)<@wtUl_c30k?-gL&e$~BCdWOf zH;XSoyIcF+P`fjFcTugEJsEZD%9CLM6&e5l04e+ckn9m_##tZA00000NkvXXu0mjf DZqKfn diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00006.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$wpiY` 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 delta 395 zcmZ3;yp(x@N_~!}i(^Q|oVPckH#IBpG$h`#v`+l*U8G-|z&BZq(e>k`bN_8Eud+!g z1jW6SIlbx1>p7o2*XF$UeA&F`-oLf0Pu_Xkx1i~Uzh3d4myvVJoB!NwU&ddZd&BRT zN?K&*F1yF;6n{&HY`HRb+bZU~;;gkh=H6fK5-fOcRlV@${NOpo_1l&@Jo9@RXse%p zvRmqG?T-7-mJ;ubw|#bB(K+=AgU^||^h3MkZ|zzBzjgmCUrXortBRbjNbHF=?=uh9 z`*t*B@~+bGts3HIlUH{B3vF7~b1;i#_JWI3PU_g(+&y*5TH&ljvykInhLljxWo5e^ zgLbc4@yaA*)3?8i{L;5sCpQ<@Yff#_aNX~}o+0Kiv0tTLtnNV%YoV<%z6enfmA2{{s&%{S7voS89K! jf69Ud`V2TggQ5JpX6dV)0qehlRCv1jxv;ErN@xNAPe-_@ diff --git a/tests/integration/nano/snapshots/nanosp/test_too_complex_transaction/00005.png b/tests/integration/nano/snapshots/nanosp/test_too_complex_transaction/00005.png index 5b226371abe91f0ab8d0288788b6fd6ded2f177e..c5894b08c2f035d393960ca23b646f4f1d8ea84c 100644 GIT binary patch delta 352 zcmV-m0iXVm1C0ZaB!5&%L_t(|obA|Aa)clZfZ=qfH{t$A%3b=vEDZz|XIc_x|L zLD)nkB9eous%rEs0=)d8{efsBZW}rz-_sGt1gL5$Wy^dn)akZJ>6>jZJtBR4eRq3m zXBtW=ez-0HA<-Y^Gz7HH$4{&_YiBQqu-)75Qp)E4>vQm%fPdI~|5hw~#2>VN3^{lm zo!IPi7UAJW?_NRsbI^vfPr&6I{Iil|-MZvoGvgv0@*LQg@~tj*C1_UOrLFtUKbxn( z0RR9ZU(pkoS2EI9sMB8O#gF}pw$1#(kFHEsw&AAVz0>w5S3A0X_}AZLH#E7EYPx>J zte4vv3iF30AU#9K{#Nz`{9nYA)L_t(|obA|AZo?o9fMKuNO}PJ&e3w0-F~B4wQfE8r|2=I@ z2(Fz52az09RaK*-2=KBW`6r^y=r(moy_Yl21yI#eic35jHQbgd{neka{6xn5+Tr~n z&oY!!>~uo`Lb5-_G$pjgV*{(FwWHf9`r+;GQi}8UwKe!FK!5DLe=8R@;}2RtrW(AC z4mkUqMR>Z=hewcq4cc`5FJK#k{jDTfx3=tKW?qCteh2+S`PPtrC1|cZOWSbIFPo>q z0RR9ZU(o@G95gdBHmS=|=lxIpcj|NO%k!sqCRcXimao3c^N+4}bn)=Fzr}87ekToe zz2z@<+!-44=RXx7L)PBt0R{M{j3+5%_5#>-RmOe)<@wtUl_c30k?-gL&e$~BCdWOf zH;XSoyIcF+P`fjFcTugEJsEZD%9CLM6&e5l04e+ckn9m_##tZA00000NkvXXu0mjf DZqKfn diff --git a/tests/integration/nano/snapshots/nanosp/test_too_complex_transaction/00006.png b/tests/integration/nano/snapshots/nanosp/test_too_complex_transaction/00006.png index ac060763048ca5de77be02f164bd8027df762e75..7ef47f863399b9958ae0850107d58d5baff49048 100644 GIT binary patch delta 683 zcmV;c0#yCl1>gmcBmt+9B_V&(m?%O9gvE1TS2FMSn_iYu*1bK!Ng`~>*1a`{^z+2e zZ;9a`Y7D>9Xxq}D0o6`f3!ORI(u}E%>VdYXPN)HGk)GG7KAE>4da-}>ODXEW)y5V~ zYmrV^d->-QTaD_3&8Xw~7U;ZIJ{fRi?W-J(9J5JQ6MG`wV zc>n+a0Q7j(KlB0JK3h7PtQi)o2&o@L?5zN#o?%7KBnQ8DtFm&OONVA5|OTA>L zcI&sJ1U<-tlGU=7+n|40BsS?sb>1DQFEK7ssK!?)wYO9@wu+@d=Gdn)nv|oSd44!2 z9Y?OAm%dpfV^kZ}o@JrDl;=Cgezf<|V0>4f3{b_=2=tkuK0Jn;tfQvUDcY!7H<+ab z4M{q4qhF)FW#$fw1e>&=v#ao`x+`lH&OMpc@l=ac zppd;E@GS^z1`_}PILJ$F4HgpY;jU^4zPzOh6@EyUA#Ze@OSRFu5kK0G!w;gtO&VEH%IeS*T35e{BRs_?k+;s0V^D*M-?(`W*sM>< z^_Z$kJxB7=C*YtuNGakUq?4Sh>=^`e3sS2$)?%?P&#}Im^6ZDCj%mE4re^HDO1xao zA|qiRvI(38TF_wz%Fr9Z+6Mpt0000000000000000018V000000002U;13^%Bdl=# Rywv~z002ovPDHLkV1oRNMEw8& delta 657 zcmV;C0&e}_1=bJ+D)JGH*ZhW`FCKQq+d4g)Nv? zBAu}E^3Nrf8r2EwQOENw(0;9aX26lLug=PqHF{{Nk;WSufz5*-_CtSa-D)&+%+i;i z2!_q7XTtjUYYE!c2TlX+Y(800cGaCd;7aR*mWR+4xs|gtiCR*#ZY`Fv<3!yplGwS( z0{{R3pvSBJp&N9&wsbU^Gc0BiQa^~;TLDNt!-||q4u0)cX5~1S4$VZ!IhwMPddp7j z*0ZAoJ;;QT<+7IBpjm$;Ht9!o-fgHaF)os*#z!c%w^TMZilsp2*rzf&DMvl?`Qe;& z9Jz+x`eu~P7 zkfbx$`Zd~HdhVb|ut^I#3mbsbb3Ma3{~|WwqKI!y*ZB0mahrc#cV&&jxt&>UPc=ye z3fb!cUxL79&;bB|gS=!>FpFS2yDB6EJw&pLuDsE8F4acsUHoVxzglO~v9xDVoSMLq zLl(8O%Z)G+^IU6mpH41aMAft$XkWO;0vZo#NB}h%(Scyf3HrJGAKPt6N<2f-kW8YQc>2eB5v-Kg1 rz*(RL9VVKF-V4S)ld%FA7eEGo@n9pYG$I4g0DDIL6aN1s{xXM17Ba?h$gm`;IwdsV z1%rwE^8o+=000000000000000fFb-$lazCo=akYkxwQ_fq%S7tT&}^*ZiARFefAD0 zqc7*2QWAs9=dwk$%M3DMJ*wHf01Q{hN#11dWtA9MFlv;i~UhCyl{!+ef zDRU})G~YR5gg(PAjWXS>e7z5|cfd{dbmAQzwg3nIWyU-}wq3c!IiN;P?W?yDGlgEg zcXmtvPgcqfPK(9cvU&maO;@vj9GSuXlpS!;RP{kNJRR0xCCbUV6rpl} z`4!roB!a_tD1X~sC2pGPqm%G?qL{_FdcdljVP0^IQiN%?IoPR@IgL)Ymfq4WQah_> zt}A*UD`v}XN>;6jX^3x~X=eY2m?&!2$o#@tsa(tZ5~u!WZL0>S%5b&sOwkf&b-u+z}3{im4t>8%_MRF%@tY%olp+K=XI7*+?Ed}5WzqNs3*QCmRkoG+xo zJO~8SpAP^40000000000000000NldQFiAP*(oQK2liTVrOZsGT&h;8x9Cj1qrH|eL zb@b(&Q%c3)x?T5}{_=+M!gf|YKu!rtKW}ZA-vKgeOo(k>D1VQool@%gaeHi+)A-By zx~I&p^t<^RBc^c9utT$?yN$2cVe}5T$eK>P!owC|!@tbP17z8io16n$%Bg+yHX>8# z(R=4<>EC3g>;SEICi^RlRMPH%Ws}tlXm7ff_2Wne`%`wnMpxAb+3<8&gP9m7+fszd z0rD&Kbdm^8Uw@%&ca*qkW{ge3`-x%{_tgVtYmiFr-LL^jN8J&R549sw^QP;ja0x{Fkk4E1I^#TvQ9sE%3ZC7IvLy7qu%3R|N2`Y zbq95b9zo`HyD=NlBc5g>#r<20`0^M$YOmyc4yfx^?QKI(Nf=)t%FSdhlL-$!=uRvgF-QuO72p zWycB`;W^JW_b;1b<^0v<#+`oKC8w_Ecw7zgiVv>czQMox(h})uXP>LZoqc-z&OBxJ z2Ajya3M>EIov|wLXK0+z)0<(9cc$6=Fk^Za`u|7uwA`zAxZE;b>Ls5w=Y7rHy()0F zzwbQWE6!yn1P%85YMs3$^QQ6d$(^U(no0GlM@|c@UuE>n_*bHb_s`-l5j#&l^?o&3 z^ZU)P%^kbeZ{M$A?eOlp+3Q{5TaUiv4@#J?Wy{Gg&u;W4_5Cj4QeNxaU2m@)nKJ#% zx_`%m=kBWcVODUBamVH4Ql`CZ_3L&q-pRWWAF!ocq2Gm_d*PyN{`|RyDn(OjK1<*7 zy<@uMZ_NKoMLQ?x>69!!5qM@6$K<%}72Hui`bVn%WbfT9UCtgNJ2Nqb{f5ik>KmKq zXPGIcrPys^)+zt~w#Yj#+IZd!>t_t*{rT;^`(qhy>FVdQ&MBb@0Px1pA^-pY delta 445 zcmV;u0Yd)P1J?tPB!8YsL_t(|obA|cl7k=&fML7Sn{fXld6)gsStiYgvJjMZ-se|K zHN>D&cx)5w`!2thQU*hfL|EL9ZBpgymQuA+%GXriE$q`CH0gq6_qB^xcl9>6$H*r@ z9;^qJIo)qg#F3uj+Ka}ACT+y&ARSceR0Nv9I$tlo`ln%0~z*oblr)%g`GCtep_P7Q)XBHi}Hoad!fv5`S0S04|sI3W|0SWJ}a|5Gp!%^VS(Dk)!0h|Dj#PT|?T>?Th=AM*E%Cy?pquH1*oc3vcUI%>fU1@mG6%pW>R!W|`T zWzD!_u9ySdJ-!t-{#NiYbATN%xlP}`9*+J^-Zcl{W;XZl1>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>zF1DKvB2Tov{BUv6p^i%1|K$#1f7@_k6Vu z7A-r>U4)HJ&kvttsO2tiM`Y{FI^h_q4$@wfYrt@~fVZiW>c5ll14dsxeqSC+ zgw;dccjmdB?tf5|gAE3Q{IDFTi|71`>VDj7qsc|s*nNk3%*ocE&i;Yr=+dQ8VpES) zYDGx2w`*s;TAo@4AKn$}+{)e^~ ys;>{rpS?DdH`-eR000000000000000EcgY@OI)4~jL3`t0000 diff --git a/tests/integration/nano/snapshots/nanosp/test_too_large/00001.png b/tests/integration/nano/snapshots/nanosp/test_too_large/00001.png index 35abc6eefa0a2bd7e1a19fc8cefec7dd15b10fa0..184e20ac9663c78aa55d75a0c5e954ed57779967 100644 GIT binary patch delta 437 zcmV;m0ZRV!1M>rrNPiNd&^97MUfTrwzRRyErOv8)YFONlEmG-gHY95)rN?C7P3+qq zH0gq6^SOzmxqO@3W8?^s2de`l6~9}jYE*uer$lkKWgxdD3qMA{yzFm(_p;5Jo53iI zD8gLmX5Y4}8nyA%#MwaIWSblT!?RzwNE?<8TC+=b-tq?hP0GF zN4J$5Tt1~fm~x*jHH)b0`gjD{0dl>zS=T+Qt)Bi$3hZ5_C*k4aKvsL&yY56?!%mxS zyES#nQ)XxX-&37>`|xextOIbR*WCg18o25PaJk+`P_%gq6CJRWi(13JKRH{DKm;x1O$B8`Hau~#;64sgR=VZZMn|DUiw zT^8i(bAZi-d;-)jg9}HN_a6(LvD8BqjqceCnzw<&)-DhL00000000000000000000 f0000006g6rrNPjX!p>0&s%xjxq-*@?EN~yD}o*owWW1Cd^nhnWXO6f7#cN6=z z2Ti(QIeZ@C7%t!D_89pD$b;1Zl8WE$Qw=Krl&3^-wq+oXB^y7UfO*;9{_bU)H8+D% z7*T||(apXcR}E_8sfn|Jy2&>A1Psr9;UaBV_Q?KVqIA21Mt{$fOv|X3s_gR}eKBOD z{5iU<+~D#l^}&?qY^ha5UDwAe$UY#~Yg={Qv)cOU@1(%qReBK~{v60|PiNO%sB73| z(;c^_PkGAh?EiaeQfuaTHBKFXE4}Uxpx3~v8^GmyUqR94fozEy3tdI$ZeDp&)3f`P zYL9|+M``}SHh-8~I@-_mHT`M*T&QoOp56ANF$%0)MHkw?#jl{7=|Zf*S7pwV47u`nMW2u)a8r`-RG;a@w-7X;j00000000000000000000 f000000C==tU%+SAmlRvA00000NkvXXu0mjfi#OF) diff --git a/tests/integration/nano/snapshots/nanosp/test_too_large/00002.png b/tests/integration/nano/snapshots/nanosp/test_too_large/00002.png index 0ae3f8bd32070ca58bf1e71f357b768f64a2c8af..551255b148faa8786f2789e7ed57e18fcddafe45 100644 GIT binary patch delta 457 zcmV;)0XF{P1LFgbB!8+&L_t(|obB0Ba)clZfMMI|O}PJ&xJw^)%Fqx3E(xyA|2?&e zp(P3uj{^Vz00000000000EGC83!QVWe@!WsgYC~Vp?WRn>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>zF1DKvB2Tov{BUv6p^i%1|K$#1f7@_k6Vu z7A-r>U4)HJ&kvttsO2tiM`Y{FI^h_q4$@wfYrt@~fVZiW>c5ll14dsxeqSC+ zgw;dccjmdB?tf5|gAE3Q{IDFTi|71`>VDj7qsc|s*nNk3%*ocE&i;Yr=+dQ8VpES) zYDGx2w`*s;TAo@4AKn$}+{)e^~ ys;>{rpS?DdH`-eR000000000000000EcgY@OI)4~jL3`t0000 From 3429279f9b9173db527e8ef17cf43e327e983aab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 9 Jan 2024 13:26:15 +0100 Subject: [PATCH 11/78] Parser: move each parser_step action to its own function --- app/src/parser/operation_parser.c | 1403 ++++++++++++++++------------- 1 file changed, 796 insertions(+), 607 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 22a82fa63..a2d2e9e0c 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -47,6 +47,10 @@ const char *const tz_operation_parser_step_name[] = {"MAGIC", "READ_SORU_KIND", "READ_BALLOT", "READ_PROTOS"}; + +#define STRING_STEP(step) \ + (const char *)PIC(tz_operation_parser_step_name[step]) + #endif // clang-format off @@ -334,681 +338,866 @@ tz_print_string(tz_parser_state *state) tz_continue; } -tz_parser_result -tz_operation_parser_step(tz_parser_state *state) +#define ASSERT_STEP(state, expected_step) \ + do { \ + tz_operation_parser_step_kind step = (state)->operation.frame->step; \ + if (step != TZ_OPERATION_STEP_##expected_step) { \ + PRINTF("[DEBUG] expected step %s but got step %s)\n", \ + STRING_STEP(TZ_OPERATION_STEP_##expected_step), \ + STRING_STEP(step)); \ + tz_raise(INVALID_STATE); \ + } \ + } while (0) + +/* Update the state in order to read an operation or a micheline expression + * based on a magic byte */ +static tz_parser_result +tz_step_magic(tz_parser_state *state) { - tz_operation_state *op = &state->operation; - tz_parser_regs *regs = &state->regs; + ASSERT_STEP(state, MAGIC); + tz_operation_state *op = &state->operation; + uint8_t b; + tz_must(tz_parser_read(state, &b)); + switch (b) { + case 3: // manager/anonymous operation + STRLCPY(state->field_info.field_name, "Branch"); + op->stack[0].step = TZ_OPERATION_STEP_BRANCH; + push_frame(state, + TZ_OPERATION_STEP_READ_BYTES); // ignore result, + // assume success + op->frame->step_read_bytes.kind = TZ_OPERATION_FIELD_BH; + op->frame->step_read_bytes.skip = true; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 32; + break; + case 5: // micheline expression + op->frame->step = TZ_OPERATION_STEP_READ_MICHELINE; + op->frame->step_read_micheline.inited = 0; + op->frame->step_read_micheline.skip = false; + op->frame->step_read_micheline.name = (char *)PIC(expression_name); + op->frame->stop = 0; + break; + default: + tz_raise(INVALID_TAG); + } + tz_continue; +} - // cannot restart after error - if (TZ_IS_ERR(state->errno)) - tz_reraise; +/* Read a 4-byte size */ +static tz_parser_result +tz_step_size(tz_parser_state *state) +{ + ASSERT_STEP(state, SIZE); + tz_operation_state *op = &state->operation; + uint8_t b; + tz_must(tz_parser_read(state, &b)); + if (op->frame->step_size.size > 255) + tz_raise(TOO_LARGE); // enforce 16-bit restriction + op->frame->step_size.size = op->frame->step_size.size << 8 | b; + op->frame->step_size.size_len--; + if (op->frame->step_size.size_len <= 0) { + op->frame[-1].stop = state->ofs + op->frame->step_size.size; + tz_must(pop_frame(state)); + } + tz_continue; +} - // nothing else to do - if (op->frame == NULL) - tz_stop(DONE); +/* Update the state in order to read an operation based on a tag byte */ +static tz_parser_result +tz_step_tag(tz_parser_state *state) +{ + ASSERT_STEP(state, TAG); + tz_operation_state *op = &state->operation; + const tz_operation_descriptor *d; + uint8_t t; + tz_must(tz_parser_read(state, &t)); +#ifdef HAVE_SWAP + op->last_tag = t; + if (t == TZ_OPERATION_TAG_REVEAL) + op->nb_reveal++; +#endif // HAVE_SWAP + for (d = tz_operation_descriptors; d->tag != TZ_OPERATION_TAG_END; d++) { + if (d->tag == t) { + op->frame->step = TZ_OPERATION_STEP_OPERATION; + op->frame->step_operation.descriptor = d; + op->frame->step_operation.field = 0; + tz_must(push_frame(state, TZ_OPERATION_STEP_PRINT)); + snprintf(state->field_info.field_name, 30, "Operation (%d)", + op->batch_index); + op->frame->step_print.str = d->name; + tz_continue; + } + } + tz_raise(INVALID_TAG); +} - PRINTF( - "[DEBUG] operation(frame: %d, offset:%d/%d, ilen: %d, olen: %d, " - "step: %s, errno: %s)\n", - (int)(op->frame - op->stack), (int)state->ofs, (int)op->stack[0].stop, - (int)regs->ilen, (int)regs->oofs, - (const char *)PIC(tz_operation_parser_step_name[op->frame->step]), - tz_parser_result_name(state->errno)); +/* Read a micheline expression */ +static tz_parser_result +tz_step_read_micheline(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_MICHELINE); + tz_operation_state *op = &state->operation; + tz_parser_regs *regs = &state->regs; + if (!op->frame->step_read_micheline.inited) { + op->frame->step_read_micheline.inited = 1; + STRLCPY(state->field_info.field_name, + op->frame->step_read_micheline.name); + tz_micheline_parser_init(state); + } + tz_micheline_parser_step(state); + if (state->errno == TZ_BLO_DONE) { + if (op->frame->stop != 0 && state->ofs != op->frame->stop) + tz_raise(TOO_LARGE); + tz_must(pop_frame(state)); + if (regs->oofs > 0) + tz_stop(IM_FULL); + else + tz_continue; + } + tz_reraise; +} - switch (op->frame->step) { - case TZ_OPERATION_STEP_MAGIC: { - uint8_t b; - tz_must(tz_parser_read(state, &b)); - switch (b) { - case 3: // manager/anonymous operation - STRLCPY(state->field_info.field_name, "Branch"); - op->stack[0].step = TZ_OPERATION_STEP_BRANCH; - push_frame(state, - TZ_OPERATION_STEP_READ_BYTES); // ignore result, - // assume success - op->frame->step_read_bytes.kind = TZ_OPERATION_FIELD_BH; - op->frame->step_read_bytes.skip = true; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 32; +/* Read a number */ +static tz_parser_result +tz_step_read_num(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_NUM); + tz_operation_state *op = &state->operation; + uint8_t b; + tz_must(tz_parser_read(state, &b)); + tz_must(tz_parse_num_step(&state->buffers.num, + &op->frame->step_read_num.state, b, + op->frame->step_read_num.natural)); + if (op->frame->step_read_num.state.stop) { +#ifdef HAVE_SWAP + uint64_t value; + if (!tz_string_to_mutez(state->buffers.num.decimal, &value)) + tz_raise(INVALID_DATA); + switch (op->frame->step_read_num.kind) { + case TZ_OPERATION_FIELD_AMOUNT: + op->last_amount = value; break; - case 5: // micheline expression - op->frame->step = TZ_OPERATION_STEP_READ_MICHELINE; - op->frame->step_read_micheline.inited = 0; - op->frame->step_read_micheline.skip = false; - op->frame->step_read_micheline.name - = (char *)PIC(expression_name); - op->frame->stop = 0; + case TZ_OPERATION_FIELD_FEE: + op->last_fee = value; break; default: - tz_raise(INVALID_TAG); - } - break; - } - case TZ_OPERATION_STEP_SIZE: { - uint8_t b; - tz_must(tz_parser_read(state, &b)); - if (op->frame->step_size.size > 255) - tz_raise(TOO_LARGE); // enforce 16-bit restriction - op->frame->step_size.size = op->frame->step_size.size << 8 | b; - op->frame->step_size.size_len--; - if (op->frame->step_size.size_len <= 0) { - op->frame[-1].stop = state->ofs + op->frame->step_size.size; - tz_must(pop_frame(state)); + break; } - break; - } - case TZ_OPERATION_STEP_TAG: { - const tz_operation_descriptor *d; - uint8_t t; - tz_must(tz_parser_read(state, &t)); -#ifdef HAVE_SWAP - op->last_tag = t; - if (t == TZ_OPERATION_TAG_REVEAL) - op->nb_reveal++; #endif // HAVE_SWAP - for (d = tz_operation_descriptors; d->tag != TZ_OPERATION_TAG_END; - d++) { - if (d->tag == t) { - op->frame->step = TZ_OPERATION_STEP_OPERATION; - op->frame->step_operation.descriptor = d; - op->frame->step_operation.field = 0; - tz_must(push_frame(state, TZ_OPERATION_STEP_PRINT)); - snprintf(state->field_info.field_name, 30, "Operation (%d)", - op->batch_index); - op->frame->step_print.str = d->name; - tz_continue; - } - } - tz_raise(INVALID_TAG); - } - case TZ_OPERATION_STEP_READ_MICHELINE: { - if (!op->frame->step_read_micheline.inited) { - op->frame->step_read_micheline.inited = 1; - STRLCPY(state->field_info.field_name, - op->frame->step_read_micheline.name); - tz_micheline_parser_init(state); - } - tz_micheline_parser_step(state); - if (state->errno == TZ_BLO_DONE) { - if (op->frame->stop != 0 && state->ofs != op->frame->stop) - tz_raise(TOO_LARGE); + if (op->frame->step_read_num.skip) { tz_must(pop_frame(state)); - if (regs->oofs > 0) - tz_stop(IM_FULL); - else - tz_continue; + tz_continue; } - tz_reraise; - } - case TZ_OPERATION_STEP_READ_NUM: { - uint8_t b; - tz_must(tz_parser_read(state, &b)); - tz_must(tz_parse_num_step(&state->buffers.num, - &op->frame->step_read_num.state, b, - op->frame->step_read_num.natural)); - if (op->frame->step_read_num.state.stop) { -#ifdef HAVE_SWAP - uint64_t value; - if (!tz_string_to_mutez(state->buffers.num.decimal, &value)) - tz_raise(INVALID_DATA); - switch (op->frame->step_read_num.kind) { - case TZ_OPERATION_FIELD_AMOUNT: - op->last_amount = value; - break; - case TZ_OPERATION_FIELD_FEE: - op->last_fee = value; - break; - default: - break; - } -#endif // HAVE_SWAP - if (op->frame->step_read_num.skip) { - tz_must(pop_frame(state)); - tz_continue; + char *str = state->buffers.num.decimal; + op->frame->step = TZ_OPERATION_STEP_PRINT; + switch (op->frame->step_read_num.kind) { + case TZ_OPERATION_FIELD_INT: + case TZ_OPERATION_FIELD_NAT: + break; + case TZ_OPERATION_FIELD_FEE: + case TZ_OPERATION_FIELD_AMOUNT: { + int len = 0; + while (str[len]) + len++; + if (len == 1 && str[0] == 0) + // just 0 + goto add_currency; + if (len < 7) { + // less than one tez, pad left up to the '0.' + int j; + int pad = 7 - len; + for (j = len; j >= 0; j--) + str[j + pad] = str[j]; + for (j = 0; j < pad; j++) + str[j] = '0'; + len = 7; } - char *str = state->buffers.num.decimal; - op->frame->step = TZ_OPERATION_STEP_PRINT; - switch (op->frame->step_read_num.kind) { - case TZ_OPERATION_FIELD_INT: - case TZ_OPERATION_FIELD_NAT: - break; - case TZ_OPERATION_FIELD_FEE: - case TZ_OPERATION_FIELD_AMOUNT: { - int len = 0; - while (str[len]) - len++; - if (len == 1 && str[0] == 0) - // just 0 - goto add_currency; - if (len < 7) { - // less than one tez, pad left up to the '0.' - int j; - int pad = 7 - len; - for (j = len; j >= 0; j--) - str[j + pad] = str[j]; - for (j = 0; j < pad; j++) - str[j] = '0'; - len = 7; - } - int no_decimals = 1; + int no_decimals = 1; + for (int i = 0; i < 6; i++) + no_decimals &= (str[len - 1 - i] == '0'); + if (no_decimals) { + // integral value, don't include the decimal part (no '.'_ + str[len - 6] = 0; + len -= 6; + } else { + // more than one tez, add the '.' for (int i = 0; i < 6; i++) - no_decimals &= (str[len - 1 - i] == '0'); - if (no_decimals) { - // integral value, don't include the decimal part (no '.'_ - str[len - 6] = 0; - len -= 6; - } else { - // more than one tez, add the '.' - for (int i = 0; i < 6; i++) - str[len - i] = str[len - i - 1]; - str[len - 6] = '.'; - len++; + str[len - i] = str[len - i - 1]; + str[len - 6] = '.'; + len++; + str[len] = 0; + // drop trailing non significant zeroes + while (str[len - 1] == '0') { + len--; str[len] = 0; - // drop trailing non significant zeroes - while (str[len - 1] == '0') { - len--; - str[len] = 0; - } } - add_currency: - str[len] = ' '; - str[len + 1] = 'X'; - str[len + 2] = 'T'; - str[len + 3] = 'Z'; - len += 4; - str[len] = 0; - break; - } - default: - tz_raise(INVALID_STATE); } - op->frame->step_print.str = str; + add_currency: + str[len] = ' '; + str[len + 1] = 'X'; + str[len + 2] = 'T'; + str[len + 3] = 'Z'; + len += 4; + str[len] = 0; + break; } - break; - } - case TZ_OPERATION_STEP_READ_INT32: { - uint8_t b; - uint32_t *value = &op->frame->step_read_int32.value; - if (op->frame->step_read_int32.ofs < 4) { - tz_must(tz_parser_read(state, &b)); - *value = *value << 8 | b; - op->frame->step_read_int32.ofs++; - } else { - snprintf((char *)CAPTURE, sizeof(CAPTURE), "%d", *value); - op->frame->step_read_string.skip - = op->frame->step_read_int32.skip; - tz_must(tz_print_string(state)); + default: + tz_raise(INVALID_STATE); } - break; + op->frame->step_print.str = str; } - case TZ_OPERATION_STEP_READ_BYTES: { - if (op->frame->step_read_bytes.ofs < op->frame->step_read_bytes.len) { - uint8_t *c; - c = &CAPTURE[op->frame->step_read_bytes.ofs]; - tz_must(tz_parser_read(state, c)); - op->frame->step_read_bytes.ofs++; - } else { - if (op->frame->step_read_num.skip) { - tz_must(pop_frame(state)); - tz_continue; - } - switch (op->frame->step_read_bytes.kind) { - case TZ_OPERATION_FIELD_SOURCE: - memcpy(op->source, CAPTURE, 22); - __attribute__((fallthrough)); - case TZ_OPERATION_FIELD_PKH: - if (tz_format_pkh(CAPTURE, 21, (char *)CAPTURE, - sizeof(CAPTURE))) - tz_raise(INVALID_TAG); - break; - case TZ_OPERATION_FIELD_PK: - if (tz_format_pk(CAPTURE, op->frame->step_read_bytes.len, - (char *)CAPTURE, sizeof(CAPTURE))) - tz_raise(INVALID_TAG); - break; - case TZ_OPERATION_FIELD_SR: - if (tz_format_base58check("sr1", CAPTURE, 20, (char *)CAPTURE, - sizeof(CAPTURE))) - tz_raise(INVALID_TAG); - break; - case TZ_OPERATION_FIELD_SRC: - if (tz_format_base58check("src1", CAPTURE, 32, - (char *)CAPTURE, sizeof(CAPTURE))) - tz_raise(INVALID_TAG); - break; - case TZ_OPERATION_FIELD_PROTO: - if (tz_format_base58check("proto", CAPTURE, 32, - (char *)CAPTURE, sizeof(CAPTURE))) - tz_raise(INVALID_TAG); - break; - case TZ_OPERATION_FIELD_DESTINATION: - memcpy(op->destination, CAPTURE, 22); - if (tz_format_address(CAPTURE, 22, (char *)CAPTURE, + tz_continue; +} + +/* Read an int32 */ +static tz_parser_result +tz_step_read_int32(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_INT32); + tz_operation_state *op = &state->operation; + uint8_t b; + uint32_t *value = &op->frame->step_read_int32.value; + if (op->frame->step_read_int32.ofs < 4) { + tz_must(tz_parser_read(state, &b)); + *value = *value << 8 | b; + op->frame->step_read_int32.ofs++; + } else { + snprintf((char *)CAPTURE, sizeof(CAPTURE), "%d", *value); + op->frame->step_read_string.skip = op->frame->step_read_int32.skip; + tz_must(tz_print_string(state)); + } + tz_continue; +} + +/* Read bytes */ +static tz_parser_result +tz_step_read_bytes(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_BYTES); + tz_operation_state *op = &state->operation; + if (op->frame->step_read_bytes.ofs < op->frame->step_read_bytes.len) { + uint8_t *c; + c = &CAPTURE[op->frame->step_read_bytes.ofs]; + tz_must(tz_parser_read(state, c)); + op->frame->step_read_bytes.ofs++; + } else { + if (op->frame->step_read_num.skip) { + tz_must(pop_frame(state)); + tz_continue; + } + switch (op->frame->step_read_bytes.kind) { + case TZ_OPERATION_FIELD_SOURCE: + memcpy(op->source, CAPTURE, 22); + __attribute__((fallthrough)); + case TZ_OPERATION_FIELD_PKH: + if (tz_format_pkh(CAPTURE, 21, (char *)CAPTURE, sizeof(CAPTURE))) + tz_raise(INVALID_TAG); + break; + case TZ_OPERATION_FIELD_PK: + if (tz_format_pk(CAPTURE, op->frame->step_read_bytes.len, + (char *)CAPTURE, sizeof(CAPTURE))) + tz_raise(INVALID_TAG); + break; + case TZ_OPERATION_FIELD_SR: + if (tz_format_base58check("sr1", CAPTURE, 20, (char *)CAPTURE, + sizeof(CAPTURE))) + tz_raise(INVALID_TAG); + break; + case TZ_OPERATION_FIELD_SRC: + if (tz_format_base58check("src1", CAPTURE, 32, (char *)CAPTURE, sizeof(CAPTURE))) - tz_raise(INVALID_TAG); - break; - case TZ_OPERATION_FIELD_OPH: - if (tz_format_oph(CAPTURE, 32, (char *)CAPTURE, + tz_raise(INVALID_TAG); + break; + case TZ_OPERATION_FIELD_PROTO: + if (tz_format_base58check("proto", CAPTURE, 32, (char *)CAPTURE, + sizeof(CAPTURE))) + tz_raise(INVALID_TAG); + break; + case TZ_OPERATION_FIELD_DESTINATION: + memcpy(op->destination, CAPTURE, 22); + if (tz_format_address(CAPTURE, 22, (char *)CAPTURE, sizeof(CAPTURE))) - tz_raise(INVALID_TAG); - break; - case TZ_OPERATION_FIELD_BH: - if (tz_format_bh(CAPTURE, 32, (char *)CAPTURE, - sizeof(CAPTURE))) - tz_raise(INVALID_TAG); - break; - default: - tz_raise(INVALID_STATE); - } - op->frame->step = TZ_OPERATION_STEP_PRINT; - op->frame->step_print.str = (char *)CAPTURE; + tz_raise(INVALID_TAG); + break; + case TZ_OPERATION_FIELD_OPH: + if (tz_format_oph(CAPTURE, 32, (char *)CAPTURE, sizeof(CAPTURE))) + tz_raise(INVALID_TAG); + break; + case TZ_OPERATION_FIELD_BH: + if (tz_format_bh(CAPTURE, 32, (char *)CAPTURE, sizeof(CAPTURE))) + tz_raise(INVALID_TAG); + break; + default: + tz_raise(INVALID_STATE); } - break; + op->frame->step = TZ_OPERATION_STEP_PRINT; + op->frame->step_print.str = (char *)CAPTURE; } - case TZ_OPERATION_STEP_BRANCH: { - op->frame->step = TZ_OPERATION_STEP_BATCH; + tz_continue; +} + +/* Update the state in order to read a batch of operations */ +static tz_parser_result +tz_step_branch(tz_parser_state *state) +{ + ASSERT_STEP(state, BRANCH); + tz_operation_state *op = &state->operation; + op->frame->step = TZ_OPERATION_STEP_BATCH; + tz_must(push_frame(state, TZ_OPERATION_STEP_TAG)); + tz_continue; +} + +/* Update the state in order to read the next operation in a batch of + * operations + */ +static tz_parser_result +tz_step_batch(tz_parser_state *state) +{ + ASSERT_STEP(state, BATCH); + tz_operation_state *op = &state->operation; + op->batch_index++; + if (state->ofs == op->frame->stop) { + tz_must(pop_frame(state)); + } else if (state->ofs > op->frame->stop) { + tz_raise(TOO_LARGE); + } else { tz_must(push_frame(state, TZ_OPERATION_STEP_TAG)); - break; } - case TZ_OPERATION_STEP_BATCH: { - op->batch_index++; - if (state->ofs == op->frame->stop) { - tz_must(pop_frame(state)); - } else if (state->ofs > op->frame->stop) { - tz_raise(TOO_LARGE); - } else { - tz_must(push_frame(state, TZ_OPERATION_STEP_TAG)); - } - break; + tz_continue; +} + +/* Read a string */ +static tz_parser_result +tz_step_read_string(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_STRING); + tz_operation_state *op = &state->operation; + if (state->ofs == op->frame->stop) { + CAPTURE[op->frame->step_read_string.ofs] = 0; + tz_must(tz_print_string(state)); + } else { + uint8_t b; + tz_must(tz_parser_read(state, &b)); + CAPTURE[op->frame->step_read_string.ofs] = b; + op->frame->step_read_string.ofs++; } - case TZ_OPERATION_STEP_READ_STRING: { - if (state->ofs == op->frame->stop) { - CAPTURE[op->frame->step_read_string.ofs] = 0; - tz_must(tz_print_string(state)); - } else { - uint8_t b; - tz_must(tz_parser_read(state, &b)); - CAPTURE[op->frame->step_read_string.ofs] = b; - op->frame->step_read_string.ofs++; + tz_continue; +} + +/* Read a binary */ +static tz_parser_result +tz_step_read_binary(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_BINARY); + tz_operation_state *op = &state->operation; + if (state->ofs == op->frame->stop) { + CAPTURE[op->frame->step_read_string.ofs] = 0; + tz_must(tz_print_string(state)); + } else if (op->frame->step_read_string.ofs + 2 + >= TZ_CAPTURE_BUFFER_SIZE) { + CAPTURE[op->frame->step_read_string.ofs] = 0; + op->frame->step_read_string.ofs = 0; + if (!op->frame->step_read_string.skip) { + tz_must(push_frame(state, TZ_OPERATION_STEP_PARTIAL_PRINT)); + op->frame->step_print.str = (char *)CAPTURE; } + } else { + uint8_t b; + tz_must(tz_parser_read(state, &b)); + char *buf = (char *)CAPTURE + op->frame->step_read_string.ofs; + snprintf(buf, 4, "%02x", b); + op->frame->step_read_string.ofs += 2; + } + tz_continue; +} + +/* Read an entrypoint */ +static tz_parser_result +tz_step_read_smart_entrypoint(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_SMART_ENTRYPOINT); + tz_operation_state *op = &state->operation; + uint8_t b; + tz_must(tz_parser_read(state, &b)); + switch (b) { + case 0: + strlcpy((char *)CAPTURE, "default", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; + case 1: + strlcpy((char *)CAPTURE, "root", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); break; + case 2: + strlcpy((char *)CAPTURE, "do", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; + case 3: + strlcpy((char *)CAPTURE, "set_delegate", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; + case 4: + strlcpy((char *)CAPTURE, "remove_delegate", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; + case 5: + strlcpy((char *)CAPTURE, "deposit", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; + case 0xFF: + op->frame->step = TZ_OPERATION_STEP_READ_STRING; + op->frame->step_read_string.ofs = 0; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 1; + break; + default: + tz_raise(INVALID_TAG); } - case TZ_OPERATION_STEP_READ_BINARY: { - if (state->ofs == op->frame->stop) { - CAPTURE[op->frame->step_read_string.ofs] = 0; - tz_must(tz_print_string(state)); - } else if (op->frame->step_read_string.ofs + 2 - >= TZ_CAPTURE_BUFFER_SIZE) { - CAPTURE[op->frame->step_read_string.ofs] = 0; - op->frame->step_read_string.ofs = 0; - if (!op->frame->step_read_string.skip) { - tz_must(push_frame(state, TZ_OPERATION_STEP_PARTIAL_PRINT)); - op->frame->step_print.str = (char *)CAPTURE; + tz_continue; +} + +/* Update the state in order to read fields of an operation */ +static tz_parser_result +tz_step_operation(tz_parser_state *state) +{ + ASSERT_STEP(state, OPERATION); + tz_operation_state *op = &state->operation; + tz_parser_regs *regs = &state->regs; + const tz_operation_descriptor *d = op->frame->step_operation.descriptor; + const tz_operation_field_descriptor *field + = PIC(&d->fields[op->frame->step_operation.field]); + const char *name = PIC(field->name); + + // Remaining content from previous section - display this first. + if (regs->oofs > 0) + tz_stop(IM_FULL); + + if (name == NULL) { + state->field_info.is_field_complex = false; + tz_must(pop_frame(state)); + } else { + uint8_t present = 1; + if (!field->required) + tz_must(tz_parser_read(state, &present)); + if (!field->skip) { + STRLCPY(state->field_info.field_name, name); + state->field_info.is_field_complex = field->complex; + state->field_info.field_index++; + } + op->frame->step_operation.field++; + if (!present) { + if (field->display_none) { + if (field->skip) + tz_raise(INVALID_STATE); + tz_must(push_frame(state, TZ_OPERATION_STEP_PRINT)); + op->frame->step_print.str = (char *)unset_message; } - } else { - uint8_t b; - tz_must(tz_parser_read(state, &b)); - char *buf = (char *)CAPTURE + op->frame->step_read_string.ofs; - snprintf(buf, 4, "%02x", b); - op->frame->step_read_string.ofs += 2; + tz_continue; } - break; - } - case TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT: { - uint8_t b; - tz_must(tz_parser_read(state, &b)); - switch (b) { - case 0: - strlcpy((char *)CAPTURE, "default", sizeof(CAPTURE)); - tz_must(tz_print_string(state)); + switch (field->kind) { + case TZ_OPERATION_FIELD_BINARY: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BINARY)); + op->frame->step_read_string.ofs = 0; + op->frame->step_read_string.skip = field->skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; break; - case 1: - strlcpy((char *)CAPTURE, "root", sizeof(CAPTURE)); - tz_must(tz_print_string(state)); + } + case TZ_OPERATION_FIELD_SOURCE: + case TZ_OPERATION_FIELD_PKH: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 21; break; - case 2: - strlcpy((char *)CAPTURE, "do", sizeof(CAPTURE)); - tz_must(tz_print_string(state)); + } + case TZ_OPERATION_FIELD_PK: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_PK)); + op->frame->step_read_bytes.skip = field->skip; break; - case 3: - strlcpy((char *)CAPTURE, "set_delegate", sizeof(CAPTURE)); - tz_must(tz_print_string(state)); + } + case TZ_OPERATION_FIELD_SR: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 20; break; - case 4: - strlcpy((char *)CAPTURE, "remove_delegate", sizeof(CAPTURE)); - tz_must(tz_print_string(state)); + } + case TZ_OPERATION_FIELD_SRC: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 32; break; - case 5: - strlcpy((char *)CAPTURE, "deposit", sizeof(CAPTURE)); - tz_must(tz_print_string(state)); + } + case TZ_OPERATION_FIELD_PROTO: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 32; break; - case 0xFF: - op->frame->step = TZ_OPERATION_STEP_READ_STRING; - op->frame->step_read_string.ofs = 0; + } + case TZ_OPERATION_FIELD_PROTOS: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_PROTOS)); + op->frame->step_read_list.name = name; + op->frame->step_read_list.index = 0; + op->frame->step_read_list.skip = field->skip; tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); op->frame->step_size.size = 0; - op->frame->step_size.size_len = 1; + op->frame->step_size.size_len = 4; break; - default: - tz_raise(INVALID_TAG); - } - break; - } - case TZ_OPERATION_STEP_OPERATION: { - const tz_operation_descriptor *d - = op->frame->step_operation.descriptor; - const tz_operation_field_descriptor *field - = PIC(&d->fields[op->frame->step_operation.field]); - const char *name = PIC(field->name); - - // Remaining content from previous section - display this first. - if (regs->oofs > 0) - tz_stop(IM_FULL); - - if (name == NULL) { - state->field_info.is_field_complex = false; - tz_must(pop_frame(state)); - } else { - uint8_t present = 1; - if (!field->required) - tz_must(tz_parser_read(state, &present)); - if (!field->skip) { - STRLCPY(state->field_info.field_name, name); - state->field_info.is_field_complex = field->complex; - state->field_info.field_index++; - } - op->frame->step_operation.field++; - if (!present) { - if (field->display_none) { - if (field->skip) - tz_raise(INVALID_STATE); - tz_must(push_frame(state, TZ_OPERATION_STEP_PRINT)); - op->frame->step_print.str = (char *)unset_message; - } - tz_continue; - } - switch (field->kind) { - case TZ_OPERATION_FIELD_BINARY: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BINARY)); - op->frame->step_read_string.ofs = 0; - op->frame->step_read_string.skip = field->skip; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_SOURCE: - case TZ_OPERATION_FIELD_PKH: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 21; - break; - } - case TZ_OPERATION_FIELD_PK: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_PK)); - op->frame->step_read_bytes.skip = field->skip; - break; - } - case TZ_OPERATION_FIELD_SR: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 20; - break; - } - case TZ_OPERATION_FIELD_SRC: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 32; - break; - } - case TZ_OPERATION_FIELD_PROTO: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 32; - break; - } - case TZ_OPERATION_FIELD_PROTOS: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_PROTOS)); - op->frame->step_read_list.name = name; - op->frame->step_read_list.index = 0; - op->frame->step_read_list.skip = field->skip; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_DESTINATION: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 22; - break; - } - case TZ_OPERATION_FIELD_NAT: - case TZ_OPERATION_FIELD_FEE: - case TZ_OPERATION_FIELD_AMOUNT: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_NUM)); - tz_parse_num_state_init(&state->buffers.num, - &op->frame->step_read_num.state); - op->frame->step_read_num.kind = field->kind; - op->frame->step_read_num.skip = field->skip; - op->frame->step_read_num.natural = 1; - break; - } - case TZ_OPERATION_FIELD_INT: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_NUM)); - tz_parse_num_state_init(&state->buffers.num, - &op->frame->step_read_num.state); - op->frame->step_read_num.kind = field->kind; - op->frame->step_read_num.skip = field->skip; - op->frame->step_read_num.natural = 0; - break; - } - case TZ_OPERATION_FIELD_INT32: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_INT32)); - op->frame->step_read_int32.value = 0; - op->frame->step_read_int32.ofs = 0; - op->frame->step_read_int32.skip = field->skip; - break; - } - case TZ_OPERATION_FIELD_PARAMETER: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_MICHELINE)); - op->frame->step_read_micheline.inited = 0; - op->frame->step_read_micheline.skip = field->skip; - op->frame->step_read_micheline.name = name; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - tz_must(push_frame(state, - TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT)); - STRLCPY(state->field_info.field_name, "Entrypoint"); - op->frame->step_read_string.ofs = 0; - op->frame->step_read_string.skip = field->skip; - break; - } - case TZ_OPERATION_FIELD_EXPR: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_MICHELINE)); - op->frame->step_read_micheline.inited = 0; - op->frame->step_read_micheline.skip = field->skip; - op->frame->step_read_micheline.name = name; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_STRING: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_STRING)); - op->frame->step_read_string.ofs = 0; - op->frame->step_read_string.skip = field->skip; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_SORU_MESSAGES: { - tz_must( - push_frame(state, TZ_OPERATION_STEP_READ_SORU_MESSAGES)); - op->frame->step_read_list.name = name; - op->frame->step_read_list.index = 0; - op->frame->step_read_list.skip = field->skip; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_SORU_KIND: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_SORU_KIND)); - op->frame->step_read_string.skip = field->skip; - break; - } - case TZ_OPERATION_FIELD_BALLOT: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BALLOT)); - op->frame->step_read_string.skip = field->skip; - break; - } - default: - tz_raise(INVALID_STATE); - } } - break; - } - case TZ_OPERATION_STEP_READ_PK: { - uint8_t b; - tz_must(tz_parser_peek(state, &b)); - op->frame->step_read_bytes.kind = TZ_OPERATION_FIELD_PK; - op->frame->step_read_bytes.ofs = 0; - switch (b) { - case 0: // edpk - op->frame->step_read_bytes.len = 33; + case TZ_OPERATION_FIELD_DESTINATION: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 22; break; - case 1: // sppk - op->frame->step_read_bytes.len = 34; + } + case TZ_OPERATION_FIELD_NAT: + case TZ_OPERATION_FIELD_FEE: + case TZ_OPERATION_FIELD_AMOUNT: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_NUM)); + tz_parse_num_state_init(&state->buffers.num, + &op->frame->step_read_num.state); + op->frame->step_read_num.kind = field->kind; + op->frame->step_read_num.skip = field->skip; + op->frame->step_read_num.natural = 1; break; - case 2: // p2pk - op->frame->step_read_bytes.len = 34; + } + case TZ_OPERATION_FIELD_INT: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_NUM)); + tz_parse_num_state_init(&state->buffers.num, + &op->frame->step_read_num.state); + op->frame->step_read_num.kind = field->kind; + op->frame->step_read_num.skip = field->skip; + op->frame->step_read_num.natural = 0; break; - case 3: // BLpk - op->frame->step_read_bytes.len = 49; + } + case TZ_OPERATION_FIELD_INT32: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_INT32)); + op->frame->step_read_int32.value = 0; + op->frame->step_read_int32.ofs = 0; + op->frame->step_read_int32.skip = field->skip; break; - default: - tz_raise(INVALID_TAG); } - op->frame->step = TZ_OPERATION_STEP_READ_BYTES; - break; - } - case TZ_OPERATION_STEP_READ_SORU_MESSAGES: { - uint8_t skip = op->frame->step_read_list.skip; - const char *name = op->frame->step_read_list.name; - uint16_t index = op->frame->step_read_list.index; - - // Remaining content from previous message - display this first. - if (regs->oofs > 0) - tz_stop(IM_FULL); - - if (op->frame->stop == state->ofs) { - tz_must(pop_frame(state)); - } else { - op->frame->step_read_list.index++; - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BINARY)); - snprintf(state->field_info.field_name, TZ_FIELD_NAME_SIZE, - "%s (%d)", name, index); - op->frame->step_read_string.ofs = 0; - op->frame->step_read_string.skip = skip; + case TZ_OPERATION_FIELD_PARAMETER: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_MICHELINE)); + op->frame->step_read_micheline.inited = 0; + op->frame->step_read_micheline.skip = field->skip; + op->frame->step_read_micheline.name = name; tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); op->frame->step_size.size = 0; op->frame->step_size.size_len = 4; + tz_must( + push_frame(state, TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT)); + STRLCPY(state->field_info.field_name, "Entrypoint"); + op->frame->step_read_string.ofs = 0; + op->frame->step_read_string.skip = field->skip; + break; } - break; - } - case TZ_OPERATION_STEP_READ_SORU_KIND: { - uint8_t b; - tz_must(tz_parser_read(state, &b)); - switch (b) { - case 0: - strlcpy((char *)CAPTURE, "arith", sizeof(CAPTURE)); + case TZ_OPERATION_FIELD_EXPR: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_MICHELINE)); + op->frame->step_read_micheline.inited = 0; + op->frame->step_read_micheline.skip = field->skip; + op->frame->step_read_micheline.name = name; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; break; - case 1: - strlcpy((char *)CAPTURE, "wasm_2_0_0", sizeof(CAPTURE)); + } + case TZ_OPERATION_FIELD_STRING: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_STRING)); + op->frame->step_read_string.ofs = 0; + op->frame->step_read_string.skip = field->skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; break; - default: - tz_raise(INVALID_TAG); } - tz_must(tz_print_string(state)); - break; - } - case TZ_OPERATION_STEP_READ_BALLOT: { - uint8_t b; - tz_must(tz_parser_read(state, &b)); - switch (b) { - case 0: - strlcpy((char *)CAPTURE, "yay", sizeof(CAPTURE)); + case TZ_OPERATION_FIELD_SORU_MESSAGES: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_SORU_MESSAGES)); + op->frame->step_read_list.name = name; + op->frame->step_read_list.index = 0; + op->frame->step_read_list.skip = field->skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; break; - case 1: - strlcpy((char *)CAPTURE, "nay", sizeof(CAPTURE)); + } + case TZ_OPERATION_FIELD_SORU_KIND: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_SORU_KIND)); + op->frame->step_read_string.skip = field->skip; break; - case 2: - strlcpy((char *)CAPTURE, "pass", sizeof(CAPTURE)); + } + case TZ_OPERATION_FIELD_BALLOT: { + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BALLOT)); + op->frame->step_read_string.skip = field->skip; break; + } default: - tz_raise(INVALID_TAG); + tz_raise(INVALID_STATE); } - tz_must(tz_print_string(state)); + } + tz_continue; +} + +/* Read a public key */ +static tz_parser_result +tz_step_read_pk(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_PK); + tz_operation_state *op = &state->operation; + uint8_t b; + tz_must(tz_parser_peek(state, &b)); + op->frame->step_read_bytes.kind = TZ_OPERATION_FIELD_PK; + op->frame->step_read_bytes.ofs = 0; + switch (b) { + case 0: // edpk + op->frame->step_read_bytes.len = 33; + break; + case 1: // sppk + op->frame->step_read_bytes.len = 34; + break; + case 2: // p2pk + op->frame->step_read_bytes.len = 34; break; + case 3: // BLpk + op->frame->step_read_bytes.len = 49; + break; + default: + tz_raise(INVALID_TAG); } - case TZ_OPERATION_STEP_READ_PROTOS: { - uint8_t skip = op->frame->step_read_list.skip; - const char *name = op->frame->step_read_list.name; - uint16_t index = op->frame->step_read_list.index; + op->frame->step = TZ_OPERATION_STEP_READ_BYTES; + tz_continue; +} - // Remaining content from previous proto - display this first. - if (regs->oofs > 0) - tz_stop(IM_FULL); +/* Read soru messages */ +static tz_parser_result +tz_step_read_soru_messages(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_SORU_MESSAGES); + tz_operation_state *op = &state->operation; + tz_parser_regs *regs = &state->regs; + uint8_t skip = op->frame->step_read_list.skip; + const char *name = op->frame->step_read_list.name; + uint16_t index = op->frame->step_read_list.index; - if (op->frame->stop == state->ofs) { - tz_must(pop_frame(state)); - } else { - op->frame->step_read_list.index++; - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - snprintf(state->field_info.field_name, 30, "%s (%d)", name, - index); - op->frame->step_read_bytes.kind = TZ_OPERATION_FIELD_PROTO; - op->frame->step_read_bytes.skip = skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 32; - } - break; + // Remaining content from previous message - display this first. + if (regs->oofs > 0) + tz_stop(IM_FULL); + + if (op->frame->stop == state->ofs) { + tz_must(pop_frame(state)); + } else { + op->frame->step_read_list.index++; + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BINARY)); + snprintf(state->field_info.field_name, TZ_FIELD_NAME_SIZE, "%s (%d)", + name, index); + op->frame->step_read_string.ofs = 0; + op->frame->step_read_string.skip = skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; } - case TZ_OPERATION_STEP_PRINT: { - const char *str = PIC(op->frame->step_print.str); - if (*str) { - tz_must(tz_parser_put(state, *str)); - op->frame->step_print.str++; - } else { - tz_must(pop_frame(state)); - tz_stop(IM_FULL); - } + tz_continue; +} + +/* Read a soru kind */ +static tz_parser_result +tz_step_read_soru_kind(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_SORU_KIND); + uint8_t b; + tz_must(tz_parser_read(state, &b)); + switch (b) { + case 0: + strlcpy((char *)CAPTURE, "arith", sizeof(CAPTURE)); + break; + case 1: + strlcpy((char *)CAPTURE, "wasm_2_0_0", sizeof(CAPTURE)); break; + default: + tz_raise(INVALID_TAG); } - case TZ_OPERATION_STEP_PARTIAL_PRINT: { - const char *str = PIC(op->frame->step_print.str); - if (*str) { - tz_must(tz_parser_put(state, *str)); - op->frame->step_print.str++; - } else { - tz_must(pop_frame(state)); - } + tz_must(tz_print_string(state)); + tz_continue; +} + +/* Read a ballot */ +static tz_parser_result +tz_step_read_ballot(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_BALLOT); + uint8_t b; + tz_must(tz_parser_read(state, &b)); + switch (b) { + case 0: + strlcpy((char *)CAPTURE, "yay", sizeof(CAPTURE)); + break; + case 1: + strlcpy((char *)CAPTURE, "nay", sizeof(CAPTURE)); break; + case 2: + strlcpy((char *)CAPTURE, "pass", sizeof(CAPTURE)); + break; + default: + tz_raise(INVALID_TAG); } + tz_must(tz_print_string(state)); + tz_continue; +} + +/* Read protocols */ +static tz_parser_result +tz_step_read_protos(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_PROTOS); + tz_operation_state *op = &state->operation; + tz_parser_regs *regs = &state->regs; + uint8_t skip = op->frame->step_read_list.skip; + const char *name = op->frame->step_read_list.name; + uint16_t index = op->frame->step_read_list.index; + + // Remaining content from previous proto - display this first. + if (regs->oofs > 0) + tz_stop(IM_FULL); + + if (op->frame->stop == state->ofs) { + tz_must(pop_frame(state)); + } else { + op->frame->step_read_list.index++; + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); + snprintf(state->field_info.field_name, 30, "%s (%d)", name, index); + op->frame->step_read_bytes.kind = TZ_OPERATION_FIELD_PROTO; + op->frame->step_read_bytes.skip = skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 32; + } + tz_continue; +} + +/* Print a string */ +static tz_parser_result +tz_step_print(tz_parser_state *state) +{ + ASSERT_STEP(state, PRINT); + tz_operation_state *op = &state->operation; + const char *str = PIC(op->frame->step_print.str); + if (*str) { + tz_must(tz_parser_put(state, *str)); + op->frame->step_print.str++; + } else { + tz_must(pop_frame(state)); + tz_stop(IM_FULL); + } + tz_continue; +} + +/* Start printing a string */ +static tz_parser_result +tz_step_partial_print(tz_parser_state *state) +{ + ASSERT_STEP(state, PARTIAL_PRINT); + tz_operation_state *op = &state->operation; + const char *str = PIC(op->frame->step_print.str); + if (*str) { + tz_must(tz_parser_put(state, *str)); + op->frame->step_print.str++; + } else { + tz_must(pop_frame(state)); + } + tz_continue; +} + +tz_parser_result +tz_operation_parser_step(tz_parser_state *state) +{ + tz_operation_state *op = &state->operation; + + // cannot restart after error + if (TZ_IS_ERR(state->errno)) + tz_reraise; + + // nothing else to do + if (op->frame == NULL) + tz_stop(DONE); + + PRINTF( + "[DEBUG] operation(frame: %d, offset:%d/%d, ilen: %d, olen: %d, " + "step: %s, errno: %s)\n", + (int)(op->frame - op->stack), (int)state->ofs, (int)op->stack[0].stop, + (int)state->regs.ilen, (int)state->regs.oofs, + STRING_STEP(op->frame->step), tz_parser_result_name(state->errno)); + + switch (op->frame->step) { + case TZ_OPERATION_STEP_MAGIC: + tz_must(tz_step_magic(state)); + break; + case TZ_OPERATION_STEP_SIZE: + tz_must(tz_step_size(state)); + break; + case TZ_OPERATION_STEP_TAG: + tz_must(tz_step_tag(state)); + break; + case TZ_OPERATION_STEP_READ_MICHELINE: + tz_must(tz_step_read_micheline(state)); + break; + case TZ_OPERATION_STEP_READ_NUM: + tz_must(tz_step_read_num(state)); + break; + case TZ_OPERATION_STEP_READ_INT32: + tz_must(tz_step_read_int32(state)); + break; + case TZ_OPERATION_STEP_READ_BYTES: + tz_must(tz_step_read_bytes(state)); + break; + case TZ_OPERATION_STEP_BRANCH: + tz_must(tz_step_branch(state)); + break; + case TZ_OPERATION_STEP_BATCH: + tz_must(tz_step_batch(state)); + break; + case TZ_OPERATION_STEP_READ_STRING: + tz_must(tz_step_read_string(state)); + break; + case TZ_OPERATION_STEP_READ_BINARY: + tz_must(tz_step_read_binary(state)); + break; + case TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT: + tz_must(tz_step_read_smart_entrypoint(state)); + break; + case TZ_OPERATION_STEP_OPERATION: + tz_must(tz_step_operation(state)); + break; + case TZ_OPERATION_STEP_READ_PK: + tz_must(tz_step_read_pk(state)); + break; + case TZ_OPERATION_STEP_READ_SORU_MESSAGES: + tz_must(tz_step_read_soru_messages(state)); + break; + case TZ_OPERATION_STEP_READ_SORU_KIND: + tz_must(tz_step_read_soru_kind(state)); + break; + case TZ_OPERATION_STEP_READ_BALLOT: + tz_must(tz_step_read_ballot(state)); + break; + case TZ_OPERATION_STEP_READ_PROTOS: + tz_must(tz_step_read_protos(state)); + break; + case TZ_OPERATION_STEP_PRINT: + tz_must(tz_step_print(state)); + break; + case TZ_OPERATION_STEP_PARTIAL_PRINT: + tz_must(tz_step_partial_print(state)); + break; default: tz_raise(INVALID_STATE); } From 8bad87742accf7d64300a018682e2a7699415eb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 9 Jan 2024 13:34:57 +0100 Subject: [PATCH 12/78] Parser: merge tz_step_print and tz_step_partial_print --- app/src/parser/operation_parser.c | 37 +++++++++++++------------------ 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index a2d2e9e0c..c568f8cab 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -1084,28 +1084,20 @@ tz_step_read_protos(tz_parser_state *state) tz_continue; } -/* Print a string */ +/* Print a string + * if partial is true, then the string is not yet complete + */ static tz_parser_result -tz_step_print(tz_parser_state *state) +tz_step_print(tz_parser_state *state, bool partial) { - ASSERT_STEP(state, PRINT); - tz_operation_state *op = &state->operation; - const char *str = PIC(op->frame->step_print.str); - if (*str) { - tz_must(tz_parser_put(state, *str)); - op->frame->step_print.str++; - } else { - tz_must(pop_frame(state)); - tz_stop(IM_FULL); + if (state->operation.frame->step != TZ_OPERATION_STEP_PRINT + && state->operation.frame->step != TZ_OPERATION_STEP_PARTIAL_PRINT) { + PRINTF("[DEBUG] expected step %s or step %s but got step %s)\n", + STRING_STEP(TZ_OPERATION_STEP_PRINT), + STRING_STEP(TZ_OPERATION_STEP_PARTIAL_PRINT), + STRING_STEP(state->operation.frame->step)); + tz_raise(INVALID_STATE); } - tz_continue; -} - -/* Start printing a string */ -static tz_parser_result -tz_step_partial_print(tz_parser_state *state) -{ - ASSERT_STEP(state, PARTIAL_PRINT); tz_operation_state *op = &state->operation; const char *str = PIC(op->frame->step_print.str); if (*str) { @@ -1113,6 +1105,8 @@ tz_step_partial_print(tz_parser_state *state) op->frame->step_print.str++; } else { tz_must(pop_frame(state)); + if (!partial) + tz_stop(IM_FULL); } tz_continue; } @@ -1193,10 +1187,9 @@ tz_operation_parser_step(tz_parser_state *state) tz_must(tz_step_read_protos(state)); break; case TZ_OPERATION_STEP_PRINT: - tz_must(tz_step_print(state)); - break; case TZ_OPERATION_STEP_PARTIAL_PRINT: - tz_must(tz_step_partial_print(state)); + tz_must(tz_step_print( + state, op->frame->step == TZ_OPERATION_STEP_PARTIAL_PRINT)); break; default: tz_raise(INVALID_STATE); From 4aa2de534f580ee60bfe1dd328efef1d3c6063d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 9 Jan 2024 17:22:01 +0100 Subject: [PATCH 13/78] Parser: use kind field instead of name to end tz_step_operation --- app/src/parser/operation_parser.c | 2 +- app/src/parser/operation_state.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index c568f8cab..961dce045 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -773,7 +773,7 @@ tz_step_operation(tz_parser_state *state) if (regs->oofs > 0) tz_stop(IM_FULL); - if (name == NULL) { + if (field->kind == TZ_OPERATION_FIELD_END) { state->field_info.is_field_complex = false; tz_must(pop_frame(state)); } else { diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index 4ae37021c..9e935161a 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -62,7 +62,7 @@ typedef enum { } tz_operation_parser_step_kind; typedef enum { - TZ_OPERATION_FIELD_SKIP, // not for use in field descriptors + TZ_OPERATION_FIELD_END = 0, // not for use in field descriptors TZ_OPERATION_FIELD_BINARY, TZ_OPERATION_FIELD_INT, TZ_OPERATION_FIELD_NAT, From 505da5bb134c1ae8f33aa0646905aa07cf694a49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 10 Jan 2024 08:42:39 +0100 Subject: [PATCH 14/78] Parser: change step_operation data - tz_operation_descriptor to tz_operation_field_descriptor - field to field_index --- app/src/parser/operation_parser.c | 16 ++++++++-------- app/src/parser/operation_state.h | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 961dce045..62b7620c8 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -418,9 +418,9 @@ tz_step_tag(tz_parser_state *state) #endif // HAVE_SWAP for (d = tz_operation_descriptors; d->tag != TZ_OPERATION_TAG_END; d++) { if (d->tag == t) { - op->frame->step = TZ_OPERATION_STEP_OPERATION; - op->frame->step_operation.descriptor = d; - op->frame->step_operation.field = 0; + op->frame->step = TZ_OPERATION_STEP_OPERATION; + op->frame->step_operation.fields = d->fields; + op->frame->step_operation.field_index = 0; tz_must(push_frame(state, TZ_OPERATION_STEP_PRINT)); snprintf(state->field_info.field_name, 30, "Operation (%d)", op->batch_index); @@ -762,11 +762,11 @@ static tz_parser_result tz_step_operation(tz_parser_state *state) { ASSERT_STEP(state, OPERATION); - tz_operation_state *op = &state->operation; - tz_parser_regs *regs = &state->regs; - const tz_operation_descriptor *d = op->frame->step_operation.descriptor; + tz_operation_state *op = &state->operation; + tz_parser_regs *regs = &state->regs; const tz_operation_field_descriptor *field - = PIC(&d->fields[op->frame->step_operation.field]); + = PIC(&op->frame->step_operation + .fields[op->frame->step_operation.field_index]); const char *name = PIC(field->name); // Remaining content from previous section - display this first. @@ -785,7 +785,7 @@ tz_step_operation(tz_parser_state *state) state->field_info.is_field_complex = field->complex; state->field_info.field_index++; } - op->frame->step_operation.field++; + op->frame->step_operation.field_index++; if (!present) { if (field->display_none) { if (field->skip) diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index 9e935161a..a0e08c2e6 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -108,8 +108,8 @@ typedef struct { uint16_t size; } step_size; struct { - const tz_operation_descriptor *descriptor; - uint8_t field; + const tz_operation_field_descriptor *fields; + uint8_t field_index; } step_operation; struct { const char *str; From 4d773c4cb7d20cc9da66955ba32c7a690b89c068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 10 Jan 2024 09:45:52 +0100 Subject: [PATCH 15/78] Parser: extract a step_field from the step_operation --- app/src/parser/operation_parser.c | 360 ++++++++++++++++-------------- app/src/parser/operation_state.h | 4 + 2 files changed, 197 insertions(+), 167 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 62b7620c8..35cb0ad4b 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -33,6 +33,7 @@ const char *const tz_operation_parser_step_name[] = {"MAGIC", "BATCH", "TAG", "SIZE", + "FIELD", "OPERATION", "PRINT", "PARTIAL_PRINT", @@ -767,184 +768,206 @@ tz_step_operation(tz_parser_state *state) const tz_operation_field_descriptor *field = PIC(&op->frame->step_operation .fields[op->frame->step_operation.field_index]); - const char *name = PIC(field->name); // Remaining content from previous section - display this first. if (regs->oofs > 0) tz_stop(IM_FULL); if (field->kind == TZ_OPERATION_FIELD_END) { + // is_field_complex is reset after reaching the last field state->field_info.is_field_complex = false; tz_must(pop_frame(state)); } else { - uint8_t present = 1; - if (!field->required) - tz_must(tz_parser_read(state, &present)); - if (!field->skip) { - STRLCPY(state->field_info.field_name, name); - state->field_info.is_field_complex = field->complex; - state->field_info.field_index++; - } op->frame->step_operation.field_index++; - if (!present) { - if (field->display_none) { - if (field->skip) - tz_raise(INVALID_STATE); - tz_must(push_frame(state, TZ_OPERATION_STEP_PRINT)); - op->frame->step_print.str = (char *)unset_message; - } - tz_continue; - } - switch (field->kind) { - case TZ_OPERATION_FIELD_BINARY: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BINARY)); - op->frame->step_read_string.ofs = 0; - op->frame->step_read_string.skip = field->skip; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_SOURCE: - case TZ_OPERATION_FIELD_PKH: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 21; - break; - } - case TZ_OPERATION_FIELD_PK: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_PK)); - op->frame->step_read_bytes.skip = field->skip; - break; - } - case TZ_OPERATION_FIELD_SR: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 20; - break; - } - case TZ_OPERATION_FIELD_SRC: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 32; - break; - } - case TZ_OPERATION_FIELD_PROTO: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 32; - break; - } - case TZ_OPERATION_FIELD_PROTOS: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_PROTOS)); - op->frame->step_read_list.name = name; - op->frame->step_read_list.index = 0; - op->frame->step_read_list.skip = field->skip; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_DESTINATION: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); - op->frame->step_read_bytes.kind = field->kind; - op->frame->step_read_bytes.skip = field->skip; - op->frame->step_read_bytes.ofs = 0; - op->frame->step_read_bytes.len = 22; - break; - } - case TZ_OPERATION_FIELD_NAT: - case TZ_OPERATION_FIELD_FEE: - case TZ_OPERATION_FIELD_AMOUNT: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_NUM)); - tz_parse_num_state_init(&state->buffers.num, - &op->frame->step_read_num.state); - op->frame->step_read_num.kind = field->kind; - op->frame->step_read_num.skip = field->skip; - op->frame->step_read_num.natural = 1; - break; - } - case TZ_OPERATION_FIELD_INT: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_NUM)); - tz_parse_num_state_init(&state->buffers.num, - &op->frame->step_read_num.state); - op->frame->step_read_num.kind = field->kind; - op->frame->step_read_num.skip = field->skip; - op->frame->step_read_num.natural = 0; - break; - } - case TZ_OPERATION_FIELD_INT32: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_INT32)); - op->frame->step_read_int32.value = 0; - op->frame->step_read_int32.ofs = 0; - op->frame->step_read_int32.skip = field->skip; - break; - } - case TZ_OPERATION_FIELD_PARAMETER: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_MICHELINE)); - op->frame->step_read_micheline.inited = 0; - op->frame->step_read_micheline.skip = field->skip; - op->frame->step_read_micheline.name = name; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - tz_must( - push_frame(state, TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT)); - STRLCPY(state->field_info.field_name, "Entrypoint"); - op->frame->step_read_string.ofs = 0; - op->frame->step_read_string.skip = field->skip; - break; - } - case TZ_OPERATION_FIELD_EXPR: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_MICHELINE)); - op->frame->step_read_micheline.inited = 0; - op->frame->step_read_micheline.skip = field->skip; - op->frame->step_read_micheline.name = name; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_STRING: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_STRING)); - op->frame->step_read_string.ofs = 0; - op->frame->step_read_string.skip = field->skip; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_SORU_MESSAGES: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_SORU_MESSAGES)); - op->frame->step_read_list.name = name; - op->frame->step_read_list.index = 0; - op->frame->step_read_list.skip = field->skip; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - break; - } - case TZ_OPERATION_FIELD_SORU_KIND: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_SORU_KIND)); - op->frame->step_read_string.skip = field->skip; - break; - } - case TZ_OPERATION_FIELD_BALLOT: { - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BALLOT)); - op->frame->step_read_string.skip = field->skip; - break; - } - default: - tz_raise(INVALID_STATE); + tz_must(push_frame(state, TZ_OPERATION_STEP_FIELD)); + op->frame->step_field.field = field; + } + tz_continue; +} + +/* Update the state in order to read a field of an operation based on its kind + * If the field is not ignored, update the field_info with the field + * information + */ +static tz_parser_result +tz_step_field(tz_parser_state *state) +{ + ASSERT_STEP(state, FIELD); + tz_operation_state *op = &state->operation; + const tz_operation_field_descriptor *field = op->frame->step_field.field; + const char *name = PIC(field->name); + + uint8_t present = 1; + if (!field->required) + tz_must(tz_parser_read(state, &present)); + + // is_field_complex is reset after reaching TZ_OPERATION_FIELD_END + if (!field->skip) { + STRLCPY(state->field_info.field_name, name); + state->field_info.is_field_complex = field->complex; + state->field_info.field_index++; + } + + if (!present) { + if (field->display_none) { + if (field->skip) + tz_raise(INVALID_STATE); + op->frame->step = TZ_OPERATION_STEP_PRINT; + op->frame->step_print.str = (char *)unset_message; + } else { + tz_must(pop_frame(state)); } + tz_continue; + } + + switch (field->kind) { + case TZ_OPERATION_FIELD_BINARY: { + op->frame->step = TZ_OPERATION_STEP_READ_BINARY; + op->frame->step_read_string.ofs = 0; + op->frame->step_read_string.skip = field->skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; + break; + } + case TZ_OPERATION_FIELD_SOURCE: + case TZ_OPERATION_FIELD_PKH: { + op->frame->step = TZ_OPERATION_STEP_READ_BYTES; + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 21; + break; + } + case TZ_OPERATION_FIELD_PK: { + op->frame->step = TZ_OPERATION_STEP_READ_PK; + op->frame->step_read_bytes.skip = field->skip; + break; + } + case TZ_OPERATION_FIELD_SR: { + op->frame->step = TZ_OPERATION_STEP_READ_BYTES; + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 20; + break; + } + case TZ_OPERATION_FIELD_SRC: { + op->frame->step = TZ_OPERATION_STEP_READ_BYTES; + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 32; + break; + } + case TZ_OPERATION_FIELD_PROTO: { + op->frame->step = TZ_OPERATION_STEP_READ_BYTES; + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 32; + break; + } + case TZ_OPERATION_FIELD_PROTOS: { + op->frame->step = TZ_OPERATION_STEP_READ_PROTOS; + op->frame->step_read_list.name = name; + op->frame->step_read_list.index = 0; + op->frame->step_read_list.skip = field->skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; + break; + } + case TZ_OPERATION_FIELD_DESTINATION: { + op->frame->step = TZ_OPERATION_STEP_READ_BYTES; + op->frame->step_read_bytes.kind = field->kind; + op->frame->step_read_bytes.skip = field->skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 22; + break; + } + case TZ_OPERATION_FIELD_NAT: + case TZ_OPERATION_FIELD_FEE: + case TZ_OPERATION_FIELD_AMOUNT: { + op->frame->step = TZ_OPERATION_STEP_READ_NUM; + tz_parse_num_state_init(&state->buffers.num, + &op->frame->step_read_num.state); + op->frame->step_read_num.kind = field->kind; + op->frame->step_read_num.skip = field->skip; + op->frame->step_read_num.natural = 1; + break; + } + case TZ_OPERATION_FIELD_INT: { + op->frame->step = TZ_OPERATION_STEP_READ_NUM; + tz_parse_num_state_init(&state->buffers.num, + &op->frame->step_read_num.state); + op->frame->step_read_num.kind = field->kind; + op->frame->step_read_num.skip = field->skip; + op->frame->step_read_num.natural = 0; + break; + } + case TZ_OPERATION_FIELD_INT32: { + op->frame->step = TZ_OPERATION_STEP_READ_INT32; + op->frame->step_read_int32.value = 0; + op->frame->step_read_int32.ofs = 0; + op->frame->step_read_int32.skip = field->skip; + break; + } + case TZ_OPERATION_FIELD_PARAMETER: { + op->frame->step = TZ_OPERATION_STEP_READ_MICHELINE; + op->frame->step_read_micheline.inited = 0; + op->frame->step_read_micheline.skip = field->skip; + op->frame->step_read_micheline.name = name; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT)); + STRLCPY(state->field_info.field_name, "Entrypoint"); + op->frame->step_read_string.ofs = 0; + op->frame->step_read_string.skip = field->skip; + break; + } + case TZ_OPERATION_FIELD_EXPR: { + op->frame->step = TZ_OPERATION_STEP_READ_MICHELINE; + op->frame->step_read_micheline.inited = 0; + op->frame->step_read_micheline.skip = field->skip; + op->frame->step_read_micheline.name = name; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; + break; + } + case TZ_OPERATION_FIELD_STRING: { + op->frame->step = TZ_OPERATION_STEP_READ_STRING; + op->frame->step_read_string.ofs = 0; + op->frame->step_read_string.skip = field->skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; + break; + } + case TZ_OPERATION_FIELD_SORU_MESSAGES: { + op->frame->step = TZ_OPERATION_STEP_READ_SORU_MESSAGES; + op->frame->step_read_list.name = name; + op->frame->step_read_list.index = 0; + op->frame->step_read_list.skip = field->skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; + break; + } + case TZ_OPERATION_FIELD_SORU_KIND: { + op->frame->step = TZ_OPERATION_STEP_READ_SORU_KIND; + op->frame->step_read_string.skip = field->skip; + break; + } + case TZ_OPERATION_FIELD_BALLOT: { + op->frame->step = TZ_OPERATION_STEP_READ_BALLOT; + op->frame->step_read_string.skip = field->skip; + break; + } + default: + tz_raise(INVALID_STATE); } tz_continue; } @@ -1168,6 +1191,9 @@ tz_operation_parser_step(tz_parser_state *state) case TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT: tz_must(tz_step_read_smart_entrypoint(state)); break; + case TZ_OPERATION_STEP_FIELD: + tz_must(tz_step_field(state)); + break; case TZ_OPERATION_STEP_OPERATION: tz_must(tz_step_operation(state)); break; diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index a0e08c2e6..ff0bf59a7 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -45,6 +45,7 @@ typedef enum { TZ_OPERATION_STEP_BATCH, TZ_OPERATION_STEP_TAG, TZ_OPERATION_STEP_SIZE, + TZ_OPERATION_STEP_FIELD, TZ_OPERATION_STEP_OPERATION, TZ_OPERATION_STEP_PRINT, TZ_OPERATION_STEP_PARTIAL_PRINT, @@ -107,6 +108,9 @@ typedef struct { uint8_t size_len; uint16_t size; } step_size; + struct { + const tz_operation_field_descriptor *field; + } step_field; struct { const tz_operation_field_descriptor *fields; uint8_t field_index; From 7070f00f505d58f3126c5d71ee3ffc72bd205986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 9 Jan 2024 13:52:41 +0100 Subject: [PATCH 16/78] Parser: use macros to create operation_field_descriptor --- app/src/parser/operation_parser.c | 318 ++++++++++++++---------------- 1 file changed, 148 insertions(+), 170 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 35cb0ad4b..e098425bf 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -55,176 +55,154 @@ const char *const tz_operation_parser_step_name[] = {"MAGIC", #endif // clang-format off -const tz_operation_field_descriptor proposals_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_PKH, true, false, false, false}, - {"Period", TZ_OPERATION_FIELD_INT32, true, false, false, false}, - {"Proposal", TZ_OPERATION_FIELD_PROTOS, true, false, false, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor ballot_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_PKH, true, false, false, false}, - {"Period", TZ_OPERATION_FIELD_INT32, true, false, false, false}, - {"Proposal", TZ_OPERATION_FIELD_PROTO, true, false, false, false}, - {"Ballot", TZ_OPERATION_FIELD_BALLOT, true, false, false, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor failing_noop_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Message", TZ_OPERATION_FIELD_BINARY, true, false, false, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor transaction_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Amount", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false}, - {"Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false}, - {"Parameter", TZ_OPERATION_FIELD_PARAMETER, false, false, false, true }, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor reveal_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Public key", TZ_OPERATION_FIELD_PK, true, false, false, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor delegation_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor reg_glb_cst_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Value", TZ_OPERATION_FIELD_EXPR, true, false, false, true }, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor set_deposit_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Staking limit", TZ_OPERATION_FIELD_AMOUNT, false, false, true, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor inc_paid_stg_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Amount", TZ_OPERATION_FIELD_INT, true, false, false, false}, - {"Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor update_ck_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Public key", TZ_OPERATION_FIELD_PK, true, false, false, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor origination_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Balance", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false}, - {"Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false}, - {"Code", TZ_OPERATION_FIELD_EXPR, true, false, false, true }, - {"Storage", TZ_OPERATION_FIELD_EXPR, true, false, false, true }, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor transfer_tck_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Contents", TZ_OPERATION_FIELD_EXPR, true, false, false, true }, - {"Type", TZ_OPERATION_FIELD_EXPR, true, false, false, true }, - {"Ticketer", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false}, - {"Amount", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false}, - {"Entrypoint", TZ_OPERATION_FIELD_STRING, true, false, false, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor soru_add_msg_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Message", TZ_OPERATION_FIELD_SORU_MESSAGES, true, false, false, false}, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor soru_exe_msg_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Rollup", TZ_OPERATION_FIELD_SR, true, false, false, false}, - {"Commitment", TZ_OPERATION_FIELD_SRC, true, false, false, false}, - {"Output proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true }, - {NULL, 0, 0, 0, 0, 0 } -}; - -const tz_operation_field_descriptor soru_origin_fields[] = { - // Name, Kind, Req, Skip, None, Complex - {"Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false}, - {"Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false}, - {"Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false}, - {"Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false}, - {"Kind", TZ_OPERATION_FIELD_SORU_KIND, true, false, false, false}, - {"Kernel", TZ_OPERATION_FIELD_BINARY, true, false, false, true }, - {"Proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true }, - {"Parameters", TZ_OPERATION_FIELD_EXPR, true, false, false, true }, - {NULL, 0, 0, 0, 0, 0 } -}; +#define TZ_OPERATION_FIELD(name, kind, required, skip, display_none, complex) \ + {name, kind, required, skip, display_none, complex} + +#define TZ_OPERATION_LAST_FIELD {NULL, 0, 0, 0, 0, 0} + +#define TZ_OPERATION_FIELDS(name, ...) \ + const tz_operation_field_descriptor name[] = { __VA_ARGS__, TZ_OPERATION_LAST_FIELD} + +TZ_OPERATION_FIELDS(proposals_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH, true, false, false, false), + TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32, true, false, false, false), + TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTOS, true, false, false, false) +); + +TZ_OPERATION_FIELDS(ballot_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH, true, false, false, false), + TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32, true, false, false, false), + TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTO, true, false, false, false), + TZ_OPERATION_FIELD("Ballot", TZ_OPERATION_FIELD_BALLOT, true, false, false, false) +); + +TZ_OPERATION_FIELDS(failing_noop_fields, + TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_BINARY, true, false, false, false) +); + +TZ_OPERATION_FIELDS(transaction_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), + TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_PARAMETER, false, false, false, true ) +); + +TZ_OPERATION_FIELDS(reveal_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, true, false, false, false) +); + +TZ_OPERATION_FIELDS(delegation_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false) +); + +TZ_OPERATION_FIELDS(reg_glb_cst_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Value", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) +); + +TZ_OPERATION_FIELDS(set_deposit_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT, false, false, true, false) +); + +TZ_OPERATION_FIELDS(inc_paid_stg_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_INT, true, false, false, false), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false) +); + +TZ_OPERATION_FIELDS(update_ck_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, true, false, false, false) +); + +TZ_OPERATION_FIELDS(origination_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false), + TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false), + TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), + TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) +); + +TZ_OPERATION_FIELDS(transfer_tck_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Contents", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), + TZ_OPERATION_FIELD("Type", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), + TZ_OPERATION_FIELD("Ticketer", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), + TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_STRING, true, false, false, false) +); + +TZ_OPERATION_FIELDS(soru_add_msg_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_SORU_MESSAGES, true, false, false, false) +); + +TZ_OPERATION_FIELDS(soru_exe_msg_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Rollup", TZ_OPERATION_FIELD_SR, true, false, false, false), + TZ_OPERATION_FIELD("Commitment", TZ_OPERATION_FIELD_SRC, true, false, false, false), + TZ_OPERATION_FIELD("Output proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true ) +); + +TZ_OPERATION_FIELDS(soru_origin_fields, + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND, true, false, false, false), + TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, true, false, false, true ), + TZ_OPERATION_FIELD("Proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true ), + TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) +); const tz_operation_descriptor tz_operation_descriptors[] = { {TZ_OPERATION_TAG_PROPOSALS, "Proposals", proposals_fields }, From 4d1164efeefaae141d39119e9763d6141453847f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 9 Jan 2024 13:57:05 +0100 Subject: [PATCH 17/78] Parser: isolate fields specific to manager_operations --- app/src/parser/operation_parser.c | 129 ++++++++++-------------------- 1 file changed, 44 insertions(+), 85 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index e098425bf..9c53257b4 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -80,128 +80,87 @@ TZ_OPERATION_FIELDS(failing_noop_fields, TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_BINARY, true, false, false, false) ); +#define TZ_OPERATION_MANAGER_OPERATION_FIELDS \ + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), \ + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), \ + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), \ + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), \ + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false) + TZ_OPERATION_FIELDS(transaction_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_MANAGER_OPERATION_FIELDS, TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false), TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_PARAMETER, false, false, false, true ) ); TZ_OPERATION_FIELDS(reveal_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, true, false, false, false) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, true, false, false, false) ); TZ_OPERATION_FIELDS(delegation_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false) ); TZ_OPERATION_FIELDS(reg_glb_cst_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Value", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Value", TZ_OPERATION_FIELD_EXPR, true, false, false, true) ); TZ_OPERATION_FIELDS(set_deposit_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT, false, false, true, false) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT, false, false, true, false) ); TZ_OPERATION_FIELDS(inc_paid_stg_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_INT, true, false, false, false), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_INT, true, false, false, false), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false) ); TZ_OPERATION_FIELDS(update_ck_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, true, false, false, false) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, true, false, false, false) ); TZ_OPERATION_FIELDS(origination_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false), - TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false), - TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), - TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false), + TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false), + TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), + TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) ); TZ_OPERATION_FIELDS(transfer_tck_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Contents", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), - TZ_OPERATION_FIELD("Type", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), - TZ_OPERATION_FIELD("Ticketer", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), - TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_STRING, true, false, false, false) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Contents", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), + TZ_OPERATION_FIELD("Type", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), + TZ_OPERATION_FIELD("Ticketer", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_NAT, true, false, false, false), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), + TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_STRING, true, false, false, false) ); TZ_OPERATION_FIELDS(soru_add_msg_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_SORU_MESSAGES, true, false, false, false) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_SORU_MESSAGES, true, false, false, false) ); TZ_OPERATION_FIELDS(soru_exe_msg_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Rollup", TZ_OPERATION_FIELD_SR, true, false, false, false), - TZ_OPERATION_FIELD("Commitment", TZ_OPERATION_FIELD_SRC, true, false, false, false), - TZ_OPERATION_FIELD("Output proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true ) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Rollup", TZ_OPERATION_FIELD_SR, true, false, false, false), + TZ_OPERATION_FIELD("Commitment", TZ_OPERATION_FIELD_SRC, true, false, false, false), + TZ_OPERATION_FIELD("Output proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true ) ); TZ_OPERATION_FIELDS(soru_origin_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND, true, false, false, false), - TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, true, false, false, true ), - TZ_OPERATION_FIELD("Proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true ), - TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) + TZ_OPERATION_MANAGER_OPERATION_FIELDS, + TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND, true, false, false, false), + TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, true, false, false, true ), + TZ_OPERATION_FIELD("Proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true ), + TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) ); const tz_operation_descriptor tz_operation_descriptors[] = { From 18e1df0ccb2521f49ac38279797e29fe1c75cf6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 9 Jan 2024 14:52:44 +0100 Subject: [PATCH 18/78] Parser: define a macro for optional fields --- app/src/parser/operation_parser.c | 91 ++++++++++++++++--------------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 9c53257b4..d91027c3d 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -55,112 +55,115 @@ const char *const tz_operation_parser_step_name[] = {"MAGIC", #endif // clang-format off -#define TZ_OPERATION_FIELD(name, kind, required, skip, display_none, complex) \ - {name, kind, required, skip, display_none, complex} +#define TZ_OPERATION_FIELD(name, kind, skip, complex) \ + {name, kind, .required=true, skip, .display_none=false, complex} #define TZ_OPERATION_LAST_FIELD {NULL, 0, 0, 0, 0, 0} +#define TZ_OPERATION_OPTION_FIELD(name, kind, skip, display_none, complex) \ + {name, kind, .required=false, skip, display_none, complex} + #define TZ_OPERATION_FIELDS(name, ...) \ const tz_operation_field_descriptor name[] = { __VA_ARGS__, TZ_OPERATION_LAST_FIELD} TZ_OPERATION_FIELDS(proposals_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH, true, false, false, false), - TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32, true, false, false, false), - TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTOS, true, false, false, false) + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH, false, false), + TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32, false, false), + TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTOS, false, false) ); TZ_OPERATION_FIELDS(ballot_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH, true, false, false, false), - TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32, true, false, false, false), - TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTO, true, false, false, false), - TZ_OPERATION_FIELD("Ballot", TZ_OPERATION_FIELD_BALLOT, true, false, false, false) + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH, false, false), + TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32, false, false), + TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTO, false, false), + TZ_OPERATION_FIELD("Ballot", TZ_OPERATION_FIELD_BALLOT, false, false) ); TZ_OPERATION_FIELDS(failing_noop_fields, - TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_BINARY, true, false, false, false) + TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_BINARY, false, false) ); -#define TZ_OPERATION_MANAGER_OPERATION_FIELDS \ - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, true, false, false, false), \ - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, true, false, false, false), \ - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, true, false, false), \ - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, true, false, false), \ - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, true, false, false, false) +#define TZ_OPERATION_MANAGER_OPERATION_FIELDS \ + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, false, false), \ + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, false, false), \ + TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, false), \ + TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, false), \ + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, false, false) TZ_OPERATION_FIELDS(transaction_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), - TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_PARAMETER, false, false, false, true ) + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT, false, false), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, false, false), + TZ_OPERATION_OPTION_FIELD("Parameter", TZ_OPERATION_FIELD_PARAMETER, false, false, true ) ); TZ_OPERATION_FIELDS(reveal_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, true, false, false, false) + TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, false, false) ); TZ_OPERATION_FIELDS(delegation_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false) + TZ_OPERATION_OPTION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, true, false) ); TZ_OPERATION_FIELDS(reg_glb_cst_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Value", TZ_OPERATION_FIELD_EXPR, true, false, false, true) + TZ_OPERATION_FIELD("Value", TZ_OPERATION_FIELD_EXPR, false, true) ); TZ_OPERATION_FIELDS(set_deposit_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT, false, false, true, false) + TZ_OPERATION_OPTION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT, false, true, false) ); TZ_OPERATION_FIELDS(inc_paid_stg_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_INT, true, false, false, false), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false) + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_INT, false, false), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, false, false) ); TZ_OPERATION_FIELDS(update_ck_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, true, false, false, false) + TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, false, false) ); TZ_OPERATION_FIELDS(origination_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT, true, false, false, false), - TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, false, true, false), - TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), - TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) + TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT, false, false), + TZ_OPERATION_OPTION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, true, false), + TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, false, true ), + TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, false, true ) ); TZ_OPERATION_FIELDS(transfer_tck_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Contents", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), - TZ_OPERATION_FIELD("Type", TZ_OPERATION_FIELD_EXPR, true, false, false, true ), - TZ_OPERATION_FIELD("Ticketer", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_NAT, true, false, false, false), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, true, false, false, false), - TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_STRING, true, false, false, false) + TZ_OPERATION_FIELD("Contents", TZ_OPERATION_FIELD_EXPR, false, true ), + TZ_OPERATION_FIELD("Type", TZ_OPERATION_FIELD_EXPR, false, true ), + TZ_OPERATION_FIELD("Ticketer", TZ_OPERATION_FIELD_DESTINATION, false, false), + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_NAT, false, false), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, false, false), + TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_STRING, false, false) ); TZ_OPERATION_FIELDS(soru_add_msg_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_SORU_MESSAGES, true, false, false, false) + TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_SORU_MESSAGES, false, false) ); TZ_OPERATION_FIELDS(soru_exe_msg_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Rollup", TZ_OPERATION_FIELD_SR, true, false, false, false), - TZ_OPERATION_FIELD("Commitment", TZ_OPERATION_FIELD_SRC, true, false, false, false), - TZ_OPERATION_FIELD("Output proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true ) + TZ_OPERATION_FIELD("Rollup", TZ_OPERATION_FIELD_SR, false, false), + TZ_OPERATION_FIELD("Commitment", TZ_OPERATION_FIELD_SRC, false, false), + TZ_OPERATION_FIELD("Output proof", TZ_OPERATION_FIELD_BINARY, false, true ) ); TZ_OPERATION_FIELDS(soru_origin_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND, true, false, false, false), - TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, true, false, false, true ), - TZ_OPERATION_FIELD("Proof", TZ_OPERATION_FIELD_BINARY, true, false, false, true ), - TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, true, false, false, true ) + TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND, false, false), + TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, false, true ), + TZ_OPERATION_FIELD("Proof", TZ_OPERATION_FIELD_BINARY, false, true ), + TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, false, true ) ); const tz_operation_descriptor tz_operation_descriptors[] = { From 3a365fdeeb30f55db19d31735a9a0978ad7be3ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 9 Jan 2024 15:16:28 +0100 Subject: [PATCH 19/78] Parser: make field clearer - Use designated initializers notation: { .field=value }, this allows: - to have default value to false for the fields skip and complex - to make it easier to read - Use "_" in front of unused name --- app/src/parser/operation_parser.c | 99 ++++++++++++++++--------------- 1 file changed, 52 insertions(+), 47 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index d91027c3d..b696765ec 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -55,115 +55,120 @@ const char *const tz_operation_parser_step_name[] = {"MAGIC", #endif // clang-format off -#define TZ_OPERATION_FIELD(name, kind, skip, complex) \ - {name, kind, .required=true, skip, .display_none=false, complex} -#define TZ_OPERATION_LAST_FIELD {NULL, 0, 0, 0, 0, 0} +// Default .skip=false, .complex=false +#define TZ_OPERATION_FIELD(name_v, kind_v, ...) \ + {.name=name_v, .kind=kind_v, .required=true, .display_none=false, __VA_ARGS__} -#define TZ_OPERATION_OPTION_FIELD(name, kind, skip, display_none, complex) \ - {name, kind, .required=false, skip, display_none, complex} +#define TZ_OPERATION_LAST_FIELD {0} + +// Default .skip=false, .complex=false +// Default .display_none should be provided +#define TZ_OPERATION_OPTION_FIELD(name_v, kind_v, ...) \ + {.name=name_v, .kind=kind_v, .required=false, __VA_ARGS__} #define TZ_OPERATION_FIELDS(name, ...) \ const tz_operation_field_descriptor name[] = { __VA_ARGS__, TZ_OPERATION_LAST_FIELD} TZ_OPERATION_FIELDS(proposals_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH, false, false), - TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32, false, false), - TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTOS, false, false) + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH), + TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32), + TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTOS) ); TZ_OPERATION_FIELDS(ballot_fields, - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH, false, false), - TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32, false, false), - TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTO, false, false), - TZ_OPERATION_FIELD("Ballot", TZ_OPERATION_FIELD_BALLOT, false, false) + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_PKH), + TZ_OPERATION_FIELD("Period", TZ_OPERATION_FIELD_INT32), + TZ_OPERATION_FIELD("Proposal", TZ_OPERATION_FIELD_PROTO), + TZ_OPERATION_FIELD("Ballot", TZ_OPERATION_FIELD_BALLOT) ); TZ_OPERATION_FIELDS(failing_noop_fields, - TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_BINARY, false, false) + TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_BINARY) ); -#define TZ_OPERATION_MANAGER_OPERATION_FIELDS \ - TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE, false, false), \ - TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE, false, false), \ - TZ_OPERATION_FIELD("Counter", TZ_OPERATION_FIELD_NAT, true, false), \ - TZ_OPERATION_FIELD("Gas", TZ_OPERATION_FIELD_NAT, true, false), \ - TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT, false, false) +#define TZ_OPERATION_MANAGER_OPERATION_FIELDS \ + TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE), \ + TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE), \ + TZ_OPERATION_FIELD("_Counter", TZ_OPERATION_FIELD_NAT, .skip=true), \ + TZ_OPERATION_FIELD("_Gas", TZ_OPERATION_FIELD_NAT, .skip=true), \ + TZ_OPERATION_FIELD("Storage limit", TZ_OPERATION_FIELD_NAT) TZ_OPERATION_FIELDS(transaction_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT, false, false), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, false, false), - TZ_OPERATION_OPTION_FIELD("Parameter", TZ_OPERATION_FIELD_PARAMETER, false, false, true ) + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION), + TZ_OPERATION_OPTION_FIELD("_Parameter", TZ_OPERATION_FIELD_PARAMETER, + .display_none=false, .complex=true) ); TZ_OPERATION_FIELDS(reveal_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, false, false) + TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK) ); TZ_OPERATION_FIELDS(delegation_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_OPTION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, true, false) + TZ_OPERATION_OPTION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, .display_none=true) ); TZ_OPERATION_FIELDS(reg_glb_cst_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Value", TZ_OPERATION_FIELD_EXPR, false, true) + TZ_OPERATION_FIELD("Value", TZ_OPERATION_FIELD_EXPR, .complex=true) ); TZ_OPERATION_FIELDS(set_deposit_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_OPTION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT, false, true, false) + TZ_OPERATION_OPTION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT, .display_none=true) ); TZ_OPERATION_FIELDS(inc_paid_stg_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_INT, false, false), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, false, false) + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_INT), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION) ); TZ_OPERATION_FIELDS(update_ck_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK, false, false) + TZ_OPERATION_FIELD("Public key", TZ_OPERATION_FIELD_PK) ); TZ_OPERATION_FIELDS(origination_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT, false, false), - TZ_OPERATION_OPTION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, false, true, false), - TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, false, true ), - TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, false, true ) + TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT), + TZ_OPERATION_OPTION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, .display_none=true), + TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, .complex=true), + TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, .complex=true) ); TZ_OPERATION_FIELDS(transfer_tck_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Contents", TZ_OPERATION_FIELD_EXPR, false, true ), - TZ_OPERATION_FIELD("Type", TZ_OPERATION_FIELD_EXPR, false, true ), - TZ_OPERATION_FIELD("Ticketer", TZ_OPERATION_FIELD_DESTINATION, false, false), - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_NAT, false, false), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION, false, false), - TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_STRING, false, false) + TZ_OPERATION_FIELD("Contents", TZ_OPERATION_FIELD_EXPR, .complex=true), + TZ_OPERATION_FIELD("Type", TZ_OPERATION_FIELD_EXPR, .complex=true), + TZ_OPERATION_FIELD("Ticketer", TZ_OPERATION_FIELD_DESTINATION), + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_NAT), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION), + TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_STRING) ); TZ_OPERATION_FIELDS(soru_add_msg_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_SORU_MESSAGES, false, false) + TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_SORU_MESSAGES) ); TZ_OPERATION_FIELDS(soru_exe_msg_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Rollup", TZ_OPERATION_FIELD_SR, false, false), - TZ_OPERATION_FIELD("Commitment", TZ_OPERATION_FIELD_SRC, false, false), - TZ_OPERATION_FIELD("Output proof", TZ_OPERATION_FIELD_BINARY, false, true ) + TZ_OPERATION_FIELD("Rollup", TZ_OPERATION_FIELD_SR), + TZ_OPERATION_FIELD("Commitment", TZ_OPERATION_FIELD_SRC), + TZ_OPERATION_FIELD("Output proof", TZ_OPERATION_FIELD_BINARY, .complex=true) ); TZ_OPERATION_FIELDS(soru_origin_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND, false, false), - TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, false, true ), - TZ_OPERATION_FIELD("Proof", TZ_OPERATION_FIELD_BINARY, false, true ), - TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, false, true ) + TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND), + TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, .complex=true), + TZ_OPERATION_FIELD("Proof", TZ_OPERATION_FIELD_BINARY, .complex=true), + TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, .complex=true) ); const tz_operation_descriptor tz_operation_descriptors[] = { From 797b5e5a5c8941077db777076b2f8136c27c2a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 10 Jan 2024 16:24:31 +0100 Subject: [PATCH 20/78] Parser: replace the required field by a step option --- app/src/parser/operation_parser.c | 92 ++++++++++++++++++++----------- app/src/parser/operation_state.h | 15 ++++- 2 files changed, 75 insertions(+), 32 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index b696765ec..3b7cc485d 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -27,7 +27,8 @@ static tz_parser_result push_frame(tz_parser_state *, static tz_parser_result pop_frame(tz_parser_state *); #ifdef TEZOS_DEBUG -const char *const tz_operation_parser_step_name[] = {"MAGIC", +const char *const tz_operation_parser_step_name[] = {"OPTION", + "MAGIC", "READ_BINARY", "BRANCH", "BATCH", @@ -58,14 +59,18 @@ const char *const tz_operation_parser_step_name[] = {"MAGIC", // Default .skip=false, .complex=false #define TZ_OPERATION_FIELD(name_v, kind_v, ...) \ - {.name=name_v, .kind=kind_v, .required=true, .display_none=false, __VA_ARGS__} + {.name=name_v, .kind=kind_v, __VA_ARGS__} #define TZ_OPERATION_LAST_FIELD {0} // Default .skip=false, .complex=false -// Default .display_none should be provided -#define TZ_OPERATION_OPTION_FIELD(name_v, kind_v, ...) \ - {.name=name_v, .kind=kind_v, .required=false, __VA_ARGS__} +#define TZ_OPERATION_OPTION_FIELD(name_v, field_v, display_none, ...) \ + {.name=name_v, .kind=TZ_OPERATION_FIELD_OPTION, \ + .field_option={ \ + .field=&(const tz_operation_field_descriptor)field_v, \ + display_none \ + }, \ + __VA_ARGS__} #define TZ_OPERATION_FIELDS(name, ...) \ const tz_operation_field_descriptor name[] = { __VA_ARGS__, TZ_OPERATION_LAST_FIELD} @@ -96,10 +101,11 @@ TZ_OPERATION_FIELDS(failing_noop_fields, TZ_OPERATION_FIELDS(transaction_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT), - TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION), - TZ_OPERATION_OPTION_FIELD("_Parameter", TZ_OPERATION_FIELD_PARAMETER, - .display_none=false, .complex=true) + TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT), + TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION), + TZ_OPERATION_OPTION_FIELD("_Parameters", + TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_PARAMETER, .complex=true), + .display_none=false) ); TZ_OPERATION_FIELDS(reveal_fields, @@ -109,7 +115,9 @@ TZ_OPERATION_FIELDS(reveal_fields, TZ_OPERATION_FIELDS(delegation_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_OPTION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, .display_none=true) + TZ_OPERATION_OPTION_FIELD("Delegate", + TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH), + .display_none=true) ); TZ_OPERATION_FIELDS(reg_glb_cst_fields, @@ -119,7 +127,9 @@ TZ_OPERATION_FIELDS(reg_glb_cst_fields, TZ_OPERATION_FIELDS(set_deposit_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_OPTION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT, .display_none=true) + TZ_OPERATION_OPTION_FIELD("Staking limit", + TZ_OPERATION_FIELD("Staking limit", TZ_OPERATION_FIELD_AMOUNT), + .display_none=true) ); TZ_OPERATION_FIELDS(inc_paid_stg_fields, @@ -135,10 +145,12 @@ TZ_OPERATION_FIELDS(update_ck_fields, TZ_OPERATION_FIELDS(origination_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, - TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT), - TZ_OPERATION_OPTION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH, .display_none=true), - TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, .complex=true), - TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, .complex=true) + TZ_OPERATION_FIELD("Balance", TZ_OPERATION_FIELD_AMOUNT), + TZ_OPERATION_OPTION_FIELD("Delegate", + TZ_OPERATION_FIELD("Delegate", TZ_OPERATION_FIELD_PKH), + .display_none=true), + TZ_OPERATION_FIELD("Code", TZ_OPERATION_FIELD_EXPR, .complex=true), + TZ_OPERATION_FIELD("Storage", TZ_OPERATION_FIELD_EXPR, .complex=true) ); TZ_OPERATION_FIELDS(transfer_tck_fields, @@ -295,6 +307,30 @@ tz_print_string(tz_parser_state *state) } \ } while (0) +/* Update the state in order to read the field if it is present */ +static tz_parser_result +tz_step_option(tz_parser_state *state) +{ + ASSERT_STEP(state, OPTION); + tz_operation_state *op = &state->operation; + uint8_t present; + tz_must(tz_parser_read(state, &present)); + if (!present) { + if (op->frame->step_option.display_none) { + if (op->frame->step_option.field->skip) + tz_raise(INVALID_STATE); + op->frame->step = TZ_OPERATION_STEP_PRINT; + op->frame->step_print.str = (char *)unset_message; + } else { + tz_must(pop_frame(state)); + } + } else { + op->frame->step = TZ_OPERATION_STEP_FIELD; + op->frame->step_field.field = op->frame->step_option.field; + } + tz_continue; +} + /* Update the state in order to read an operation or a micheline expression * based on a magic byte */ static tz_parser_result @@ -742,10 +778,6 @@ tz_step_field(tz_parser_state *state) const tz_operation_field_descriptor *field = op->frame->step_field.field; const char *name = PIC(field->name); - uint8_t present = 1; - if (!field->required) - tz_must(tz_parser_read(state, &present)); - // is_field_complex is reset after reaching TZ_OPERATION_FIELD_END if (!field->skip) { STRLCPY(state->field_info.field_name, name); @@ -753,19 +785,14 @@ tz_step_field(tz_parser_state *state) state->field_info.field_index++; } - if (!present) { - if (field->display_none) { - if (field->skip) - tz_raise(INVALID_STATE); - op->frame->step = TZ_OPERATION_STEP_PRINT; - op->frame->step_print.str = (char *)unset_message; - } else { - tz_must(pop_frame(state)); - } - tz_continue; - } - switch (field->kind) { + case TZ_OPERATION_FIELD_OPTION: { + op->frame->step = TZ_OPERATION_STEP_OPTION; + op->frame->step_option.field = PIC(field->field_option.field); + op->frame->step_option.display_none + = field->field_option.display_none; + break; + } case TZ_OPERATION_FIELD_BINARY: { op->frame->step = TZ_OPERATION_STEP_READ_BINARY; op->frame->step_read_string.ofs = 0; @@ -1100,6 +1127,9 @@ tz_operation_parser_step(tz_parser_state *state) STRING_STEP(op->frame->step), tz_parser_result_name(state->errno)); switch (op->frame->step) { + case TZ_OPERATION_STEP_OPTION: + tz_must(tz_step_option(state)); + break; case TZ_OPERATION_STEP_MAGIC: tz_must(tz_step_magic(state)); break; diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index ff0bf59a7..6d0a42f2a 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -39,6 +39,7 @@ typedef enum { } tz_operation_tag; typedef enum { + TZ_OPERATION_STEP_OPTION, TZ_OPERATION_STEP_MAGIC, TZ_OPERATION_STEP_READ_BINARY, TZ_OPERATION_STEP_BRANCH, @@ -64,6 +65,7 @@ typedef enum { typedef enum { TZ_OPERATION_FIELD_END = 0, // not for use in field descriptors + TZ_OPERATION_FIELD_OPTION, TZ_OPERATION_FIELD_BINARY, TZ_OPERATION_FIELD_INT, TZ_OPERATION_FIELD_NAT, @@ -88,10 +90,20 @@ typedef enum { TZ_OPERATION_FIELD_BALLOT } tz_operation_field_kind; +struct tz_operation_field_descriptor; + typedef struct { + const struct tz_operation_field_descriptor *field; + uint8_t display_none : 1; +} tz_operation_option_field_descriptor; + +typedef struct tz_operation_field_descriptor { const char *name; tz_operation_field_kind kind : 5; - uint8_t required : 1, skip : 1, display_none : 1, complex : 1; + union { + tz_operation_option_field_descriptor field_option; + }; + uint8_t skip : 1, complex : 1; } tz_operation_field_descriptor; typedef struct { @@ -104,6 +116,7 @@ typedef struct { tz_operation_parser_step_kind step : 5; uint16_t stop; union { + tz_operation_option_field_descriptor step_option; struct { uint8_t size_len; uint16_t size; From d9f8791f4694f3672a72ebd0eaecca04edc85b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 11 Jan 2024 09:52:47 +0100 Subject: [PATCH 21/78] Parser: rename operation step by tuple step --- app/src/parser/operation_parser.c | 67 +++++++++++++++---------------- app/src/parser/operation_state.h | 4 +- 2 files changed, 35 insertions(+), 36 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 3b7cc485d..f5317b464 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -28,6 +28,7 @@ static tz_parser_result pop_frame(tz_parser_state *); #ifdef TEZOS_DEBUG const char *const tz_operation_parser_step_name[] = {"OPTION", + "TUPLE", "MAGIC", "READ_BINARY", "BRANCH", @@ -35,7 +36,6 @@ const char *const tz_operation_parser_step_name[] = {"OPTION", "TAG", "SIZE", "FIELD", - "OPERATION", "PRINT", "PARTIAL_PRINT", "READ_NUM", @@ -331,6 +331,32 @@ tz_step_option(tz_parser_state *state) tz_continue; } +/* Update the state in order to read the fields in a field tuple */ +static tz_parser_result +tz_step_tuple(tz_parser_state *state) +{ + ASSERT_STEP(state, TUPLE); + tz_operation_state *op = &state->operation; + tz_parser_regs *regs = &state->regs; + const tz_operation_field_descriptor *field = PIC( + &op->frame->step_tuple.fields[op->frame->step_tuple.field_index]); + + // Remaining content from previous section - display this first. + if (regs->oofs > 0) + tz_stop(IM_FULL); + + if (field->kind == TZ_OPERATION_FIELD_END) { + // is_field_complex is reset after reaching the last field + state->field_info.is_field_complex = false; + tz_must(pop_frame(state)); + } else { + op->frame->step_tuple.field_index++; + tz_must(push_frame(state, TZ_OPERATION_STEP_FIELD)); + op->frame->step_field.field = field; + } + tz_continue; +} + /* Update the state in order to read an operation or a micheline expression * based on a magic byte */ static tz_parser_result @@ -400,9 +426,9 @@ tz_step_tag(tz_parser_state *state) #endif // HAVE_SWAP for (d = tz_operation_descriptors; d->tag != TZ_OPERATION_TAG_END; d++) { if (d->tag == t) { - op->frame->step = TZ_OPERATION_STEP_OPERATION; - op->frame->step_operation.fields = d->fields; - op->frame->step_operation.field_index = 0; + op->frame->step = TZ_OPERATION_STEP_TUPLE; + op->frame->step_tuple.fields = d->fields; + op->frame->step_tuple.field_index = 0; tz_must(push_frame(state, TZ_OPERATION_STEP_PRINT)); snprintf(state->field_info.field_name, 30, "Operation (%d)", op->batch_index); @@ -739,33 +765,6 @@ tz_step_read_smart_entrypoint(tz_parser_state *state) tz_continue; } -/* Update the state in order to read fields of an operation */ -static tz_parser_result -tz_step_operation(tz_parser_state *state) -{ - ASSERT_STEP(state, OPERATION); - tz_operation_state *op = &state->operation; - tz_parser_regs *regs = &state->regs; - const tz_operation_field_descriptor *field - = PIC(&op->frame->step_operation - .fields[op->frame->step_operation.field_index]); - - // Remaining content from previous section - display this first. - if (regs->oofs > 0) - tz_stop(IM_FULL); - - if (field->kind == TZ_OPERATION_FIELD_END) { - // is_field_complex is reset after reaching the last field - state->field_info.is_field_complex = false; - tz_must(pop_frame(state)); - } else { - op->frame->step_operation.field_index++; - tz_must(push_frame(state, TZ_OPERATION_STEP_FIELD)); - op->frame->step_field.field = field; - } - tz_continue; -} - /* Update the state in order to read a field of an operation based on its kind * If the field is not ignored, update the field_info with the field * information @@ -1130,6 +1129,9 @@ tz_operation_parser_step(tz_parser_state *state) case TZ_OPERATION_STEP_OPTION: tz_must(tz_step_option(state)); break; + case TZ_OPERATION_STEP_TUPLE: + tz_must(tz_step_tuple(state)); + break; case TZ_OPERATION_STEP_MAGIC: tz_must(tz_step_magic(state)); break; @@ -1169,9 +1171,6 @@ tz_operation_parser_step(tz_parser_state *state) case TZ_OPERATION_STEP_FIELD: tz_must(tz_step_field(state)); break; - case TZ_OPERATION_STEP_OPERATION: - tz_must(tz_step_operation(state)); - break; case TZ_OPERATION_STEP_READ_PK: tz_must(tz_step_read_pk(state)); break; diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index 6d0a42f2a..8f79f1e53 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -40,6 +40,7 @@ typedef enum { typedef enum { TZ_OPERATION_STEP_OPTION, + TZ_OPERATION_STEP_TUPLE, TZ_OPERATION_STEP_MAGIC, TZ_OPERATION_STEP_READ_BINARY, TZ_OPERATION_STEP_BRANCH, @@ -47,7 +48,6 @@ typedef enum { TZ_OPERATION_STEP_TAG, TZ_OPERATION_STEP_SIZE, TZ_OPERATION_STEP_FIELD, - TZ_OPERATION_STEP_OPERATION, TZ_OPERATION_STEP_PRINT, TZ_OPERATION_STEP_PARTIAL_PRINT, TZ_OPERATION_STEP_READ_NUM, @@ -127,7 +127,7 @@ typedef struct { struct { const tz_operation_field_descriptor *fields; uint8_t field_index; - } step_operation; + } step_tuple; struct { const char *str; } step_print; From 3a834a548ed5845661a85c0a6170dd96917d4c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 11 Jan 2024 09:55:55 +0100 Subject: [PATCH 22/78] Parser: use a tuple field instead of the parameter field --- app/src/parser/operation_parser.c | 32 ++++++++++++++++++++----------- app/src/parser/operation_state.h | 6 +++++- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index f5317b464..dfbbc0012 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -72,6 +72,16 @@ const char *const tz_operation_parser_step_name[] = {"OPTION", }, \ __VA_ARGS__} +#define TZ_OPERATION_TUPLE_FIELD(name_v, ...) \ + {.name=name_v, .kind=TZ_OPERATION_FIELD_TUPLE, \ + .field_tuple={ \ + .fields=(const tz_operation_field_descriptor[]){ \ + __VA_ARGS__, \ + TZ_OPERATION_LAST_FIELD \ + } \ + } \ + } + #define TZ_OPERATION_FIELDS(name, ...) \ const tz_operation_field_descriptor name[] = { __VA_ARGS__, TZ_OPERATION_LAST_FIELD} @@ -104,7 +114,9 @@ TZ_OPERATION_FIELDS(transaction_fields, TZ_OPERATION_FIELD("Amount", TZ_OPERATION_FIELD_AMOUNT), TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION), TZ_OPERATION_OPTION_FIELD("_Parameters", - TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_PARAMETER, .complex=true), + TZ_OPERATION_TUPLE_FIELD("_Parameters", + TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_SMART_ENTRYPOINT, .complex=true), + TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_EXPR)), .display_none=false) ); @@ -792,6 +804,12 @@ tz_step_field(tz_parser_state *state) = field->field_option.display_none; break; } + case TZ_OPERATION_FIELD_TUPLE: { + op->frame->step = TZ_OPERATION_STEP_TUPLE; + op->frame->step_tuple.fields = field->field_tuple.fields; + op->frame->step_tuple.field_index = 0; + break; + } case TZ_OPERATION_FIELD_BINARY: { op->frame->step = TZ_OPERATION_STEP_READ_BINARY; op->frame->step_read_string.ofs = 0; @@ -884,16 +902,8 @@ tz_step_field(tz_parser_state *state) op->frame->step_read_int32.skip = field->skip; break; } - case TZ_OPERATION_FIELD_PARAMETER: { - op->frame->step = TZ_OPERATION_STEP_READ_MICHELINE; - op->frame->step_read_micheline.inited = 0; - op->frame->step_read_micheline.skip = field->skip; - op->frame->step_read_micheline.name = name; - tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); - op->frame->step_size.size = 0; - op->frame->step_size.size_len = 4; - tz_must(push_frame(state, TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT)); - STRLCPY(state->field_info.field_name, "Entrypoint"); + case TZ_OPERATION_FIELD_SMART_ENTRYPOINT: { + op->frame->step = TZ_OPERATION_STEP_READ_SMART_ENTRYPOINT; op->frame->step_read_string.ofs = 0; op->frame->step_read_string.skip = field->skip; break; diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index 8f79f1e53..a9ec5efa8 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -66,6 +66,7 @@ typedef enum { typedef enum { TZ_OPERATION_FIELD_END = 0, // not for use in field descriptors TZ_OPERATION_FIELD_OPTION, + TZ_OPERATION_FIELD_TUPLE, TZ_OPERATION_FIELD_BINARY, TZ_OPERATION_FIELD_INT, TZ_OPERATION_FIELD_NAT, @@ -81,7 +82,7 @@ typedef enum { TZ_OPERATION_FIELD_PROTO, TZ_OPERATION_FIELD_PROTOS, TZ_OPERATION_FIELD_DESTINATION, - TZ_OPERATION_FIELD_PARAMETER, + TZ_OPERATION_FIELD_SMART_ENTRYPOINT, TZ_OPERATION_FIELD_EXPR, TZ_OPERATION_FIELD_OPH, TZ_OPERATION_FIELD_BH, @@ -102,6 +103,9 @@ typedef struct tz_operation_field_descriptor { tz_operation_field_kind kind : 5; union { tz_operation_option_field_descriptor field_option; + struct { + const struct tz_operation_field_descriptor *fields; + } field_tuple; }; uint8_t skip : 1, complex : 1; } tz_operation_field_descriptor; From 80762b9994b39c51039178330010b74f62ef1ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 11 Jan 2024 09:56:46 +0100 Subject: [PATCH 23/78] Parser: make the transaction's field parameter a complex field --- app/src/parser/operation_parser.c | 2 +- tests/generate/gen_integration.ml | 3 ++- .../nanos/regression_batched_ops/00011.png | Bin 462 -> 499 bytes .../nanos/regression_batched_ops/00012.png | Bin 455 -> 462 bytes .../nanos/regression_batched_ops/00013.png | Bin 472 -> 455 bytes .../nanos/regression_batched_ops/00014.png | Bin 437 -> 472 bytes .../nanos/regression_batched_ops/00015.png | Bin 450 -> 437 bytes .../nanos/regression_batched_ops/00016.png | Bin 442 -> 450 bytes .../nanos/regression_batched_ops/00017.png | Bin 478 -> 442 bytes .../nanos/regression_batched_ops/00018.png | Bin 448 -> 478 bytes .../nanos/regression_batched_ops/00019.png | Bin 466 -> 448 bytes .../nanos/regression_batched_ops/00020.png | Bin 468 -> 466 bytes .../nanos/regression_batched_ops/00021.png | Bin 464 -> 468 bytes .../nanos/regression_batched_ops/00022.png | Bin 462 -> 464 bytes .../nanos/regression_batched_ops/00023.png | Bin 471 -> 462 bytes .../nanos/regression_batched_ops/00024.png | Bin 469 -> 471 bytes .../nanos/regression_batched_ops/00025.png | Bin 440 -> 469 bytes .../nanos/regression_batched_ops/00026.png | Bin 351 -> 440 bytes .../nanos/regression_batched_ops/00027.png | Bin 427 -> 351 bytes .../nanos/regression_batched_ops/00028.png | Bin 484 -> 427 bytes .../nanos/regression_batched_ops/00029.png | Bin 461 -> 484 bytes .../nanos/regression_batched_ops/00030.png | Bin 320 -> 461 bytes .../nanos/regression_batched_ops/00031.png | Bin 361 -> 320 bytes .../nanos/regression_batched_ops/00032.png | Bin 354 -> 361 bytes .../nanos/regression_batched_ops/00033.png | Bin 497 -> 354 bytes .../nanos/regression_batched_ops/00034.png | Bin 489 -> 497 bytes .../nanos/regression_batched_ops/00035.png | Bin 404 -> 489 bytes .../nanos/regression_batched_ops/00036.png | Bin 0 -> 404 bytes .../test_ensure_always_clearsign/00011.png | Bin 421 -> 499 bytes .../test_ensure_always_clearsign/00012.png | Bin 406 -> 421 bytes .../test_ensure_always_clearsign/00013.png | Bin 402 -> 406 bytes .../test_ensure_always_clearsign/00014.png | Bin 407 -> 402 bytes .../test_ensure_always_clearsign/00015.png | Bin 405 -> 407 bytes .../test_ensure_always_clearsign/00016.png | Bin 422 -> 405 bytes .../test_ensure_always_clearsign/00017.png | Bin 415 -> 422 bytes .../test_ensure_always_clearsign/00018.png | Bin 420 -> 415 bytes .../test_ensure_always_clearsign/00019.png | Bin 414 -> 420 bytes .../test_ensure_always_clearsign/00020.png | Bin 398 -> 414 bytes .../test_ensure_always_clearsign/00021.png | Bin 406 -> 398 bytes .../test_ensure_always_clearsign/00022.png | Bin 401 -> 406 bytes .../test_ensure_always_clearsign/00023.png | Bin 390 -> 401 bytes .../test_ensure_always_clearsign/00024.png | Bin 439 -> 390 bytes .../test_ensure_always_clearsign/00025.png | Bin 314 -> 439 bytes .../test_ensure_always_clearsign/00026.png | Bin 410 -> 314 bytes .../test_ensure_always_clearsign/00027.png | Bin 403 -> 410 bytes .../test_ensure_always_clearsign/00028.png | Bin 392 -> 403 bytes .../test_ensure_always_clearsign/00029.png | Bin 419 -> 392 bytes .../test_ensure_always_clearsign/00030.png | Bin 404 -> 419 bytes .../test_ensure_always_clearsign/00031.png | Bin 404 -> 404 bytes .../test_ensure_always_clearsign/00032.png | Bin 0 -> 404 bytes .../one_byte_added_at_the_end/00011.png | Bin 347 -> 499 bytes .../one_byte_added_at_the_end/00012.png | Bin 465 -> 347 bytes .../one_byte_added_at_the_end/00013.png | Bin 444 -> 465 bytes .../one_byte_added_at_the_end/00014.png | Bin 288 -> 444 bytes .../one_byte_added_at_the_end/00015.png | Bin 0 -> 288 bytes .../reject_signing/00011.png | Bin 421 -> 499 bytes .../reject_signing/00012.png | Bin 406 -> 421 bytes .../reject_signing/00013.png | Bin 402 -> 406 bytes .../reject_signing/00014.png | Bin 407 -> 402 bytes .../reject_signing/00015.png | Bin 405 -> 407 bytes .../reject_signing/00016.png | Bin 422 -> 405 bytes .../reject_signing/00017.png | Bin 415 -> 422 bytes .../reject_signing/00018.png | Bin 420 -> 415 bytes .../reject_signing/00019.png | Bin 414 -> 420 bytes .../reject_signing/00020.png | Bin 398 -> 414 bytes .../reject_signing/00021.png | Bin 406 -> 398 bytes .../reject_signing/00022.png | Bin 401 -> 406 bytes .../reject_signing/00023.png | Bin 390 -> 401 bytes .../reject_signing/00024.png | Bin 439 -> 390 bytes .../reject_signing/00025.png | Bin 314 -> 439 bytes .../reject_signing/00026.png | Bin 410 -> 314 bytes .../reject_signing/00027.png | Bin 403 -> 410 bytes .../reject_signing/00028.png | Bin 392 -> 403 bytes .../reject_signing/00029.png | Bin 419 -> 392 bytes .../reject_signing/00030.png | Bin 404 -> 419 bytes .../reject_signing/00031.png | Bin 404 -> 404 bytes .../reject_signing/00032.png | Bin 341 -> 404 bytes .../reject_signing/00033.png | Bin 0 -> 341 bytes .../nanos/test_reject_transaction/00011.png | Bin 421 -> 499 bytes .../nanos/test_reject_transaction/00012.png | Bin 406 -> 421 bytes .../nanos/test_reject_transaction/00013.png | Bin 402 -> 406 bytes .../nanos/test_reject_transaction/00014.png | Bin 407 -> 402 bytes .../nanos/test_reject_transaction/00015.png | Bin 405 -> 407 bytes .../nanos/test_reject_transaction/00016.png | Bin 422 -> 405 bytes .../nanos/test_reject_transaction/00017.png | Bin 415 -> 422 bytes .../nanos/test_reject_transaction/00018.png | Bin 420 -> 415 bytes .../nanos/test_reject_transaction/00019.png | Bin 414 -> 420 bytes .../nanos/test_reject_transaction/00020.png | Bin 398 -> 414 bytes .../nanos/test_reject_transaction/00021.png | Bin 406 -> 398 bytes .../nanos/test_reject_transaction/00022.png | Bin 401 -> 406 bytes .../nanos/test_reject_transaction/00023.png | Bin 390 -> 401 bytes .../nanos/test_reject_transaction/00024.png | Bin 439 -> 390 bytes .../nanos/test_reject_transaction/00025.png | Bin 314 -> 439 bytes .../nanos/test_reject_transaction/00026.png | Bin 410 -> 314 bytes .../nanos/test_reject_transaction/00027.png | Bin 403 -> 410 bytes .../nanos/test_reject_transaction/00028.png | Bin 392 -> 403 bytes .../nanos/test_reject_transaction/00029.png | Bin 419 -> 392 bytes .../nanos/test_reject_transaction/00030.png | Bin 404 -> 419 bytes .../nanos/test_reject_transaction/00031.png | Bin 404 -> 404 bytes .../nanos/test_reject_transaction/00032.png | Bin 341 -> 404 bytes .../nanos/test_reject_transaction/00033.png | Bin 0 -> 341 bytes .../nanos/test_sign_transaction/00011.png | Bin 347 -> 499 bytes .../nanos/test_sign_transaction/00012.png | Bin 404 -> 347 bytes .../nanos/test_sign_transaction/00013.png | Bin 0 -> 404 bytes .../test_sign_with_another_seed/00011.png | Bin 347 -> 499 bytes .../test_sign_with_another_seed/00012.png | Bin 404 -> 347 bytes .../test_sign_with_another_seed/00013.png | Bin 0 -> 404 bytes .../nanos/test_sign_with_long_hash/00012.png | Bin 303 -> 499 bytes .../nanos/test_sign_with_long_hash/00013.png | Bin 404 -> 303 bytes .../nanos/test_sign_with_long_hash/00014.png | Bin 0 -> 404 bytes .../test_sign_with_small_packet/00011.png | Bin 347 -> 499 bytes .../test_sign_with_small_packet/00012.png | Bin 404 -> 347 bytes .../test_sign_with_small_packet/00013.png | Bin 0 -> 404 bytes .../test_ensure_always_clearsign/00009.png | Bin 743 -> 542 bytes .../test_ensure_always_clearsign/00010.png | Bin 734 -> 743 bytes .../test_ensure_always_clearsign/00011.png | Bin 740 -> 734 bytes .../test_ensure_always_clearsign/00012.png | Bin 716 -> 740 bytes .../test_ensure_always_clearsign/00013.png | Bin 743 -> 716 bytes .../test_ensure_always_clearsign/00014.png | Bin 459 -> 743 bytes .../test_ensure_always_clearsign/00015.png | Bin 0 -> 459 bytes .../one_byte_added_at_the_end/00009.png | Bin 371 -> 542 bytes .../one_byte_added_at_the_end/00010.png | Bin 506 -> 371 bytes .../one_byte_added_at_the_end/00011.png | Bin 483 -> 506 bytes .../one_byte_added_at_the_end/00012.png | Bin 306 -> 483 bytes .../one_byte_added_at_the_end/00013.png | Bin 0 -> 306 bytes .../reject_signing/00009.png | Bin 743 -> 542 bytes .../reject_signing/00010.png | Bin 734 -> 743 bytes .../reject_signing/00011.png | Bin 740 -> 734 bytes .../reject_signing/00012.png | Bin 716 -> 740 bytes .../reject_signing/00013.png | Bin 743 -> 716 bytes .../reject_signing/00014.png | Bin 459 -> 743 bytes .../reject_signing/00015.png | Bin 366 -> 459 bytes .../reject_signing/00016.png | Bin 0 -> 366 bytes .../nanosp/test_reject_transaction/00009.png | Bin 743 -> 542 bytes .../nanosp/test_reject_transaction/00010.png | Bin 734 -> 743 bytes .../nanosp/test_reject_transaction/00011.png | Bin 740 -> 734 bytes .../nanosp/test_reject_transaction/00012.png | Bin 716 -> 740 bytes .../nanosp/test_reject_transaction/00013.png | Bin 743 -> 716 bytes .../nanosp/test_reject_transaction/00014.png | Bin 459 -> 743 bytes .../nanosp/test_reject_transaction/00015.png | Bin 366 -> 459 bytes .../nanosp/test_reject_transaction/00016.png | Bin 0 -> 366 bytes .../nanosp/test_sign_transaction/00009.png | Bin 371 -> 542 bytes .../nanosp/test_sign_transaction/00010.png | Bin 459 -> 371 bytes .../nanosp/test_sign_transaction/00011.png | Bin 0 -> 459 bytes .../test_sign_with_another_seed/00009.png | Bin 371 -> 542 bytes .../test_sign_with_another_seed/00010.png | Bin 459 -> 371 bytes .../test_sign_with_another_seed/00011.png | Bin 0 -> 459 bytes .../nanosp/test_sign_with_long_hash/00009.png | Bin 327 -> 542 bytes .../nanosp/test_sign_with_long_hash/00010.png | Bin 459 -> 327 bytes .../nanosp/test_sign_with_long_hash/00011.png | Bin 0 -> 459 bytes .../test_sign_with_small_packet/00009.png | Bin 371 -> 542 bytes .../test_sign_with_small_packet/00010.png | Bin 459 -> 371 bytes .../test_sign_with_small_packet/00011.png | Bin 0 -> 459 bytes .../nanox/regression_batched_ops/00009.png | Bin 968 -> 542 bytes .../nanox/regression_batched_ops/00010.png | Bin 984 -> 968 bytes .../nanox/regression_batched_ops/00011.png | Bin 1048 -> 984 bytes .../nanox/regression_batched_ops/00012.png | Bin 916 -> 1048 bytes .../nanox/regression_batched_ops/00013.png | Bin 458 -> 916 bytes .../nanox/regression_batched_ops/00014.png | Bin 707 -> 458 bytes .../nanox/regression_batched_ops/00015.png | Bin 340 -> 707 bytes .../nanox/regression_batched_ops/00016.png | Bin 386 -> 340 bytes .../nanox/regression_batched_ops/00017.png | Bin 374 -> 386 bytes .../nanox/regression_batched_ops/00018.png | Bin 734 -> 374 bytes .../nanox/regression_batched_ops/00019.png | Bin 459 -> 734 bytes .../nanox/regression_batched_ops/00020.png | Bin 0 -> 459 bytes .../test_ensure_always_clearsign/00009.png | Bin 743 -> 542 bytes .../test_ensure_always_clearsign/00010.png | Bin 734 -> 743 bytes .../test_ensure_always_clearsign/00011.png | Bin 740 -> 734 bytes .../test_ensure_always_clearsign/00012.png | Bin 716 -> 740 bytes .../test_ensure_always_clearsign/00013.png | Bin 743 -> 716 bytes .../test_ensure_always_clearsign/00014.png | Bin 459 -> 743 bytes .../test_ensure_always_clearsign/00015.png | Bin 0 -> 459 bytes .../one_byte_added_at_the_end/00009.png | Bin 371 -> 542 bytes .../one_byte_added_at_the_end/00010.png | Bin 506 -> 371 bytes .../one_byte_added_at_the_end/00011.png | Bin 483 -> 506 bytes .../one_byte_added_at_the_end/00012.png | Bin 306 -> 483 bytes .../one_byte_added_at_the_end/00013.png | Bin 0 -> 306 bytes .../reject_signing/00009.png | Bin 743 -> 542 bytes .../reject_signing/00010.png | Bin 734 -> 743 bytes .../reject_signing/00011.png | Bin 740 -> 734 bytes .../reject_signing/00012.png | Bin 716 -> 740 bytes .../reject_signing/00013.png | Bin 743 -> 716 bytes .../reject_signing/00014.png | Bin 459 -> 743 bytes .../reject_signing/00015.png | Bin 366 -> 459 bytes .../reject_signing/00016.png | Bin 0 -> 366 bytes .../nanox/test_reject_transaction/00009.png | Bin 743 -> 542 bytes .../nanox/test_reject_transaction/00010.png | Bin 734 -> 743 bytes .../nanox/test_reject_transaction/00011.png | Bin 740 -> 734 bytes .../nanox/test_reject_transaction/00012.png | Bin 716 -> 740 bytes .../nanox/test_reject_transaction/00013.png | Bin 743 -> 716 bytes .../nanox/test_reject_transaction/00014.png | Bin 459 -> 743 bytes .../nanox/test_reject_transaction/00015.png | Bin 366 -> 459 bytes .../nanox/test_reject_transaction/00016.png | Bin 0 -> 366 bytes .../nanox/test_sign_transaction/00009.png | Bin 371 -> 542 bytes .../nanox/test_sign_transaction/00010.png | Bin 459 -> 371 bytes .../nanox/test_sign_transaction/00011.png | Bin 0 -> 459 bytes .../test_sign_with_another_seed/00009.png | Bin 371 -> 542 bytes .../test_sign_with_another_seed/00010.png | Bin 459 -> 371 bytes .../test_sign_with_another_seed/00011.png | Bin 0 -> 459 bytes .../nanox/test_sign_with_long_hash/00009.png | Bin 327 -> 542 bytes .../nanox/test_sign_with_long_hash/00010.png | Bin 459 -> 327 bytes .../nanox/test_sign_with_long_hash/00011.png | Bin 0 -> 459 bytes .../test_sign_with_small_packet/00009.png | Bin 371 -> 542 bytes .../test_sign_with_small_packet/00010.png | Bin 459 -> 371 bytes .../test_sign_with_small_packet/00011.png | Bin 0 -> 459 bytes .../test_blindsign_valid/tst_review_003.png | Bin 8687 -> 6913 bytes .../test_blindsign_valid/tst_review_004.png | Bin 0 -> 7168 bytes .../tpe_review_0_03_full.png | Bin 8687 -> 6913 bytes .../tpe_review_0_04_full.png | Bin 0 -> 7168 bytes .../test_sign_transfer/tst_review_003.png | Bin 8687 -> 6913 bytes .../test_sign_transfer/tst_review_004.png | Bin 0 -> 7168 bytes .../review_2.png | Bin 8687 -> 6913 bytes .../review_3.png | Bin 0 -> 7168 bytes .../integration/stax/test_blindsign_valid.py | 4 +++ tests/integration/stax/test_parsing_errors.py | 4 +++ tests/integration/stax/test_sign_transfer.py | 12 +++++++++ .../stax/test_sign_transfer_without_hash.py | 6 +++++ tests/unit/ctest/tests_parser.c | 25 +++++++++++------- 218 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 tests/integration/nano/snapshots/nanos/regression_batched_ops/00036.png create mode 100644 tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00032.png create mode 100644 tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_added_at_the_end/00015.png create mode 100644 tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00033.png create mode 100644 tests/integration/nano/snapshots/nanos/test_reject_transaction/00033.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_transaction/00013.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_with_another_seed/00013.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_with_long_hash/00014.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_with_small_packet/00013.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00015.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00013.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00016.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_reject_transaction/00016.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_transaction/00011.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00011.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00011.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00011.png create mode 100644 tests/integration/nano/snapshots/nanox/regression_batched_ops/00020.png create mode 100644 tests/integration/nano/snapshots/nanox/test_ensure_always_clearsign/00015.png create mode 100644 tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_added_at_the_end/00013.png create mode 100644 tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00016.png create mode 100644 tests/integration/nano/snapshots/nanox/test_reject_transaction/00016.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_transaction/00011.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_with_another_seed/00011.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_with_long_hash/00011.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_with_small_packet/00011.png create mode 100644 tests/integration/stax/snapshots/test_blindsign_valid/tst_review_004.png create mode 100644 tests/integration/stax/snapshots/test_parsing_errors/tpe_review_0_04_full.png create mode 100644 tests/integration/stax/snapshots/test_sign_transfer/tst_review_004.png create mode 100644 tests/integration/stax/snapshots/test_sign_transfer_without_hash/review_3.png diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index dfbbc0012..db2a9b495 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -116,7 +116,7 @@ TZ_OPERATION_FIELDS(transaction_fields, TZ_OPERATION_OPTION_FIELD("_Parameters", TZ_OPERATION_TUPLE_FIELD("_Parameters", TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_SMART_ENTRYPOINT, .complex=true), - TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_EXPR)), + TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_EXPR, .complex=true)), .display_none=false) ); diff --git a/tests/generate/gen_integration.ml b/tests/generate/gen_integration.ml index 129ac7cd1..053011190 100644 --- a/tests/generate/gen_integration.ml +++ b/tests/generate/gen_integration.ml @@ -279,8 +279,9 @@ let operation_to_screens then [] else [ - need_expert_mode_screen "Parameter"; + need_expert_mode_screen "Entrypoint"; make_screen ~title:"Entrypoint" "%a" Entrypoint.pp entrypoint; + need_expert_mode_screen "Parameter"; make_screen ~title:"Parameter" "%a" pp_lazy_expr parameters; ] in diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00011.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00011.png index c6158a7d25dd7a3b5a9d51e70f954334fec477e9..92b4bce4e0b6ca6910717fd0d8adde36278ae65b 100644 GIT binary patch delta 473 zcmV;~0Ve*=1M>rrB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf??~rw delta 436 zcmV;l0Zab#1I`1GB!87jL_t(|ob8#>uEQV*hV8QR{tvv1oeL9#iWDr+F8ROgVr>!i zucFwar1AZ9m&adT)eq*y+#8hg1-1<^I_ip>N{h@n8Z`rYI zszN9z+l1=S&x7~sL16WbRWzVzY&3OUvGJuBxer0p1o=sxse9#Q4Jf(qppEO(KxEy( z&{D(t-0rY8q2w>I001Cz__&diCe~h#hO!@;0nBEC^Svm%s%6!@8(_E9S5`K8pT1q4 z?CoN!wwR70B7azA{3T`_vGb!$$ppO&I(tx%@&e?X*4k}T7-5ehs2_d$IhZ*O9gi1q z+Omza1ge)T&|R^3FFBtGm;tO1PR%uY-i|Fp!LS^P`yOD$J$W8ZkCjIYtN6Aj+;%}D zDQiG+9s8z3LuG)nPL#NB2AjCY7Uecn<3V5K4m?6oB`x9|JXJMEoHF5OqD;#H00000 e00000kj6h+kOkT4HdqJ%0000uEQV*hV8QR{tvv1oeL9#iWDr+F8ROgVr>!i zucFwar1AZ9m&adT)eq*y+#8hg1-1<^I_ip>N{h@n8Z`rYI zszN9z+l1=S&x7~sL16WbRWzVzY&3OUvGJuBxer0p1o=sxse9#Q4Jf(qppEO(KxEy( z&{D(t-0rY8q2w>I001Cz__&diCe~h#hO!@;0nBEC^Svm%s%6!@8(_E9S5`K8pT1q4 z?CoN!wwR70B7azA{3T`_vGb!$$ppO&I(tx%@&e?X*4k}T7-5ehs2_d$IhZ*O9gi1q z+Omza1ge)T&|R^3FFBtGm;tO1PR%uY-i|Fp!LS^P`yOD$J$W8ZkCjIYtN6Aj+;%}D zDQiG+9s8z3LuG)nPL#NB2AjCY7Uecn<3V5K4m?6oB`x9|JXJMEoHF5OqD;#H00000 e00000kj6h+kOkT4HdqJ%0000K delta 429 zcmV;e0aE_X1IGi9B!7-cL_t(|ob8xN4#OY}MM;(3|G-_e3nb(TV+fE``cGX1YRtz8 zW;oI|z8_XR-ut?KFfXG{L~1TK#{K(QJG6)Z#c3Grj1kpT`pp{hU*#caLk(!FQY=l( z-i6z_WY63!p8=brpEc!Q;^7dXsoBt|QAz~0fpDcguTB8mKYy74d!jFf=Zx0;mb%HXh2a@+ z??~c000000000009Nw@ XmDE3=$>kXY00000NkvXXu0mjfz;ex^ diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00013.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00013.png index a1d031e413a910444398ca1fd2da1e1805ba4271..aba10d4bb53bd2a79f1605b88dbd86788b964ba6 100644 GIT binary patch delta 429 zcmV;e0aE_h1IGi9B!7-cL_t(|ob8xN4#OY}MM;(3|G-_e3nb(TV+fE``cGX1YRtz8 zW;oI|z8_XR-ut?KFfXG{L~1TK#{K(QJG6)Z#c3Grj1kpT`pp{hU*#caLk(!FQY=l( z-i6z_WY63!p8=brpEc!Q;^7dXsoBt|QAz~0fpDcguTB8mKYy74d!jFf=Zx0;mb%HXh2a@+ z??~c000000000009Nw@ XmDE3=$>kXY00000NkvXXu0mjf(KOAh delta 446 zcmV;v0YU!91K0zQB!8btL_t(|ob8#xlEWYfhRsg<{tw(kdvJz9KqNL2yYqjuhfRW@ zs3`O(X}n*}^)I-qzMLYY3|eImQH5A_rM6O`csycIoC z6Vtj-do5LStG3+%$=eUNqoDWFoe{k-3)E$!!Qy8{{Y1)9;nR8BlWPfY$Xe5S_ii z@K)k{rZ=X{Qu2>j003|~Cfn&$#Yu&9;1khMhiUU(-_zDp>vX%9f(13-9L@D5S|4Km z9lV!wMc#aKV1GtBZ0e7vFDFr@h}H01KPc>cCB!OrHs8=LQv14 zLXuKKe@K3+JamUSNfX)VaC9!S6QIZJl(&XNB>i$*1mU1PuH;h_Fy{ikyUY3YVhYcd zD0U+847mLkkyGqC$0000000000001D14}Xsp&VC{!l>h($07*qoM6N<$g5XQt_y7O^ diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00014.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00014.png index 51e439646733e7b44f89db85c981cd53a1283b75..a1d031e413a910444398ca1fd2da1e1805ba4271 100644 GIT binary patch delta 446 zcmV;v0YUz?1K0zQB!8btL_t(|ob8#xlEWYfhRsg<{tw(kdvJz9KqNL2yYqjuhfRW@ zs3`O(X}n*}^)I-qzMLYY3|eImQH5A_rM6O`csycIoC z6Vtj-do5LStG3+%$=eUNqoDWFoe{k-3)E$!!Qy8{{Y1)9;nR8BlWPfY$Xe5S_ii z@K)k{rZ=X{Qu2>j003|~Cfn&$#Yu&9;1khMhiUU(-_zDp>vX%9f(13-9L@D5S|4Km z9lV!wMc#aKV1GtBZ0e7vFDFr@h}H01KPc>cCB!OrHs8=LQv14 zLXuKKe@K3+JamUSNfX)VaC9!S6QIZJl(&XNB>i$*1mU1PuH;h_Fy{ikyUY3YVhYcd zD0U+847mLkkyGqC$0000000000001D14}Xsp&VC{!l>h($07*qoM6N<$g23fTNMo=(-})m)Oa13d#cHk<97$Kw}SBeCL4Hbu$rJ4=}t{ zvOm)uQD!LqTPy$o45ywz`GHT9aGU9vdQc{AtHz7w-HB+Nc;db?4AUEv#<`{mu!^E#Nx=qVLX?8B8iBM*1EwGw&#tFnUKovM*^0d|ggN%fGPP+`99f zv-HV9seSgC>%L&$6#-96L4kM80RR9100000004j&KNQFd80ov7Pr(2H002ovPDHLk FV1o1n%9sEE diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00015.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00015.png index 81da7862777a2aef8946928ac83eef32d4b69c4a..51e439646733e7b44f89db85c981cd53a1283b75 100644 GIT binary patch delta 411 zcmV;M0c8Hd1GNK?B!7HKL_t(|ob8#x5`-WKhHIyN{|D~S9-L)RQK6Kq`M=r2Rw#&q zM(g6nu}7Ed*H87te1v<6r}}cE-;aIl&@={QY=V%dkGM^wH`ov!(I2G@7vQbvlA4Ix zlWzMGdXBq|Bf#1F!KUzAVs|92DamlJama(YK+;v-^XLQ+_kYhKz{mT^@G7Gf*Rn}P zrD0uWs2}1u*h&uuswYa>fTNMo=(-})m)Oa13d#cHk<97$Kw}SBeCL4Hbu$rJ4=}t{ zvOm)uQD!LqTPy$o45ywz`GHT9aGU9vdQc{AtHz7w-HB+Nc;db?4AUEv#<`{mu!^E#Nx=qVLX?8B8iBM*1EwGw&#tFnUKovM*^0d|ggN%fGPP+`99f zv-HV9seSgC>%L&$6#-96L4kM80RR9100000004j&KNQFd80ov7Pr(2H002ovPDHLk FV1m%H%7Op@ delta 424 zcmV;Z0ayOD1HuE4B!7uXL_t(|ob8#x4#OY_hV8Pw{{!!^9ZZ-CB35u)^MBc4Z4s0z z3O&*`UeD_Ccji-G1qTgT7*r8cEz_<%SJAG94iR|V+}`P zh}IjmzGTg{+Ij_S_I~bD{-xR-jca-`rPoTxgIu6d#WhC$sZzZsq~T5&E< znNS+)GNFE`*TKE_AkaL~iv}eY8H=qI8DDBA*CB{4kiXJ*Q005{Q=bQGjmGXH0vD1%zdSp}%`%}GIl+hEtp|&W*y-Pe|pWfxB z@*_)+^DZ+S(*7@ZPJB;E7M zm;%w-3m6V^7&;em(Ppf^@l|5n>40bK-!o1O1#AXW~LEgrKXt1|a|d000000002sa=Zcky#wT@ SOgji-G1qTgT7*r8cEz_<%SJAG94iR|V+}`P zh}IjmzGTg{+Ij_S_I~bD{-xR-jca-`rPoTxgIu6d#WhC$sZzZsq~T5&E< znNS+)GNFE`*TKE_AkaL~iv}eY8H=qI8DDBA*CB{4kiXJ*Q005{Q=bQGjmGXH0vD1%zdSp}%`%}GIl+hEtp|&W*y-Pe|pWfxB z@*_)+^DZ+S(*7@ZPJB;E7M zm;%w-3m6V^7&;em(Ppf^@l|5n>40bK-!o1O1#AXW~LEgrKXt1|a|d000000002sa=Zcky#wT@ SOgZKwhDDwoAY z?7ay)mmIkcTaSR?>}O5+m+EvhsnKj`)+i-|+@J}?Bd?wS>VNoT1jJ;&c|7B3#c%ni zE(}N8W@#Skad2uk7It6IW&?`H#?#k`&0Ojv*HaK1Ah%@Cyk|OVK#F|_<-6`qM89re zs8_Q-mln}xDe+4z005XAax*`P_*;^G%(>=e)G&-LxVyHmHQH@4+Cv#$t~G$~k@FvZ zP|}W0&VZsJxAXGF$G zZReUiw}z=NpnF~wt2fS>dPIg+G7=RwUe`vy=EXEjeF2=?9X-O;`qqGLxqsory$wxD z)wjDb)e6O0i+|Ucq#0u*pr)3ZMQlR>000000000002u%P3-|y@dn>K;-K=W>0000< KMNUMnLSTZZ7{np~ diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00017.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00017.png index 37311841295dcc87812d9a38ba3ef99cb9a2309a..b3c17e476a565bf5d879dd000411a84b6c38f79a 100644 GIT binary patch delta 416 zcmV;R0bl;!1G)o{B!7WPL_t(|ob8xN4#OY}MM;(3|G-_e3shwAfE&Oi(tqlrA-4H( z!sH``@qSg8$1|?$jd=)dO{V7Z$GpE^Yah)cfN=^&kvXE8O21h{zE%D>ZKwhDDwoAY z?7ay)mmIkcTaSR?>}O5+m+EvhsnKj`)+i-|+@J}?Bd?wS>VNoT1jJ;&c|7B3#c%ni zE(}N8W@#Skad2uk7It6IW&?`H#?#k`&0Ojv*HaK1Ah%@Cyk|OVK#F|_<-6`qM89re zs8_Q-mln}xDe+4z005XAax*`P_*;^G%(>=e)G&-LxVyHmHQH@4+Cv#$t~G$~k@FvZ zP|}W0&VZsJxAXGF$G zZReUiw}z=NpnF~wt2fS>dPIg+G7=RwUe`vy=EXEjeF2=?9X-O;`qqGLxqsory$wxD z)wjDb)e6O0i+|Ucq#0u*pr)3ZMQlR>000000000002u%P3-|y@dn>K;-K=W>0000< KMNUMnLSTZ`n8ZE+ delta 452 zcmV;#0XzP>1KtCWB!8tzL_t(|ob8y|j>8}fMaii1{~z3k%mWfK-ndDCX{CGAhb-P= ziZL8z8|S;bJ%0DO{$PHbXDU;3`NzDU@3o(X1YmeMLOXLLV`_eD4E0sJ0A-|r)M~d) z#r3Yt&ZS!J&Gs{3bM|XY^;i0IsMJIOdlif=2=##uIt*sY33e zl=RMsR$@n9B!BX`NB0`Bmc#=J*vJttr4+vly1~T7{Tus)2knhH3&LGi62}uyR1kNO z7+4IS#1>T~zzaM8>NrLDaB&Z6^1_{)vPRVIT^-e_Fl=Bqz_l8}fMaii1{~z3k%mWfK-ndDCX{CGAhb-P= ziZL8z8|S;bJ%0DO{$PHbXDU;3`NzDU@3o(X1YmeMLOXLLV`_eD4E0sJ0A-|r)M~d) z#r3Yt&ZS!J&Gs{3bM|XY^;i0IsMJIOdlif=2=##uIt*sY33e zl=RMsR$@n9B!BX`NB0`Bmc#=J*vJttr4+vly1~T7{Tus)2knhH3&LGi62}uyR1kNO z7+4IS#1>T~zzaM8>NrLDaB&Z6^1_{)vPRVIT^-e_Fl=Bqz_llK;ytR*Ohc zP(0E$zMtmtc<&qf!Mubv;;FUV==bj@_R}l|Fit^er;loz%DCBv{Hpvh%G3gNuku*B zh@%s=Yss2hwQU4!_I|c0|5ED?;u=k+_F7HxAQvF2xaQ~t(0}T$B4CgA$>(*xR$R+d zLv%X!WkUVX#=)t*2pqnkWrG@vjAg7VGHYp_+@>HFAb-g-{hk@@0cr0XlyyB!M6(B& zx)<4>ON%HI%Kj}D006oio=!Zg@?*GG>1Yc3$lK;ytR*Ohc zP(0E$zMtmtc<&qf!Mubv;;FUV==bj@_R}l|Fit^er;loz%DCBv{Hpvh%G3gNuku*B zh@%s=Yss2hwQU4!_I|c0|5ED?;u=k+_F7HxAQvF2xaQ~t(0}T$B4CgA$>(*xR$R+d zLv%X!WkUVX#=)t*2pqnkWrG@vjAg7VGHYp_+@>HFAb-g-{hk@@0cr0XlyyB!M6(B& zx)<4>ON%HI%Kj}D006oio=!Zg@?*GG>1Yc3$8}fgvqM={tw(k_kd&>{F8wK+e-7PhlH5H zxWPDFqu%{(A168sdQA;TWBak@iW(tv=L8ask?C1Kmq* zrHeayC%cxa+{(5q;BfS-PxV*YaCD)GY;@E#54 z!02Ax{wyu7%~sBDv4jwka{0~fw@*ncZreBdCIVZmRIVJEmOId8NJM$m0Yn^8R*b9wD=~ds6X{R9GDsItdCmc(S8NmP0nrha zoE;AF6~`O+|_(}jq7d+b}??Q1Cc-0B|GBn>_)3_LI@#* i5JCtcgb+f=dHw*pFKp2&&z5rl00008}fgvqM={tw(k_kd&>{F8wK+e-7PhlH5H zxWPDFqu%{(A168sdQA;TWBak@iW(tv=L8ask?C1Kmq* zrHeayC%cxa+{(5q;BfS-PxV*YaCD)GY;@E#54 z!02Ax{wyu7%~sBDv4jwka{0~fw@*ncZreBdCIVZmRIVJEmOId8NJM$m0Yn^8R*b9wD=~ds6X{R9GDsItdCmc(S8NmP0nrha zoE;AF6~`O+|_(}jq7d+b}??Q1Cc-0B|GBn>_)3_LI@#* i5JCtcgb+f=dHw*pFKp2&&z5rl0000o~}JB9(0O82OX#xZ^| zn80~#Tm@s^_hOS3G^$`!D=`YopRcgS+6(nLDEY8T*h2QG;Z0fXF09gS(j#VeIf}aAhA0ZwA(0V4V-&* zGaRZStvk^<0UWZ+kI=60@REtTEyr!mc9};vLIYTjQAU&KnSkid%c@lv%VhY1=o?o0 z3MQa9)%nN6z$Mx<4~i>i-J5{6*78=Uisjy+tJaiQi!+?sQ5A_xrQ=y^Zklf5l^6g3 k0000000000001}g2l5Lq#zf73$^ZZW07*qoM6N<$f`jJOga7~l diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00021.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00021.png index ea0f2a1b85412d41e9537b8455aa404bd615ed0f..529129a7a0f7dd6ba52a171023208cd46cc0d204 100644 GIT binary patch delta 442 zcmV;r0Y(1M1JnbMB!8PpL_t(|ob8y)Zp0uAMU!g!{~tVy=>o~}JB9(0O82OX#xZ^| zn80~#Tm@s^_hOS3G^$`!D=`YopRcgS+6(nLDEY8T*h2QG;Z0fXF09gS(j#VeIf}aAhA0ZwA(0V4V-&* zGaRZStvk^<0UWZ+kI=60@REtTEyr!mc9};vLIYTjQAU&KnSkid%c@lv%VhY1=o?o0 z3MQa9)%nN6z$Mx<4~i>i-J5{6*78=Uisjy+tJaiQi!+?sQ5A_xrQ=y^Zklf5l^6g3 k0000000000001}g2l5Lq#zf73$^ZZW07*qoM6N<$f`D?>f&c&j delta 438 zcmV;n0ZIPU1JDDIB!8DlL_t(|ob8$2j>I4ch3#hc{U3NPW-m+#ia$rI*x8&fbJ2D{ zC>5mk3T}Mf$?5g$XZpeX6s~2FTFb$>f8Kj<4ROHmDhPSTNc$vqqYv>fIRIs}fYy>z zQ7Kx_hFwb>IUP350O#mOpW-j1;mAT$lhIMrNCd4wHk2KCcYgs$$5$EP6aDP=8h2Zq z%R?p_ifx&#aY*yvRr_P3d7)MfG>8mh>yFG?(jccL$Rx;D^31qLI%`1ieFieGyM<`9 zfzevo`Ycz9GF$OqVhJI{58K06q9zlYYCk_j&+b@C}I_9EyG@e-GFJ=xgmgT=pz?a4z~`O$NyH zwEM#iFNgO2zyf6xWk^xPz)u4E%H|}~Z74D(uJTp5lrNxv7qx|4ryT&$&+jS8P6#1{ g5JCtcgpeuz0A8z9c@~07*qoM6N<$g0Sh*-v9sr diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00022.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00022.png index f9c016fd8ffc08fcb20cb58b525c73cbc8a613cd..ea0f2a1b85412d41e9537b8455aa404bd615ed0f 100644 GIT binary patch delta 438 zcmV;n0ZIPO1JDDIB!8DlL_t(|ob8$2j>I4ch3#hc{U3NPW-m+#ia$rI*x8&fbJ2D{ zC>5mk3T}Mf$?5g$XZpeX6s~2FTFb$>f8Kj<4ROHmDhPSTNc$vqqYv>fIRIs}fYy>z zQ7Kx_hFwb>IUP350O#mOpW-j1;mAT$lhIMrNCd4wHk2KCcYgs$$5$EP6aDP=8h2Zq z%R?p_ifx&#aY*yvRr_P3d7)MfG>8mh>yFG?(jccL$Rx;D^31qLI%`1ieFieGyM<`9 zfzevo`Ycz9GF$OqVhJI{58K06q9zlYYCk_j&+b@C}I_9EyG@e-GFJ=xgmgT=pz?a4z~`O$NyH zwEM#iFNgO2zyf6xWk^xPz)u4E%H|}~Z74D(uJTp5lrNxv7qx|4ryT&$&+jS8P6#1{ g5JCtcgpeuz0A8z9c@~07*qoM6N<$f~KX?*#H0l delta 436 zcmV;l0ZabS1I`1GB!87jL_t(|ob8#*j>8}fMM>59{}1k>vp_=NS1!-C(mm=Tag1%8 zU=sIA$9TV*)9de?>o4YE$V8^r^1-~nUwfy91fX~tN+)wv$5j0081kiZ0P55V^{8@M zhM3-k*|lWLt=V=39L|1@DgRQN4v`v9r_NeU$)HvcrnKeV1%IHmU#);M*%#9bW@|pn zT`q!wvCh^!wCmvMUD)Wp;8lYfLm^UM)gu)Ooz9dLp#`4-nRo;;1XHmS{Wkoh^67?^tYOTS8%SI3a`(LI@#* e5JCtcWI6xOVo|K|6cC&M00008}fMM>59{}1k>vp_=NS1!-C(mm=Tag1%8 zU=sIA$9TV*)9de?>o4YE$V8^r^1-~nUwfy91fX~tN+)wv$5j0081kiZ0P55V^{8@M zhM3-k*|lWLt=V=39L|1@DgRQN4v`v9r_NeU$)HvcrnKeV1%IHmU#);M*%#9bW@|pn zT`q!wvCh^!wCmvMUD)Wp;8lYfLm^UM)gu)Ooz9dLp#`4-nRo;;1XHmS{Wkoh^67?^tYOTS8%SI3a`(LI@#* e5JCtcWI6xOVo|K|6cC&M00008}fMaii1{~z3k_5lfbk69-p-J?DvU@pcf zX1U5SK5zDV{hsUk!TcCyB2sJl!?=Imdxw^BK=Cq+PR5A()cUPH)T;K7w4nyHReNns z%-)6UTBe$CC`j|g3KB)R$_WJ n<0=3E00000000000AQXkz>r&rf7G7F00000NkvXXu0mjfRs_?z diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00024.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00024.png index a1a29a201b83df603b39082d505ed70a4fad16ea..3ed39eca9c766488c7ac9db99e4d496ec89cd8fc 100644 GIT binary patch delta 445 zcmV;u0Yd)O1J?tPB!8YsL_t(|ob8y|j>8}fMaii1{~z3k_5lfbk69-p-J?DvU@pcf zX1U5SK5zDV{hsUk!TcCyB2sJl!?=Imdxw^BK=Cq+PR5A()cUPH)T;K7w4nyHReNns z%-)6UTBe$CC`j|g3KB)R$_WJ n<0=3E00000000000AQXkz>r&rf7G7F00000NkvXXu0mjfVlUIc delta 443 zcmV;s0Yv`S1JwhNB!8SqL_t(|ob8y)ZUZ3o|zeqkntPNaL(MMJKQ zF~K~}V;k4I`*{BD>-xd`7;Pd`wftk=ulL%aWdcyV4AIUU@tCOJ7DM}r{z+=MfLqZ= zGBJA>Zfj|td$;`x*qr?qQ~Nvmbcob=8lE){Wl#%*EA4r80e|TIvlXx>`(k*(XwBd9 zR2P9^tXZ0eejU8LFBW!Bc-4TD(PaAiL{m$j4-ZrR<6P63Dt)h3Z$Uc=9&p5)Pu^iH zHp`$_k$5C@OO5@{-`?vcAUSxBDE(8>-&^%wK{sW?UhYNSQ#1ipL(*=!3H4%nyHTk; z|4B^oo|zeqkntPNaL(MMJKQ zF~K~}V;k4I`*{BD>-xd`7;Pd`wftk=ulL%aWdcyV4AIUU@tCOJ7DM}r{z+=MfLqZ= zGBJA>Zfj|td$;`x*qr?qQ~Nvmbcob=8lE){Wl#%*EA4r80e|TIvlXx>`(k*(XwBd9 zR2P9^tXZ0eejU8LFBW!Bc-4TD(PaAiL{m$j4-ZrR<6P63Dt)h3Z$Uc=9&p5)Pu^iH zHp`$_k$5C@OO5@{-`?vcAUSxBDE(8>-&^%wK{sW?UhYNSQ#1ipL(*=!3H4%nyHTk; z|4B^o&` z4Kb|?wQEV5bG3N{1baWtDgCb89l|vw8SXU>c~A=oRa*1z1b>k0XAuzNeQ|r0yEWhC zE)$i3b(yVx$m8Hyy0FnaQOX7!kBrCGjLcecC+8_h1;~-y)9;B!4Y*>T0lnAFMAW;0 z;iE)-rZc9@R^m%6004wSDb>uXy=(1ecIFDVW^@1Qxf8V$o@Z>ys1YTrS;5Y%Z=(-D zZ~f=tI@5pAX@BVL5cvBOTEJ<=Y?DM#-#3{8rA|X>U^D84!iv19vtqGstEsSur71|X zTzZ$iGg(WtcZLbyhi<3=!_0^9{4O%QkXYXXh7n!gGpk}Sfe|2*l5RLR3!um_T%msP zJqrCpN}nZeM}4KgJj0&fI@}Ne=Q{-e0000000000;1{3r1y2JJLv#Cx%>V!Z07*qo IM6N<$g5N5^a{vGU diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00026.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00026.png index 0778ddec01d74c65e67a555163fc32ac9cf6236d..a73970865bd7c893ef7371fbc7a0fdbd392654ae 100644 GIT binary patch delta 414 zcmV;P0b%~%0=NT^B!7QNL_t(|ob8#*vcn(&` z4Kb|?wQEV5bG3N{1baWtDgCb89l|vw8SXU>c~A=oRa*1z1b>k0XAuzNeQ|r0yEWhC zE)$i3b(yVx$m8Hyy0FnaQOX7!kBrCGjLcecC+8_h1;~-y)9;B!4Y*>T0lnAFMAW;0 z;iE)-rZc9@R^m%6004wSDb>uXy=(1ecIFDVW^@1Qxf8V$o@Z>ys1YTrS;5Y%Z=(-D zZ~f=tI@5pAX@BVL5cvBOTEJ<=Y?DM#-#3{8rA|X>U^D84!iv19vtqGstEsSur71|X zTzZ$iGg(WtcZLbyhi<3=!_0^9{4O%QkXYXXh7n!gGpk}Sfe|2*l5RLR3!um_T%msP zJqrCpN}nZeM}4KgJj0&fI@}Ne=Q{-e0000000000;1{3r1y2JJLv#Cx%>V!Z07*qo IM6N<$g6+A%d;kCd delta 324 zcmV-K0lWUV1K$FWB!4DJL_t(|ob8#x4#OY_hV9b5{{#2X9ZU!yTANiW=Kr$8+9D_l zRJ$cN&O=;oUq90m^D*uzPd&?vem{?~L+j~4!EOk7`iS?5?B+h?NA#yth70gkbV*H2 z>q_mjWX)2oi~wiv=RW0MlI~EhsmXA!ama(EfKpXz9-RQBet#ALKHgWuYmC-h%ePE4 z8n$JI`a#CQUVAXmJWNDLjWrpHkVgUeP9n4IvUMOGR?%u>YikOz3ok6rJ7it1%ji-1keFq_mjWX)2oi~wiv=RW0MlI~EhsmXA!ama(EfKpXz9-RQBet#ALKHgWuYmC-h%ePE4 z8n$JI`a#CQUVAXmJWNDLjWrpHkVgUeP9n4IvUMOGR?%u>YikOz3ok6rJ7it1%ji-1keFa%B!6;AL_t(|ob8#*62l+}MM)?9{}0Y0U1Y`qMYL7aCihG?Aq0GY z54w>P=OG@qx0j>TX^XG(5TA2{(W_3p^hPui+I{`H*vvWNmV>*Wtr?H1q{TiF5$%eS zYqaJvBO1rhk}#L50{@mPM>e^Hn=*Rp5iyr*=~QNb_vrJcM1OvXlypg>n=1q(YT!q! z2bZgTEZXdn%26bV3>Y^0oM>oL)D-#3Y>VC$ZLvDyyz;2sQ%e8yJV=0E` z{P+dE*~Yn=Qh%IC+wk-#9=`!ByX6p(Qi>Q1uL>B&2GVY1H9Gt;y6C8diqzEIC>Ff9 zP`xMTB08r~G-3;#nVkWg`aY|H{GTj#46V5sUpgJD&{J7#0_quGHSuAkC5YP=OG@qx0j>TX^XG(5TA2{(W_3p^hPui+I{`H*vvWNmV>*Wtr?H1q{TiF5$%eS zYqaJvBO1rhk}#L50{@mPM>e^Hn=*Rp5iyr*=~QNb_vrJcM1OvXlypg>n=1q(YT!q! z2bZgTEZXdn%26bV3>Y^0oM>oL)D-#3Y>VC$ZLvDyyz;2sQ%e8yJV=0E` z{P+dE*~Yn=Qh%IC+wk-#9=`!ByX6p(Qi>Q1uL>B&2GVY1H9Gt;y6C8diqzEIC>Ff9 zP`xMTB08r~G-3;#nVkWg`aY|H{GTj#46V5sUpgJD&{J7#0_quGHSuAkC5Yfh`-P3sKQlVFjE>^80%j@?*U$ezX!5bOOYGJMV zQN3{m?{hbK4$V(o|HMc}+DVis`N9@py7xtlYaeZTZS`+3@qY?guD0+gf0(`op7(pn zpHA)MIt7{GGX||!J1gnF=7|GPA--f@8iZLSy&_EYmgUvLlQz8wPfsua08nGq01uIl zc}5c{m|u&?O5bAqAX*Xs$tw(`436hg_+6RlDKe)ZeylDJdeD>E_n;L>6Q}+Lz47$m zlhf3#h~Nx#CXX)CwNn16eJwuh2_N-qf8EVyLRK*PvO|vWR z!l_j%6uz?tfZl{P;10}czXJdO00000008&o0|~1_`M1*|{Qv*}07*qoM6N<$f}n`p AJ^%m! diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00029.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00029.png index f12d6df3266fc964f005594a4523b23e7c611137..ed77b440e33e8f8c0c0995786c83c7884340d422 100644 GIT binary patch delta 458 zcmV;*0X6>31LOmcB!8<(L_t(|ob8y~lEWYfhDoP={|D~H_99b@oI;Gz?BxGuFS0fQ zK?G%?OY!&qJuk0$cFcu)VX)p=s>fh`-P3sKQlVFjE>^80%j@?*U$ezX!5bOOYGJMV zQN3{m?{hbK4$V(o|HMc}+DVis`N9@py7xtlYaeZTZS`+3@qY?guD0+gf0(`op7(pn zpHA)MIt7{GGX||!J1gnF=7|GPA--f@8iZLSy&_EYmgUvLlQz8wPfsua08nGq01uIl zc}5c{m|u&?O5bAqAX*Xs$tw(`436hg_+6RlDKe)ZeylDJdeD>E_n;L>6Q}+Lz47$m zlhf3#h~Nx#CXX)CwNn16eJwuh2_N-qf8EVyLRK*PvO|vWR z!l_j%6uz?tfZl{P;10}czXJdO00000008&o0|~1_`M1*|{Qv*}07*qoM6N<$g56x) AU;qFB delta 435 zcmV;k0Zjhn1I+`FB!84iL_t(|ob8#*62l+}MUzhY{~z2%yKrh15HUV*I`>Q$i8X+P zM`F%nE8ef)@%i+#!*<>VA8d*%RFjxJ^ zX6)eo)J-La+Aj=0GGdW7i5Mkck{jUeeG=o`M^&!{|0);mP=Doe3orVI`#mUmf0TT8 zawq2{NDQAfaJ}4FM)%#mZ~-jDPs^l5h)uH8gpWLB({53c=H7(e3k(1NqT{R)nnSV;K8}oj8T9h(CIj{`IpRPp_qKs74iDFA8>1(N)A<>-y{fL$Nb_9u4 zK1vg_imS8i7gaOW#s)Wlz`b_kayy-h#46WvCm!`F7E?mP4lI15HbsV5r7W=9&Xx=) zb=OWvE|b$#Dc^O_?IHVmT$E@4`L1wpEvs?gQ$i8X+P zM`F%nE8ef)@%i+#!*<>VA8d*%RFjxJ^ zX6)eo)J-La+Aj=0GGdW7i5Mkck{jUeeG=o`M^&!{|0);mP=Doe3orVI`#mUmf0TT8 zawq2{NDQAfaJ}4FM)%#mZ~-jDPs^l5h)uH8gpWLB({53c=H7(e3k(1NqT{R)nnSV;K8}oj8T9h(CIj{`IpRPp_qKs74iDFA8>1(N)A<>-y{fL$Nb_9u4 zK1vg_imS8i7gaOW#s)Wlz`b_kayy-h#46WvCm!`F7E?mP4lI15HbsV5r7W=9&Xx=) zb=OWvE|b$#Dc^O_?IHVmT$E@4`L1wpEvs?g<)`A#0gULyFI`00000NkvXXu0mjfo3e;& diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00031.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00031.png index 4027411b7af1cb28517b1b0c1bc9a5011b174950..e67c683e4899e536c2841d34d04bf86d4943d11c 100644 GIT binary patch delta 293 zcmV+=0owlQ0>A>0B!34<)`A#0gULyFI`00000NkvXXu0mjfx|)cF delta 334 zcmV-U0kQtT0_g&fB!4hTL_t(|ob8s&62l+}MKRO-{|9%`E}W(aM57@ZGxw~VXn|fH z8t5WE@BcciS9v)?j3mau*T;X=8?Ifm1z|*g>Bf22Ucp;NUdAE!v~P}eF%qk?=z2S2 z_K^M$!Ww1ERs>+W6TM;v-$t~ST3BR!j_PZP!)lBIuAR_PoPXzAe6d+G59cG~$uQBu zpFtE>k^o2bGX-mY)VkBJ@r!Em3LQ1&sz`IN>}@!>iL}`iMZLExJo2WwEoq^rBgiEO zMGIP>TFJP|HnCv_DnEbgCLz4djD4&J_=wt_TTc8TwgN z2Y|kW(E(JVpGUTnGg|^Uk4wh1%zP8z4j2p)08TRV{Fxu9KaxkN|A=QO;Ux+H00000 g00000001cQ1(eLOxu-Q~p#T5?07*qoM6N<$g3soZNB{r; diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00032.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00032.png index c3151dcffbbdceb2674e5d148fcaca645e9e80a1..4027411b7af1cb28517b1b0c1bc9a5011b174950 100644 GIT binary patch delta 334 zcmV-U0kQt#0_g&fB!4hTL_t(|ob8s&62l+}MKRO-{|9%`E}W(aM57@ZGxw~VXn|fH z8t5WE@BcciS9v)?j3mau*T;X=8?Ifm1z|*g>Bf22Ucp;NUdAE!v~P}eF%qk?=z2S2 z_K^M$!Ww1ERs>+W6TM;v-$t~ST3BR!j_PZP!)lBIuAR_PoPXzAe6d+G59cG~$uQBu zpFtE>k^o2bGX-mY)VkBJ@r!Em3LQ1&sz`IN>}@!>iL}`iMZLExJo2WwEoq^rBgiEO zMGIP>TFJP|HnCv_DnEbgCLz4djD4&J_=wt_TTc8TwgN z2Y|kW(E(JVpGUTnGg|^Uk4wh1%zP8z4j2p)08TRV{Fxu9KaxkN|A=QO;Ux+H00000 g00000001cQ1(eLOxu-Q~p#T5?07*qoM6N<$g8V|1Y5)KL delta 327 zcmV-N0l5C@0^$OYB!4MML_t(|ob8xF62l+}MZcZq{s+z?T{vYhXiVA;V)NfBkuV@A z7=a*cE4FpC69afu#{2^z7Trt_$#>17Nx-%uEgs%<$?i&|@`Ij3YXoI{t-2O@rXelX zT$z9&(ck&B3uyMoI+i~ZY1f2Sm*=#2&)4KYC1C8@zZ44_@qdZ>N1201OW@6YnsB+$ z%M#?D12Ly}K-UMmSAz7dE~dOf404&&kF);1EIx03eNa;7zrf zw?w*i>p}avEAjTffkhcOyo#`*gSOfFrlk_#;QJiyz)z7Se`a0BIFrnofNBYvliF=) ze7?WKiLv}KYd`{817Nx-%uEgs%<$?i&|@`Ij3YXoI{t-2O@rXelX zT$z9&(ck&B3uyMoI+i~ZY1f2Sm*=#2&)4KYC1C8@zZ44_@qdZ>N1201OW@6YnsB+$ z%M#?D12Ly}K-UMmSAz7dE~dOf404&&kF);1EIx03eNa;7zrf zw?w*i>p}avEAjTffkhcOyo#`*gSOfFrlk_#;QJiyz)z7Se`a0BIFrnofNBYvliF=) ze7?WKiLv}KYd`{8(rvBn#MQ1646{$Vq`VAYbRuA@lps^6rZ<2nUxn}Z-gJHuxkt#*BJ2GFuO;P()j zk-1&HCP_T05K%ea-`0t7wDp#xS^hC@(GkQ&s0aMs1E#t?HS(rvBn#MQ1646{$Vq`VAYbRuA@lps^6rZ<2nUxn}Z-gJHuxkt#*BJ2GFuO;P()j zk-1&HCP_T05K%ea-`0t7wDp#xS^hC@(GkQ&s0aMs1E#t?HSB6{SQ2gnMJB71O%f#Hx^-H4OH7AeBoZ%e9ai!hHG%6}nHzXCvW0$$nsYGhc6 z(T_rnG)`EA_8ffpgJf{SvMmo&R}ni^XVUt(4MAx>Fcv6t`Q$*mhj#7&*yaPwLuf?C zc9telOKRrQGd4uj+hP-$LB1%8Vt{M1pB*&a&krmb%F4*7s(QJ+98PvOkW+dZuk%8@ zdmpljMn1I-?0>$l*w8i`6y$)B_gTy_0>OBFfG0vv0CZBoKuB4)5zO5nFV#m^x-s-?j&xJN zb?Z{ diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00035.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00035.png index 7e0e238204773a5ce6d51d5a1ce25147473482ed..6d76960efd309f4a0e5fcad892a9c6b6c32bb6e9 100644 GIT binary patch delta 463 zcmV;=0WkiQ1L*^hB!93;L_t(|ob8xFlEfegMM>B6{SQ2gnMJB71O%f#Hx^-H4OH7AeBoZ%e9ai!hHG%6}nHzXCvW0$$nsYGhc6 z(T_rnG)`EA_8ffpgJf{SvMmo&R}ni^XVUt(4MAx>Fcv6t`Q$*mhj#7&*yaPwLuf?C zc9telOKRrQGd4uj+hP-$LB1%8Vt{M1pB*&a&krmb%F4*7s(QJ+98PvOkW+dZuk%8@ zdmpljMn1I-?0>$l*w8i`6y$)B_gTy_0>OBFfG0vv0CZBoKuB4)5zO5nFV#m^x-s-?j&xJN zb8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjftyi_; diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00036.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00036.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0e238204773a5ce6d51d5a1ce25147473482ed GIT binary patch literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000rrB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfqlf24 delta 395 zcmV;60d)TJ1Em9yB!6s4L_t(|ob8$04udcVhP!2Z{|ENMT{Iz-(vt$}@_*TdRthaz zDBUZCv2Vrg>lo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoLlo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoL0fhdg1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1l%xt`q0fhdN1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1k%}t^oi5 delta 375 zcmV--0f_#V1Cj%fB!5{+L_t(|ob8y=4udcVMRjri|G_@EhbDwVTTxqz**)=LDy4X5 z!LlxH9D8=Ue*LBn%%^ZoDAkvVx*z-4N3#T=*a}9T8u6HD-V{T+ML&!-+<=dwQyNm7 zUAXN_@|?TPSAetnDW-HRxg0{8nhjTtLkemG;YxcRod9zGY<~s#s4pI`@wCNv`O*}P zfo+?iI^^qMtKAqlJyFXB9E*)*t|vBq$wkgnkXj(GB&P0(lNzx2{s;74pC+QKA258B zsLynzXfqW55(@wT9u(8)?a#;d6k;o&cMqPyJf_r&n1!)G)jkvYmN>6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1m8(r?3D3 diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00014.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00014.png index ca3d9981762c636f11dddc5cf3ebbb25d718bc9c..9068ab50d49af8af99788f17c6939150c5387fca 100644 GIT binary patch delta 375 zcmV--0f_#W1Cj%fB!5{+L_t(|ob8y=4udcVMRjri|G_@EhbDwVTTxqz**)=LDy4X5 z!LlxH9D8=Ue*LBn%%^ZoDAkvVx*z-4N3#T=*a}9T8u6HD-V{T+ML&!-+<=dwQyNm7 zUAXN_@|?TPSAetnDW-HRxg0{8nhjTtLkemG;YxcRod9zGY<~s#s4pI`@wCNv`O*}P zfo+?iI^^qMtKAqlJyFXB9E*)*t|vBq$wkgnkXj(GB&P0(lNzx2{s;74pC+QKA258B zsLynzXfqW55(@wT9u(8)?a#;d6k;o&cMqPyJf_r&n1!)G)jkvYmN>6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1mDHr?CJ4 delta 380 zcmV-?0fYXM1D6AkB!6B>L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTXw;JZKo diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00017.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00017.png index f20965b93a9104857683e8020bb96a3cd236905f..53b2eab90d8b33745b347e4f707c13ab2293bf91 100644 GIT binary patch delta 396 zcmV;70dxMJ1EvFzB!6v5L_t(|ob8y=4#OY_McbwO{}0~7_FzH)73~VtE%#&(Ym0b` zij{p!~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTX=Si4F9 delta 388 zcmV-~0ek+Y1D^wsB!6Z}L_t(|ob8#>a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos* z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1w5o6aWAK diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00019.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00019.png index e2e233f0147f46c5d8f5b844bfde76b129062a91..91ba67e9d58f19b59a4f1935d93924c881070be3 100644 GIT binary patch delta 394 zcmV;50d@YK1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1i8{6951J delta 387 zcmV-}0et?X1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1k5It^xo6 diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00020.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00020.png index 972f178b3e37735865d0e4ee44873ed4fd2c9f4a..e2e233f0147f46c5d8f5b844bfde76b129062a91 100644 GIT binary patch delta 387 zcmV-}0et?B1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1i>4t?U2* delta 371 zcmV-(0gV2h1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1ilns?Goa diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00021.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00021.png index 083033d454e290bc2cd0ed3d7c9958ef2c288adc..972f178b3e37735865d0e4ee44873ed4fd2c9f4a 100644 GIT binary patch delta 371 zcmV-(0gV2Z1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1iCus>T2S delta 379 zcmV->0fhdJ1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jKcwLJg; diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00022.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00022.png index 9c2054a609aabadd8aa507d9098cac32d83ad4bb..083033d454e290bc2cd0ed3d7c9958ef2c288adc 100644 GIT binary patch delta 379 zcmV->0fhdM1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jX+wLky> delta 374 zcmV-+0g3*W1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+n%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+nc_W%F@ delta 363 zcmV-x0hIoc1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1g%Qt?~c> diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00024.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00024.png index afa9173a2db50134265726a18b83f78c125c7317..08b20a8371c78697a4e4a0915c8987ccfbb0132d 100644 GIT binary patch delta 363 zcmV-x0hIo?1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1ivot{4CS delta 413 zcmV;O0b>4!1GfW^B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfOU%Qn diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00025.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00025.png index 7226a9e230b3e9732865ded1fe0d639b690029e9..afa9173a2db50134265726a18b83f78c125c7317 100644 GIT binary patch delta 413 zcmV;O0b>5T0=EN@B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfo)p8~ delta 287 zcmV+)0pR|(1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEjJMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEj4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1g-^wG{vW diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00027.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00027.png index 182640db43ff9724045c67199b76083d44b6dd53..dc7f9b18a8211268f0dd96c032fd617a091a2c72 100644 GIT binary patch delta 383 zcmV-_0f7FK1DXSnB!6K^L_t(|ob8#>4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1n?iwC?}_ delta 376 zcmV-;0f+vY1Cs-gB!5~-L_t(|ob8y)62l+}MUzhY{~w%1x^RX;#77j#qxVb~jX|$s zL}gvvIQHmq{rXAYn2%B>JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000 zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfhexC( diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00029.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00029.png index 37c456b81b45dae7b9f1c9fed698cb98d4d81796..f13eb25ed587c0b4a16f9b23cb556d08e40e6259 100644 GIT binary patch delta 365 zcmV-z0h0cs1Be5VB!5pyL_t(|ob8xF5`!QNMYUt^e_$8wf@vm%1W+M@{cpOc82At* zK-R^L&mKLlZ$IgQc`0SWQ*F7?@1MQz&}ur6uqj5KKH_~M-Oz{divCpEa06b89;u3| zE}CsiXgO{+UIEVD4}A*1C3c5!jb+2V#vu=;2BN97<=z1xZhxPx03Yv*;blgve#?g> zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfo)@Gw delta 393 zcmV;40e1d~1ET|wB!6m2L_t(|ob8y=4#OY_McbwO{}1j%_h3R$!Ky{7**)3Ax*}Iu z!OFh5ah=iS{`Hfdn2+#V5-D3=jQe$tU0TfqG7iDWGe&$)q#NcCZqb)Y8*acy(IpKL z)f2b21kbVCI0KxcALbN3TO5ugG@1>M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000+mhGi>(}*-`4sAmrRH*>-G3W)Y9j;4SPMd)Hqv8~e&ZP8Cn*fdXaU_yUZqK~ zccXSLQFE#`-2u+lk7J5YNX=nPQ;Ve_^yHc*Ih@n_W+|? znfNRr@Zud}N&y@pN~s8E+Ht8Hxa1}U0vtB8RK!GTDFjog zFSJHDTz6i419G+0f~nbcaqTMUDnI6hV7R-WiRW&U;lY^+sr-r4mj+mr}E&T6G8|fgb+dqAq2x8 XXmI^j`r+?o00000NkvXXu0mjf8$7e= diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00031.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00031.png index 7e0e238204773a5ce6d51d5a1ce25147473482ed..873a1b0ad917883e58aab9725bc9765a1c6e0d27 100644 GIT binary patch delta 368 zcmV-$0gwKa1C#@hEq}`ngdhw>apL^{2fLVAkTj({Rc?Lcp143P1&XxLCAjh1lGo+y z*Y%D06zYtn=5nFke;amcBLm1-3qqbY(qoc-;~3&6DGbVJ0o_VorAe`OqjoM)bE-Do z0nXNsV~S5m&0$PalhIbwhy`;2qbk>ob^xhHCnZGZ7!-ql5;VOs`jhjbsT zwGY7Vg_<|ejL3}ibw*|`sgY9`lx>hla!!R4DrxB|KjwvCxVxZ<=WdhX!I=rE{E8TW_S%o)20{2RCdrIjRHSlb5Dt~N zioW;fY3h>&B;Wm#@SC delta 368 zcmV-$0gwKa1C#@hEq~39!ypWVoz?dJA2^5ffEKyf1`IT4vi{UVM9IXA`6mj3AP9mW znC3d^I(G-*<7amO>p-(U@stE)_m9`sINU%bz?xxT-6yaFB#Im$yH8*V$QEbQ!QCgK zV|M_4bFRt%QeT(7OeRml^{v>(lv`*cz=e#mpi)xrKH7k- z$<9}kV{Tr##c6Z`X5tv`JG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^ z)LIqCmRxHQ=E~~lRE6BBD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S O0000vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf1%&5& delta 320 zcmV-G0l)t91KR?SB!41FL_t(|ob8xF4ul{KMRDTX|G+MsMU$p2En<`^lmFsEv9$Ps zf-EJCeN&IiH!t*y`8Z`pse5@)_kA1tX*~_7SRJEGjbxiRF13MP@lB_VG?2CUk*m1T zjoW)6&)Th?0m-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@U3i-Fk_Sl0ps8|K8WUh3 zfiNDI41T`5ug7gw)QW_?`4Ywk_k}sdYsc+?L47d&Pu8v^Q!%Dj;4mTtwiJ662CEa%(ki`{d4sxhz`gLh*e#2 zRZPyh5Chs(RD@4I2PpPobj3pLfy<_-*CP{`Bzyn=GX&KWmiJ#D5WSi6$H|jM1iv!aXum5bw+U+0)42U3i-Fk_Sl0ps8|K8WUh3 zfiNDI41T`5ug7gw)QW_?`4Ywk_k}sdYsc+?L47d&Pu8v^Q!%Dj;4mTtwiJ662CEa%(ki`{d4sxhz`gLh*e#2 zRZPyh5Chs(RD@4I2PpPobj3pLfy<_-*CP{`Bzyn=GX&KWmiJ#D5WSi6$H|jM1iv!aXum5bw+U+0)42J$|1q#bkA<>sFr2VTKwxXdnpk&2peN&+(3$ ze%upkq6s^@?|)M6aOX0FA$mO=e_A$!3&SsB02=@R001C~f7DX#t{XFIasU7T M07*qoM6N<$g5xsG+W-In diff --git a/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_added_at_the_end/00014.png b/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_added_at_the_end/00014.png index fda55f50120668ceacffb79c3b669070627c9ad5..180bf33b703f9383340d40d18a1aeed002e05a5a 100644 GIT binary patch delta 419 zcmV;U0bKr|0=xr|BYy#dNkla$M*5s%-wsJJBWqKWkXgMVcprBbO+fb}$m_)A{T zZ!~|8`UIpypF}GMi4C^6SD)Gge8TSSya9>vD(=wcF+8 zVA(p-ClaNoh(Pp!aJK-yMk}hHC*d1JUp;=GF2!VZsq0pr%VCBZIcOjV^38IfHqY^n zntt39YN81{yMOOe?sBsA(5ipsIC^vGjM&s8l{yh(_Wtb5n&qiu@Ni+}#-wE!=Zx4` zEaZr7Ghk7cva8KVMnnC^PX+Cx2(==I2ilS9G-#ualGvH6ksqD~QNoAO|0J+Wzc&Hx z(@+`8k+FV}cmD%G3ula@t?EB%dm(x~9DiCigA2niVjKVf0000WiGS2m?XDX$YH|Po N002ovPDHLkV1kqc%&GtY delta 261 zcmV+g0s8*D1E2zsBYyzrNklCV3vB!09HUP z&?-QxwIIL>Q12xULVy8CsSLaTAXZhP|9C*yFAMEQLi_PBgMN52WU&6`Eb+_p1ak^% zTkQpB@CS^l00000 LNkvXXu0mjfw~%;& diff --git a/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_added_at_the_end/00015.png b/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_added_at_the_end/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..fda55f50120668ceacffb79c3b669070627c9ad5 GIT binary patch literal 288 zcmV+*0pI?KP)CV3vB!09HUP&?-QxwIIL>Q12xULVy8CsSLaTAXZhP z|9C*yFAMEQLi_PBgLpDzu>R&O@yqiBa|&u(?FDD!?!3!Yyx zU&L(lQOk1FIx|=w><~LD2Z;kvYZL44(k8-(#A`wI$k%z4#1-&_m3XN&v3CV006BL5 m7v<`Z#9fFGLI@$`57_~1yHn5b2aKu!0000rrB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfqlf24 delta 395 zcmV;60d)TJ1Em9yB!6s4L_t(|ob8$04udcVhP!2Z{|ENMT{Iz-(vt$}@_*TdRthaz zDBUZCv2Vrg>lo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoLlo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoL0fhdg1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1l%xt`q0fhdN1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1k%}t^oi5 delta 375 zcmV--0f_#V1Cj%fB!5{+L_t(|ob8y=4udcVMRjri|G_@EhbDwVTTxqz**)=LDy4X5 z!LlxH9D8=Ue*LBn%%^ZoDAkvVx*z-4N3#T=*a}9T8u6HD-V{T+ML&!-+<=dwQyNm7 zUAXN_@|?TPSAetnDW-HRxg0{8nhjTtLkemG;YxcRod9zGY<~s#s4pI`@wCNv`O*}P zfo+?iI^^qMtKAqlJyFXB9E*)*t|vBq$wkgnkXj(GB&P0(lNzx2{s;74pC+QKA258B zsLynzXfqW55(@wT9u(8)?a#;d6k;o&cMqPyJf_r&n1!)G)jkvYmN>6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1m8(r?3D3 diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00014.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00014.png index ca3d9981762c636f11dddc5cf3ebbb25d718bc9c..9068ab50d49af8af99788f17c6939150c5387fca 100644 GIT binary patch delta 375 zcmV--0f_#W1Cj%fB!5{+L_t(|ob8y=4udcVMRjri|G_@EhbDwVTTxqz**)=LDy4X5 z!LlxH9D8=Ue*LBn%%^ZoDAkvVx*z-4N3#T=*a}9T8u6HD-V{T+ML&!-+<=dwQyNm7 zUAXN_@|?TPSAetnDW-HRxg0{8nhjTtLkemG;YxcRod9zGY<~s#s4pI`@wCNv`O*}P zfo+?iI^^qMtKAqlJyFXB9E*)*t|vBq$wkgnkXj(GB&P0(lNzx2{s;74pC+QKA258B zsLynzXfqW55(@wT9u(8)?a#;d6k;o&cMqPyJf_r&n1!)G)jkvYmN>6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1mDHr?CJ4 delta 380 zcmV-?0fYXM1D6AkB!6B>L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTXw;JZKo diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00017.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00017.png index f20965b93a9104857683e8020bb96a3cd236905f..53b2eab90d8b33745b347e4f707c13ab2293bf91 100644 GIT binary patch delta 396 zcmV;70dxMJ1EvFzB!6v5L_t(|ob8y=4#OY_McbwO{}0~7_FzH)73~VtE%#&(Ym0b` zij{p!~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTX=Si4F9 delta 388 zcmV-~0ek+Y1D^wsB!6Z}L_t(|ob8#>a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos* z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1w5o6aWAK diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00019.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00019.png index e2e233f0147f46c5d8f5b844bfde76b129062a91..91ba67e9d58f19b59a4f1935d93924c881070be3 100644 GIT binary patch delta 394 zcmV;50d@YK1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1i8{6951J delta 387 zcmV-}0et?X1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1k5It^xo6 diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00020.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00020.png index 972f178b3e37735865d0e4ee44873ed4fd2c9f4a..e2e233f0147f46c5d8f5b844bfde76b129062a91 100644 GIT binary patch delta 387 zcmV-}0et?B1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1i>4t?U2* delta 371 zcmV-(0gV2h1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1ilns?Goa diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00021.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00021.png index 083033d454e290bc2cd0ed3d7c9958ef2c288adc..972f178b3e37735865d0e4ee44873ed4fd2c9f4a 100644 GIT binary patch delta 371 zcmV-(0gV2Z1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1iCus>T2S delta 379 zcmV->0fhdJ1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jKcwLJg; diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00022.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00022.png index 9c2054a609aabadd8aa507d9098cac32d83ad4bb..083033d454e290bc2cd0ed3d7c9958ef2c288adc 100644 GIT binary patch delta 379 zcmV->0fhdM1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jX+wLky> delta 374 zcmV-+0g3*W1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+n%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+nc_W%F@ delta 363 zcmV-x0hIoc1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1g%Qt?~c> diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00024.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00024.png index afa9173a2db50134265726a18b83f78c125c7317..08b20a8371c78697a4e4a0915c8987ccfbb0132d 100644 GIT binary patch delta 363 zcmV-x0hIo?1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1ivot{4CS delta 413 zcmV;O0b>4!1GfW^B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfOU%Qn diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00025.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00025.png index 7226a9e230b3e9732865ded1fe0d639b690029e9..afa9173a2db50134265726a18b83f78c125c7317 100644 GIT binary patch delta 413 zcmV;O0b>5T0=EN@B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfo)p8~ delta 287 zcmV+)0pR|(1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEjJMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEj4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1g-^wG{vW diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00027.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00027.png index 182640db43ff9724045c67199b76083d44b6dd53..dc7f9b18a8211268f0dd96c032fd617a091a2c72 100644 GIT binary patch delta 383 zcmV-_0f7FK1DXSnB!6K^L_t(|ob8#>4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1n?iwC?}_ delta 376 zcmV-;0f+vY1Cs-gB!5~-L_t(|ob8y)62l+}MUzhY{~w%1x^RX;#77j#qxVb~jX|$s zL}gvvIQHmq{rXAYn2%B>JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000 zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfhexC( diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00029.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00029.png index 37c456b81b45dae7b9f1c9fed698cb98d4d81796..f13eb25ed587c0b4a16f9b23cb556d08e40e6259 100644 GIT binary patch delta 365 zcmV-z0h0cs1Be5VB!5pyL_t(|ob8xF5`!QNMYUt^e_$8wf@vm%1W+M@{cpOc82At* zK-R^L&mKLlZ$IgQc`0SWQ*F7?@1MQz&}ur6uqj5KKH_~M-Oz{divCpEa06b89;u3| zE}CsiXgO{+UIEVD4}A*1C3c5!jb+2V#vu=;2BN97<=z1xZhxPx03Yv*;blgve#?g> zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfo)@Gw delta 393 zcmV;40e1d~1ET|wB!6m2L_t(|ob8y=4#OY_McbwO{}1j%_h3R$!Ky{7**)3Ax*}Iu z!OFh5ah=iS{`Hfdn2+#V5-D3=jQe$tU0TfqG7iDWGe&$)q#NcCZqb)Y8*acy(IpKL z)f2b21kbVCI0KxcALbN3TO5ugG@1>M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000+mhGi>(}*-`4sAmrRH*>-G3W)Y9j;4SPMd)Hqv8~e&ZP8Cn*fdXaU_yUZqK~ zccXSLQFE#`-2u+lk7J5YNX=nPQ;Ve_^yHc*Ih@n_W+|? znfNRr@Zud}N&y@pN~s8E+Ht8Hxa1}U0vtB8RK!GTDFjog zFSJHDTz6i419G+0f~nbcaqTMUDnI6hV7R-WiRW&U;lY^+sr-r4mj+mr}E&T6G8|fgb+dqAq2x8 XXmI^j`r+?o00000NkvXXu0mjf8$7e= diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00031.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00031.png index 7e0e238204773a5ce6d51d5a1ce25147473482ed..873a1b0ad917883e58aab9725bc9765a1c6e0d27 100644 GIT binary patch delta 368 zcmV-$0gwKa1C#@hEq}`ngdhw>apL^{2fLVAkTj({Rc?Lcp143P1&XxLCAjh1lGo+y z*Y%D06zYtn=5nFke;amcBLm1-3qqbY(qoc-;~3&6DGbVJ0o_VorAe`OqjoM)bE-Do z0nXNsV~S5m&0$PalhIbwhy`;2qbk>ob^xhHCnZGZ7!-ql5;VOs`jhjbsT zwGY7Vg_<|ejL3}ibw*|`sgY9`lx>hla!!R4DrxB|KjwvCxVxZ<=WdhX!I=rE{E8TW_S%o)20{2RCdrIjRHSlb5Dt~N zioW;fY3h>&B;Wm#@SC delta 368 zcmV-$0gwKa1C#@hEq~39!ypWVoz?dJA2^5ffEKyf1`IT4vi{UVM9IXA`6mj3AP9mW znC3d^I(G-*<7amO>p-(U@stE)_m9`sINU%bz?xxT-6yaFB#Im$yH8*V$QEbQ!QCgK zV|M_4bFRt%QeT(7OeRml^{v>(lv`*cz=e#mpi)xrKH7k- z$<9}kV{Tr##c6Z`X5tv`JG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^ z)LIqCmRxHQ=E~~lRE6BBD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S O00008}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfj%&5e delta 314 zcmV-A0mc551JweMB!3)9L_t(|ob8#x4#OY}L(^&d{}1Ls4@?M=Pz9t78|9tWF0E2K zKm;N|5CnmToFu2ke^GhuPGBBWWkTr-R0dq1?~hLIdRYT_pfW%#517>#k!yDXOXvxQ zQ+?qZ0fkO(TJ?q1fP>&PV6+GmLTEs{>W=y%9@q@fJrB7DmVW`TUoz@AnLSVjW- znCXG%?1iv`4kFawPk8Wm)K5CEhTu`_NS7vBQwUxeE?3ynj-;PsRXz)wK|C`Xik5Cp+qZZyP&s1Bsn{Qv*} M07*qoM6N<$f>eo&3;+NC diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00033.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00033.png new file mode 100644 index 0000000000000000000000000000000000000000..970b15944a929cb54b84d1187fb0c49d776ce161 GIT binary patch literal 341 zcmV-b0jmCqP)W-nCXG%?1iv`4kFawPk8Wm)K5CEhTv2Gq0-vaAjgxfa@jYGiT n^^^<1PeB1FN0fgM1i@ZzG{l9d4y4un00000NkvXXu0mjf06&f| literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00011.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00011.png index de32f3ce07dff69f81610af590478fccb00eb981..92b4bce4e0b6ca6910717fd0d8adde36278ae65b 100644 GIT binary patch delta 473 zcmV;~0Ve*X1M>rrB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfqlf24 delta 395 zcmV;60d)TJ1Em9yB!6s4L_t(|ob8$04udcVhP!2Z{|ENMT{Iz-(vt$}@_*TdRthaz zDBUZCv2Vrg>lo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoLlo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoL0fhdg1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1l%xt`q0fhdN1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1k%}t^oi5 delta 375 zcmV--0f_#V1Cj%fB!5{+L_t(|ob8y=4udcVMRjri|G_@EhbDwVTTxqz**)=LDy4X5 z!LlxH9D8=Ue*LBn%%^ZoDAkvVx*z-4N3#T=*a}9T8u6HD-V{T+ML&!-+<=dwQyNm7 zUAXN_@|?TPSAetnDW-HRxg0{8nhjTtLkemG;YxcRod9zGY<~s#s4pI`@wCNv`O*}P zfo+?iI^^qMtKAqlJyFXB9E*)*t|vBq$wkgnkXj(GB&P0(lNzx2{s;74pC+QKA258B zsLynzXfqW55(@wT9u(8)?a#;d6k;o&cMqPyJf_r&n1!)G)jkvYmN>6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1m8(r?3D3 diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00014.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00014.png index ca3d9981762c636f11dddc5cf3ebbb25d718bc9c..9068ab50d49af8af99788f17c6939150c5387fca 100644 GIT binary patch delta 375 zcmV--0f_#W1Cj%fB!5{+L_t(|ob8y=4udcVMRjri|G_@EhbDwVTTxqz**)=LDy4X5 z!LlxH9D8=Ue*LBn%%^ZoDAkvVx*z-4N3#T=*a}9T8u6HD-V{T+ML&!-+<=dwQyNm7 zUAXN_@|?TPSAetnDW-HRxg0{8nhjTtLkemG;YxcRod9zGY<~s#s4pI`@wCNv`O*}P zfo+?iI^^qMtKAqlJyFXB9E*)*t|vBq$wkgnkXj(GB&P0(lNzx2{s;74pC+QKA258B zsLynzXfqW55(@wT9u(8)?a#;d6k;o&cMqPyJf_r&n1!)G)jkvYmN>6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1mDHr?CJ4 delta 380 zcmV-?0fYXM1D6AkB!6B>L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTXw;JZKo diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00017.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00017.png index f20965b93a9104857683e8020bb96a3cd236905f..53b2eab90d8b33745b347e4f707c13ab2293bf91 100644 GIT binary patch delta 396 zcmV;70dxMJ1EvFzB!6v5L_t(|ob8y=4#OY_McbwO{}0~7_FzH)73~VtE%#&(Ym0b` zij{p!~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTX=Si4F9 delta 388 zcmV-~0ek+Y1D^wsB!6Z}L_t(|ob8#>a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos* z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1w5o6aWAK diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00019.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00019.png index e2e233f0147f46c5d8f5b844bfde76b129062a91..91ba67e9d58f19b59a4f1935d93924c881070be3 100644 GIT binary patch delta 394 zcmV;50d@YK1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1i8{6951J delta 387 zcmV-}0et?X1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1k5It^xo6 diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00020.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00020.png index 972f178b3e37735865d0e4ee44873ed4fd2c9f4a..e2e233f0147f46c5d8f5b844bfde76b129062a91 100644 GIT binary patch delta 387 zcmV-}0et?B1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1i>4t?U2* delta 371 zcmV-(0gV2h1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1ilns?Goa diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00021.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00021.png index 083033d454e290bc2cd0ed3d7c9958ef2c288adc..972f178b3e37735865d0e4ee44873ed4fd2c9f4a 100644 GIT binary patch delta 371 zcmV-(0gV2Z1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1iCus>T2S delta 379 zcmV->0fhdJ1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jKcwLJg; diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00022.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00022.png index 9c2054a609aabadd8aa507d9098cac32d83ad4bb..083033d454e290bc2cd0ed3d7c9958ef2c288adc 100644 GIT binary patch delta 379 zcmV->0fhdM1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jX+wLky> delta 374 zcmV-+0g3*W1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+n%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+nc_W%F@ delta 363 zcmV-x0hIoc1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1g%Qt?~c> diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00024.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00024.png index afa9173a2db50134265726a18b83f78c125c7317..08b20a8371c78697a4e4a0915c8987ccfbb0132d 100644 GIT binary patch delta 363 zcmV-x0hIo?1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1ivot{4CS delta 413 zcmV;O0b>4!1GfW^B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfOU%Qn diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00025.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00025.png index 7226a9e230b3e9732865ded1fe0d639b690029e9..afa9173a2db50134265726a18b83f78c125c7317 100644 GIT binary patch delta 413 zcmV;O0b>5T0=EN@B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfo)p8~ delta 287 zcmV+)0pR|(1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEjJMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEj4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1g-^wG{vW diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00027.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00027.png index 182640db43ff9724045c67199b76083d44b6dd53..dc7f9b18a8211268f0dd96c032fd617a091a2c72 100644 GIT binary patch delta 383 zcmV-_0f7FK1DXSnB!6K^L_t(|ob8#>4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1n?iwC?}_ delta 376 zcmV-;0f+vY1Cs-gB!5~-L_t(|ob8y)62l+}MUzhY{~w%1x^RX;#77j#qxVb~jX|$s zL}gvvIQHmq{rXAYn2%B>JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000 zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfhexC( diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00029.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00029.png index 37c456b81b45dae7b9f1c9fed698cb98d4d81796..f13eb25ed587c0b4a16f9b23cb556d08e40e6259 100644 GIT binary patch delta 365 zcmV-z0h0cs1Be5VB!5pyL_t(|ob8xF5`!QNMYUt^e_$8wf@vm%1W+M@{cpOc82At* zK-R^L&mKLlZ$IgQc`0SWQ*F7?@1MQz&}ur6uqj5KKH_~M-Oz{divCpEa06b89;u3| zE}CsiXgO{+UIEVD4}A*1C3c5!jb+2V#vu=;2BN97<=z1xZhxPx03Yv*;blgve#?g> zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfo)@Gw delta 393 zcmV;40e1d~1ET|wB!6m2L_t(|ob8y=4#OY_McbwO{}1j%_h3R$!Ky{7**)3Ax*}Iu z!OFh5ah=iS{`Hfdn2+#V5-D3=jQe$tU0TfqG7iDWGe&$)q#NcCZqb)Y8*acy(IpKL z)f2b21kbVCI0KxcALbN3TO5ugG@1>M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000+mhGi>(}*-`4sAmrRH*>-G3W)Y9j;4SPMd)Hqv8~e&ZP8Cn*fdXaU_yUZqK~ zccXSLQFE#`-2u+lk7J5YNX=nPQ;Ve_^yHc*Ih@n_W+|? znfNRr@Zud}N&y@pN~s8E+Ht8Hxa1}U0vtB8RK!GTDFjog zFSJHDTz6i419G+0f~nbcaqTMUDnI6hV7R-WiRW&U;lY^+sr-r4mj+mr}E&T6G8|fgb+dqAq2x8 XXmI^j`r+?o00000NkvXXu0mjf8$7e= diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00031.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00031.png index 7e0e238204773a5ce6d51d5a1ce25147473482ed..873a1b0ad917883e58aab9725bc9765a1c6e0d27 100644 GIT binary patch delta 368 zcmV-$0gwKa1C#@hEq}`ngdhw>apL^{2fLVAkTj({Rc?Lcp143P1&XxLCAjh1lGo+y z*Y%D06zYtn=5nFke;amcBLm1-3qqbY(qoc-;~3&6DGbVJ0o_VorAe`OqjoM)bE-Do z0nXNsV~S5m&0$PalhIbwhy`;2qbk>ob^xhHCnZGZ7!-ql5;VOs`jhjbsT zwGY7Vg_<|ejL3}ibw*|`sgY9`lx>hla!!R4DrxB|KjwvCxVxZ<=WdhX!I=rE{E8TW_S%o)20{2RCdrIjRHSlb5Dt~N zioW;fY3h>&B;Wm#@SC delta 368 zcmV-$0gwKa1C#@hEq~39!ypWVoz?dJA2^5ffEKyf1`IT4vi{UVM9IXA`6mj3AP9mW znC3d^I(G-*<7amO>p-(U@stE)_m9`sINU%bz?xxT-6yaFB#Im$yH8*V$QEbQ!QCgK zV|M_4bFRt%QeT(7OeRml^{v>(lv`*cz=e#mpi)xrKH7k- z$<9}kV{Tr##c6Z`X5tv`JG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^ z)LIqCmRxHQ=E~~lRE6BBD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S O00008}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfj%&5e delta 314 zcmV-A0mc551JweMB!3)9L_t(|ob8#x4#OY}L(^&d{}1Ls4@?M=Pz9t78|9tWF0E2K zKm;N|5CnmToFu2ke^GhuPGBBWWkTr-R0dq1?~hLIdRYT_pfW%#517>#k!yDXOXvxQ zQ+?qZ0fkO(TJ?q1fP>&PV6+GmLTEs{>W=y%9@q@fJrB7DmVW`TUoz@AnLSVjW- znCXG%?1iv`4kFawPk8Wm)K5CEhTu`_NS7vBQwUxeE?3ynj-;PsRXz)wK|C`Xik5Cp+qZZyP&s1Bsn{Qv*} M07*qoM6N<$f>eo&3;+NC diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00033.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00033.png new file mode 100644 index 0000000000000000000000000000000000000000..970b15944a929cb54b84d1187fb0c49d776ce161 GIT binary patch literal 341 zcmV-b0jmCqP)W-nCXG%?1iv`4kFawPk8Wm)K5CEhTv2Gq0-vaAjgxfa@jYGiT n^^^<1PeB1FN0fgM1i@ZzG{l9d4y4un00000NkvXXu0mjf06&f| literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_transaction/00011.png b/tests/integration/nano/snapshots/nanos/test_sign_transaction/00011.png index 6f75a6599218fd6ca395e5f014ad540381528c05..92b4bce4e0b6ca6910717fd0d8adde36278ae65b 100644 GIT binary patch delta 473 zcmV;~0Ve+20`miqB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf1%&5& delta 320 zcmV-G0l)t91KR?SB!41FL_t(|ob8xF4ul{KMRDTX|G+MsMU$p2En<`^lmFsEv9$Ps zf-EJCeN&IiH!t*y`8Z`pse5@)_kA1tX*~_7SRJEGjbxiRF13MP@lB_VG?2CUk*m1T zjoW)6&)Th?0m-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfmqE4D diff --git a/tests/integration/nano/snapshots/nanos/test_sign_transaction/00013.png b/tests/integration/nano/snapshots/nanos/test_sign_transaction/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0e238204773a5ce6d51d5a1ce25147473482ed GIT binary patch literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf1%&5& delta 320 zcmV-G0l)t91KR?SB!41FL_t(|ob8xF4ul{KMRDTX|G+MsMU$p2En<`^lmFsEv9$Ps zf-EJCeN&IiH!t*y`8Z`pse5@)_kA1tX*~_7SRJEGjbxiRF13MP@lB_VG?2CUk*m1T zjoW)6&)Th?0m-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfmqE4D diff --git a/tests/integration/nano/snapshots/nanos/test_sign_with_another_seed/00013.png b/tests/integration/nano/snapshots/nanos/test_sign_with_another_seed/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0e238204773a5ce6d51d5a1ce25147473482ed GIT binary patch literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000H2m#<3l*OiL?N`Uy1>t1pO)`;a(i8k<&>IQes|ZwRvad*nfbQ0Zxn1j*@Mh7TK@p zO96U@L$!&k+patkxBUXPhWD!icM-M7$j?^N?*nv5QP{6AhoVfDQ0oxB2kbqybM>)W zumOrPybob^Haszppnd@sX)<~l*4@<@HaMlViilzUK4a340-V&&A%f=hU0N6)DfGY*?;x{WpGj^P|E`o!#$_OoXVb8r%P5W`?YYD)-j zOAd@;=h+@3#Y}X4{Me|N>i%k{V{nE5yl z@7iHmwt45izq9H#gr~(%S-DT`+20$-=S6w53q`A)Fm~VNe<|;UvxQ2%RB}m!p6cu% zmD^Pzx$z6rqSwx4Ja?17mTUjfWy)T@nr`X7lX;dg28L#yT`XSD5WRmEqutGZzx74i zZf5@s5}w-hb;iQV4WARVWhHLx(OAnCt7{`yM8e&_ICZAesglKNc&PvY diff --git a/tests/integration/nano/snapshots/nanos/test_sign_with_long_hash/00013.png b/tests/integration/nano/snapshots/nanos/test_sign_with_long_hash/00013.png index 7e0e238204773a5ce6d51d5a1ce25147473482ed..1463263efd94907d83004d85e4f2af3aa7a8d56c 100644 GIT binary patch delta 277 zcmbQjyq;--ay`R0PZ!6KiaBp@c=9zH@Hhmnc=4D2Op~5cWSLr%hs>>i%k{V{nE5yl z@7iHmwt45izq9H#gr~(%S-DT`+20$-=S6w53q`A)Fm~VNe<|;UvxQ2%RB}m!p6cu% zmD^Pzx$z6rqSwx4Ja?17mTUjfWy)T@nr`X7lX;dg28L#yT`XSD5WRmEqutGZzx74i zZf5@s5}w-hb;iQV4WARVWhHLx(OAnCt7{`yM8e&_ICZAesglKn;;r?wz z4tBD576MufzZYu1vZyAup~uS+r92QV2PnZ!u2XKBf0cUkJ8N!PQuCJ3XIDrMJTUn> z{k2dYk1Hv(bYyH^Wr=3irulgVbKU$cY^7x;6o$^TMcm%U6TPr~)B*v6DwXd}Rd zjIy9oQtv+6fOD?bOL7L816f~>rEPAnSR#|$LJKqXTxF&F6b#ySzgQC2+^H*zs;X08guTjmJZZ<-4d8Y3vxo!)K@j|3 Y-r76Op(T;lvj6}907*qoM6N<$f>`>sr~m)} diff --git a/tests/integration/nano/snapshots/nanos/test_sign_with_long_hash/00014.png b/tests/integration/nano/snapshots/nanos/test_sign_with_long_hash/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0e238204773a5ce6d51d5a1ce25147473482ed GIT binary patch literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf1%&5& delta 320 zcmV-G0l)t91KR?SB!41FL_t(|ob8xF4ul{KMRDTX|G+MsMU$p2En<`^lmFsEv9$Ps zf-EJCeN&IiH!t*y`8Z`pse5@)_kA1tX*~_7SRJEGjbxiRF13MP@lB_VG?2CUk*m1T zjoW)6&)Th?0m-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfmqE4D diff --git a/tests/integration/nano/snapshots/nanos/test_sign_with_small_packet/00013.png b/tests/integration/nano/snapshots/nanos/test_sign_with_small_packet/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0e238204773a5ce6d51d5a1ce25147473482ed GIT binary patch literal 404 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 acou(u^iLm&WE+710000Q}p}P;kgtK8f{X8 z^se|b-cs}qij{2YUo}9nuMuDz{ijY3*E<{_G?+~qwY1n6!GGKU6qT2(od7`j|0BRA z`oKNW+Tyd^<$}18wo#1(7zaPt1wHri7|RAJEjBH_I5x6?Aiq*jK0tP4&A2~Q=77t# z58`uOO+>v5nDj0%KgTmg8&&M5SjTZ3$8l5{-Y5|UMH^X1A%W>=GP2br_NYp6ncD$S zjN^c*X5eJ1;eP<*O&!eyQ_zUVs;bpg(}I*E`u28593)3Tk%7dGX`Hf-hLLqtcp)QB zlzdlnG^`B>w#cFb90G0%0wQ*Cy6e@^iZ7(Z9nlpqa3qG!yQCu>U7muDV$*fV3XUAd z;nS$H@wb#_D%(*hs7nvn!jTBVV%%XW8{bhCEiI^6QGaYxll}xBA6`g+7IDN!U5rZ^ z`@X8zp8rXmC3|edmX-7P?9l-SW0!)=R5onF+)rgQ<4BdQ5l=x*f~#zf<1i_XZY8;G zBS%IUS6As<9ZN^@VqEo^ipL)!w;4e!vC}iyF;)oHomIJC%2DyE;5aiC<1hx=WBK)5 zua_=lHh*GI!{Spp7SJ{2Hr41~QX_zn-M7Y|Efy(gYq_mh$ZhgR?UI})w@H=nV%&$} za+~8gOHs`gn7$M*0Rv)}J8(dF7h(P+OfTlDt3B-<+{XI=5jkw9wf1TV%3(wbDjJAq zA*^D2tWyy2iesRtI6kT}I0x0jC(Hr%U!Sea{76Z7nEU0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L400000000000000GrafSd+k=txobDzH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|D zrlT*m5)eZigKjgVo>74`SYX#hrE9#IzY@`D{rjEKAO6`Jghqx8uhvwT`%TFKC%buIrt__>Wv@K905|BC6`I>HPc(qGNvOXRXe1o zvj(&(Eif{z2Y=rz!s(l3c}jMeV3sm*q_B4#{bNV~V8wNFy5efV6r}9YuX2s*wNKcn zmD|L@^KG?$+>*||c@4D@;9lfC3gu>biKhO%gl{4q=i||Ms)A?sS?we#tCjqhVk97azfh*!)V$JmB$L~L72m$~A00000 c004A60Tiq>(_r(*v;Y7A07*qoM6N<$g3^7^Q~&?~ diff --git a/tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00015.png b/tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00010.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00010.png index 393a15fb76753fbec14215b680629fedbfa392f5..c3d91803266513c0381429a103e59db091faba59 100644 GIT binary patch delta 344 zcmeyx{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@038sSIsgCw delta 480 zcmV<60U!SJ0{R1xB!9t4L_t(|obB0LlENSmK+!nmPT2pFvX}X=q}qNU;U(kT^A(ZM zElD8Y?U>*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>z@as@f}T8+_Qi8fxL+)qT516n{?5GoqPsZA!_ASx(i7 zwEu=)gEo|}@C5YkrXl;1obwwoKTvoA+|_qtF9(hbZ1h@vc9Y)!NVy9SkwQxtY-3U#>-(Od zQYGiN;--xN00000Ahp(7YwheRK6O32fIlh_eYa!-M*7>fom8QwRV600000 e0001hB5q2vdJ%F-?YF)F00009lcFm`nhbJ{xd~4eLv+BqFsM9rvX2&;IAN>34hv5A^+A1-(64{q{ z)yvr_Keae!b!y&g`R!-QRSWYSR((mH9%Y{X-R!KYoXU5>E8p{1$^DsrrrWA#!C#)U zX?!1Z*UT)Im-Bc0S-qiN=+B>NXM#DvJ^&F7N_k$JtBO3|Zr=yudb;|#taD0e0su+c Bhid=; literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00009.png b/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00009.png index 431986c71c6e730392aef05dda8241072bc257cd..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 517 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 acou(u^iLm&WE+710000Q}p}P;kgtK8f{X8 z^se|b-cs}qij{2YUo}9nuMuDz{ijY3*E<{_G?+~qwY1n6!GGKU6qT2(od7`j|0BRA z`oKNW+Tyd^<$}18wo#1(7zaPt1wHri7|RAJEjBH_I5x6?Aiq*jK0tP4&A2~Q=77t# z58`uOO+>v5nDj0%KgTmg8&&M5SjTZ3$8l5{-Y5|UMH^X1A%W>=GP2br_NYp6ncD$S zjN^c*X5eJ1;eP<*O&!eyQ_zUVs;bpg(}I*E`u28593)3Tk%7dGX`Hf-hLLqtcp)QB zlzdlnG^`B>w#cFb90G0%0wQ*Cy6e@^iZ7(Z9nlpqa3qG!yQCu>U7muDV$*fV3XUAd z;nS$H@wb#_D%(*hs7nvn!jTBVV%%XW8{bhCEiI^6QGaYxll}xBA6`g+7IDN!U5rZ^ z`@X8zp8rXmC3|edmX-7P?9l-SW0!)=R5onF+)rgQ<4BdQ5l=x*f~#zf<1i_XZY8;G zBS%IUS6As<9ZN^@VqEo^ipL)!w;4e!vC}iyF;)oHomIJC%2DyE;5aiC<1hx=WBK)5 zua_=lHh*GI!{Spp7SJ{2Hr41~QX_zn-M7Y|Efy(gYq_mh$ZhgR?UI})w@H=nV%&$} za+~8gOHs`gn7$M*0Rv)}J8(dF7h(P+OfTlDt3B-<+{XI=5jkw9wf1TV%3(wbDjJAq zA*^D2tWyy2iesRtI6kT}I0x0jC(Hr%U!Sea{76Z7nEU0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L400000000000000GrafSd+k=txobDzH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|D zrlT*m5)eZigKjgVo>74`SYX#hrE9#IzY@`D{rjEKAO6`Jghqx8uhvwT`%TFKC%buIrt__>Wv@K905|BC6`I>HPc(qGNvOXRXe1o zvj(&(Eif{z2Y=rz!s(l3c}jMeV3sm*q_B4#{bNV~V8wNFy5efV6r}9YuX2s*wNKcn zmD|L@^KG?$+>*||c@4D@;9lfC3gu>biKhO%gl{4q=i||Ms)A?sS?we#tCjqhVk97azfh*!)V$JmB$L~L72m$~A00000 c004A60Tiq>(_r(*v;Y7A07*qoM6N<$g3^7^Q~&?~ diff --git a/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00015.png b/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00015.png index 137ca9e4946dcd461fab8ca146124917077d946d..471324463647c42b2de74c282e34caf0e801955d 100644 GIT binary patch delta 433 zcmV;i0Z#tz0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf*2U0Q delta 339 zcmX@j{ElgYO1-J4i(^Q|oVPb4`3@QIxCS=g@ch1C<$Wu^cjn0po=zWEzx&A~xa5j{ zaI`T41gzMxd-wg{rfa{y;fuMpc2m;J<{*aCn~t=vy7M$UQ^7@(;dQD)Y^`zi*>?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E)>ESNq3 diff --git a/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00016.png b/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..137ca9e4946dcd461fab8ca146124917077d946d GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#B;O$e9@oI; z8=l|ytGsXJ_s%?d!PDvE>UTex1eaXV4~{klY65{3J9h8B|J!u!_cweo*Vb-Idf6Pr zaC*~`_EmSDW@jq6XfnJ`Rfw%Mu0H$jfb82Q<*3@pvl$m^ZO{AaYto=Tktbmbr}ic8 zgx#@%_&)K@;U~L{E3ACNW|0C&t;uc GLK6TUIGRfU literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00009.png b/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00009.png index 431986c71c6e730392aef05dda8241072bc257cd..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 517 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 acou(u^iLm&WE+710000Q}p}P;kgtK8f{X8 z^se|b-cs}qij{2YUo}9nuMuDz{ijY3*E<{_G?+~qwY1n6!GGKU6qT2(od7`j|0BRA z`oKNW+Tyd^<$}18wo#1(7zaPt1wHri7|RAJEjBH_I5x6?Aiq*jK0tP4&A2~Q=77t# z58`uOO+>v5nDj0%KgTmg8&&M5SjTZ3$8l5{-Y5|UMH^X1A%W>=GP2br_NYp6ncD$S zjN^c*X5eJ1;eP<*O&!eyQ_zUVs;bpg(}I*E`u28593)3Tk%7dGX`Hf-hLLqtcp)QB zlzdlnG^`B>w#cFb90G0%0wQ*Cy6e@^iZ7(Z9nlpqa3qG!yQCu>U7muDV$*fV3XUAd z;nS$H@wb#_D%(*hs7nvn!jTBVV%%XW8{bhCEiI^6QGaYxll}xBA6`g+7IDN!U5rZ^ z`@X8zp8rXmC3|edmX-7P?9l-SW0!)=R5onF+)rgQ<4BdQ5l=x*f~#zf<1i_XZY8;G zBS%IUS6As<9ZN^@VqEo^ipL)!w;4e!vC}iyF;)oHomIJC%2DyE;5aiC<1hx=WBK)5 zua_=lHh*GI!{Spp7SJ{2Hr41~QX_zn-M7Y|Efy(gYq_mh$ZhgR?UI})w@H=nV%&$} za+~8gOHs`gn7$M*0Rv)}J8(dF7h(P+OfTlDt3B-<+{XI=5jkw9wf1TV%3(wbDjJAq zA*^D2tWyy2iesRtI6kT}I0x0jC(Hr%U!Sea{76Z7nEU0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L400000000000000GrafSd+k=txobDzH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|D zrlT*m5)eZigKjgVo>74`SYX#hrE9#IzY@`D{rjEKAO6`Jghqx8uhvwT`%TFKC%buIrt__>Wv@K905|BC6`I>HPc(qGNvOXRXe1o zvj(&(Eif{z2Y=rz!s(l3c}jMeV3sm*q_B4#{bNV~V8wNFy5efV6r}9YuX2s*wNKcn zmD|L@^KG?$+>*||c@4D@;9lfC3gu>biKhO%gl{4q=i||Ms)A?sS?we#tCjqhVk97azfh*!)V$JmB$L~L72m$~A00000 c004A60Tiq>(_r(*v;Y7A07*qoM6N<$g3^7^Q~&?~ diff --git a/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00015.png b/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00015.png index 137ca9e4946dcd461fab8ca146124917077d946d..471324463647c42b2de74c282e34caf0e801955d 100644 GIT binary patch delta 433 zcmV;i0Z#tz0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf*2U0Q delta 339 zcmX@j{ElgYO1-J4i(^Q|oVPb4`3@QIxCS=g@ch1C<$Wu^cjn0po=zWEzx&A~xa5j{ zaI`T41gzMxd-wg{rfa{y;fuMpc2m;J<{*aCn~t=vy7M$UQ^7@(;dQD)Y^`zi*>?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E)>ESNq3 diff --git a/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00016.png b/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..137ca9e4946dcd461fab8ca146124917077d946d GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#B;O$e9@oI; z8=l|ytGsXJ_s%?d!PDvE>UTex1eaXV4~{klY65{3J9h8B|J!u!_cweo*Vb-Idf6Pr zaC*~`_EmSDW@jq6XfnJ`Rfw%Mu0H$jfb82Q<*3@pvl$m^ZO{AaYto=Tktbmbr}ic8 zgx#@%_&)K@;U~L{E3ACNW|0C&t;uc GLK6TUIGRfU literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00009.png b/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00009.png index c3d91803266513c0381429a103e59db091faba59..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00010.png b/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00010.png index 471324463647c42b2de74c282e34caf0e801955d..c3d91803266513c0381429a103e59db091faba59 100644 GIT binary patch delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB delta 433 zcmV;i0Z#t&0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00010.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00010.png index 471324463647c42b2de74c282e34caf0e801955d..c3d91803266513c0381429a103e59db091faba59 100644 GIT binary patch delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB delta 433 zcmV;i0Z#t&0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt83B7%7z!WUV)^{^@uv@6 z4}8p)Qe7G{|J-MrH80D*-Hqd#X?4A|(qFT*c8juXhW@=<3np5w`W<{}w1#ePdpxC;IJqQL5>()gPmE7(T?u{;Phzxc6t}h1;j@ t2e=tAh#N!Eo&)I`3=FCa$lya{9Yev{Q*-$}9x;N%Jzf1=);T3K0RTUqjv)X5 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00010.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00010.png index 471324463647c42b2de74c282e34caf0e801955d..e9cbcd7e7348486b01339d3c8cbb5a9ecbdcef37 100644 GIT binary patch delta 300 zcmX@je4J^5N83B7%7z!WUV)^{^@uv@6 z4}8p)Qe7G{|J-MrH80D*-Hqd#X?4A|(qFT*c8juXhW@=<3np5w`W<{}w1#ePdpxC;IJqQL5>()gPmE7(T?u{;Phzxc6t}h1;j@ t2e=tAh#N!Eo&)I`3=FCa$lya{9Yev{Q*-$}9x;N%Jzf1=);T3K0RVF^j!ggn delta 433 zcmV;i0Z#tM0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjfl+MsF diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00010.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00010.png index 471324463647c42b2de74c282e34caf0e801955d..c3d91803266513c0381429a103e59db091faba59 100644 GIT binary patch delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB delta 433 zcmV;i0Z#t&0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6P2c86wBYy$qNkl5xVz)Zm*Sx(;7EA8YU$lXVmb5JTKcVlPZgBz zPq>GpTrJ_pVfG!cx@za@YqiM)ILhT*guAsth?bysfv%ZV8ArK{`%q%K#wn?FL?ZR4 z%)A36%2IRuGJidqk5=C@m{hZ>M=(QOWqmlD>D*`YEwFN&zDknOzvGz%l*{mbX7tO0 z2`EmGKQ{W$Lk|9uH>g6+KcC7bcf~9+nT8`ks2#jML3Ezm3&4 zHpIs1j%gnv`c<>fI^Ugj>BA`ZH)0xbMYex>Y;|DttbTId`vkXJbr0^g`YfBe02Q&#)Htwt@YVWaUiam?wHi<~Hk!UhY+_+Sep`a%1bHHR#{HtR z2OMk1pgh;zg~)noCP|VcNz&#cq!lb1RPFJ30JlSPU}**#_nkvp zy|moBfoftoa(}kNnX0=x+}fa5KDZb+gO=uX%z2Kg^WzZdH2pY9ebcaF0I;fKy=~Jn zQWfK9J9+_znMFN10RzzW%%P^yc;NuuwHEv2DM|bcs0Jd+U2DtkwS`rjry^9|h*=4j zkJ$SYrMT8w-+X~{SG2NX4>&@feUogiT%fEE_`J7fPJhDJ7UeNi@6xt1d%zNOF=Gt2 zjancvned({)AA%q?xVg0RmB7P5tnGpu&M>l81%$q@&UKsEiuIe*w~QUASj74ruvMu z(aUqK)}*oN!qmI8VT7H60*MuqH{X6yBBoUBl|oQg&xy*F=BY#7<>21vQCH~MExuAZ!4Xc}h#-rQolaP|%jKZV$Nq6yaE27T_5GjdUeTT2y5(W7Ns=TFMwvjJ1b1tt9gQWkSN1sQ-ko3>Yk{EFbtzD2iyDcrKj~Rz ztWvjJhX`u47IP^?XdAiNStvzmr3Br5z)h0!$PB1D9G;^rm7~K2HPFRVSULa;1hxAY z1S9)q!d3JybDl!*43L`p8bR&&`Dbr;>nsiw+IHE5G5nkF diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00010.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00010.png index f45f45fbe7f8d86586d88d270a4f91f1436690e4..afb2b86184b57eab884c6bcbae24ec9baa8aa51d 100644 GIT binary patch delta 946 zcmV;j15Nzc2gnDIB!7=dL_t(|ob8)kcElhEh0~tyWcI(L?4=JmwG8ML5RGa1o-z(9 z!T7_?%*U~c^E~Ot*Xy;c>z(Dng;kuVB2?apSqYbq z*!vTuxYkw6J}9hTBBwu zJZh6sYJZk)uf~5**8<-ih`<4FtvLX)PKY4o3lLk!**<)iS4yyl+8HoU4%EQr_yUnK zimr!-C8+u?>43|<6s>%l#E4fCjaNR;!I2uflq5-#B*}7|?*j&N;1m9kqMCw~Yn)Ll zQ+JR|X`>{4L9wtwiQeBmVj163M>Z_71%irq(VnsRIE zDyJqOYygybN=xFWmgRR3_?EDK&<#g*kW4?hkZw4}z&QXwPy;0`G?rk1l~k3)+wlxQ zxS(e0R2I%q(3Y`o54iml;aFZ4;28jobR|n#RAn#a8-kD%QTLQgoorS4Q)phX4z|1x zJAb|tzL>OJY&ZrBgD19>=5 Ub0Z^*$GVQFjW`FApasgtBTV5Rii2eUN zV9)H6?v2rk_p+-CL(!I5IuB$Y{Aw50bzgsL(Vzt)gY-2c6ALoQA0dcukSF3h=lw$G z3@Cfopx)QrK;%teS}k%u*A`J`DfS<+i9{liNF;Rp3~OrjdRw5@M&tCia|5H?b$K-@ zV^bYnYpWn;Z+~KuIh^OY7y_iso~)C@84F6rt%k;b73nU+t<~~{&~xC;?%HIr2ws5h z7;J`zb8298DvU}AXI2(bq*Dvf9b`9jP9nq_$UpO40v>WU)`lR_tubZ|x4#V`y$eso zaJ+-uxJGdo5gEJ#kjRUVlUUbofi$m_cMACT=uNkZ}Q`HCgp&24k(+25}!E7obb>h{P`#sb}24 z*=DXawtxFIE$+iwGVXC?(SC2I$hh0_f@&O1LyL4flNK?)a}_RA%m_P{h7K6iylusH zq@jsKB9TZWc0kC2Tv^0G?g27-#Y{Ykl7nfEAuV{`B_=bPKfZ#Tvuxa=Mo58AC~a;I z!;H@p>bHmEJ+ zQr80c!Lc;m4m3VO#*r;~un&oB|Lh`mf1RSyQ+qraSpXNAWtYTbIF|im!}95;i)jE4 zJc5`vn+a diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00011.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00011.png index c1e704a2db30f88efa0b45c0b1dc78351e208489..f45f45fbe7f8d86586d88d270a4f91f1436690e4 100644 GIT binary patch delta 962 zcmV;z13mnh2-pXZB!8btL_t(|ob6m&mZcyJr04Wb-2al?%Y1l-;pRmJ0$x3-uiKb} z01}c?`={)}d7kZ`$8l`y`kV2GH<6i&#f|fRp6Ak`ArA1yUoNzBj#{5;zn2f!rTPPu zX$4xX`e#)UdnaZihx*SAV)kPPY@YqgrwiqCI>^*$GVQFjW`FApasgtBTV5Rii2eUN zV9)H6?v2rk_p+-CL(!I5IuB$Y{Aw50bzgsL(Vzt)gY-2c6ALoQA0dcukSF3h=lw$G z3@Cfopx)QrK;%teS}k%u*A`J`DfS<+i9{liNF;Rp3~OrjdRw5@M&tCia|5H?b$K-@ zV^bYnYpWn;Z+~KuIh^OY7y_iso~)C@84F6rt%k;b73nU+t<~~{&~xC;?%HIr2ws5h z7;J`zb8298DvU}AXI2(bq*Dvf9b`9jP9nq_$UpO40v>WU)`lR_tubZ|x4#V`y$eso zaJ+-uxJGdo5gEJ#kjRUVlUUbofi$m_cMACT=uNkZ}Q`HCgp&24k(+25}!E7obb>h{P`#sb}24 z*=DXawtxFIE$+iwGVXC?(SC2I$hh0_f@&O1LyL4flNK?)a}_RA%m_P{h7K6iylusH zq@jsKB9TZWc0kC2Tv^0G?g27-#Y{Ykl7nfEAuV{`B_=bPKfZ#Tvuxa=Mo58AC~a;I z!;H@p>bHmEJ+ zQr80c!Lc;m4m3VO#*r;~un&oB|Lh`mf1RSyQ+qraSpXNAWtYTbIF|im!}95;i)jE4 zJc5`vxBUaqb9FqzVZwL zl1N~#?N`}_^E}%>kK@>8`px*IheV|2;=#C|=ecxgj01Y`TMO-sQR`E+d--tPsu!e8 zE6~oWf7U6`x==fFsejxMYCm?s=ICEOT_~U75TUVT+NiZ^Ykvf_fKa71uTB6$|KA<3 zC;Gy?vs(BrhfFvVeVL_k5c}ZUy0OlDy|%JJ3r2>qbw_3{M36sHklr9a5$}xqh0Zsi z?0p9Hz3wKWXaUpC65r=K0%ewB|0gz)NF)-8gpDsa3cLT}_MCdI#R`xkT9vQa67y|2 z%9+)Lmd2JqR)1M`4MM`eX)K|(;U1MS7n9Umf3wu7QYT88+sq)jmy<`#h+pj8YLmX`j3SB9BF zY94cdndQjfZvYHv%gaYyj855)bwrJ?nJPnJ^$CB6s(*7~PAt8e&#!UeCqb_bI$-&u zUD6i2tBY3Qi9{liNF-hWmW;DLugvaeQ zZ23sS%Qx!x!2T_!-DO;bVqMKVa3}moxjM@zuV>vdt-Y%)#>lwgb`d6uSrc`0bO*z( z3ixra7=LF&tKPO%hJytyhUpJsYPKk;DO`fKXsu`#Vq_eo3bYubZEPiT=|2)nZQ%z% zK5D;si2A*b4!en^PaQmfYp?mKPy`G9b|F%eqs=nv5L(-RNl^n4bNmU-8pExF zS*=^sOJLnYT!1YC@5#*${B_X#6kh1p#Cq$QZRE>qL%wy!G&5@q^N%J%beSx&p&c__ z2%ck%2)R$6YFZ(q8_ls3c_bc;ewnfZ>g#!`Uj-a5 zLx1!-&$wBHIZ4&E)PHo=^B68e8J+x;pM@PM=--RlMBrm7uR{C$-m=*fiNqYp6r{iG z&WIj#PRhfY!6`PZ8cB>>?sX6KL*Jr$pjXkAVleG{wCv%9Euv9Vk^?T?SsLS&r3A`s zYQ#by-~G+7Ofz1^4rY;Ck6~AYd7%gPJA2XS&+4JZx~e5ykZxkfj-FZRHPkRit&lpq z$6kt&F?f)R8l)l?Wdo5b+i1e^bzlx-IbQJ|zJ(3FVC5nvN9~8@Rmel|AGZqaOmftj wSC42tWWIL5*d6ojCeijfo-UC{BoZ&gZyM=r**D`9UH||907*qoM6N<$f`DWE+W-In diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00012.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00012.png index 6fb484ac58ed68718402bc8e263925e7f3a54d85..c1e704a2db30f88efa0b45c0b1dc78351e208489 100644 GIT binary patch delta 1026 zcmV+d1pWJz2bc(uB!AyYL_t(|ob6muw%s5I^!2=*WdBRbUiy(!>xBUaqb9FqzVZwL zl1N~#?N`}_^E}%>kK@>8`px*IheV|2;=#C|=ecxgj01Y`TMO-sQR`E+d--tPsu!e8 zE6~oWf7U6`x==fFsejxMYCm?s=ICEOT_~U75TUVT+NiZ^Ykvf_fKa71uTB6$|KA<3 zC;Gy?vs(BrhfFvVeVL_k5c}ZUy0OlDy|%JJ3r2>qbw_3{M36sHklr9a5$}xqh0Zsi z?0p9Hz3wKWXaUpC65r=K0%ewB|0gz)NF)-8gpDsa3cLT}_MCdI#R`xkT9vQa67y|2 z%9+)Lmd2JqR)1M`4MM`eX)K|(;U1MS7n9Umf3wu7QYT88+sq)jmy<`#h+pj8YLmX`j3SB9BF zY94cdndQjfZvYHv%gaYyj855)bwrJ?nJPnJ^$CB6s(*7~PAt8e&#!UeCqb_bI$-&u zUD6i2tBY3Qi9{liNF-hWmW;DLugvaeQ zZ23sS%Qx!x!2T_!-DO;bVqMKVa3}moxjM@zuV>vdt-Y%)#>lwgb`d6uSrc`0bO*z( z3ixra7=LF&tKPO%hJytyhUpJsYPKk;DO`fKXsu`#Vq_eo3bYubZEPiT=|2)nZQ%z% zK5D;si2A*b4!en^PaQmfYp?mKPy`G9b|F%eqs=nv5L(-RNl^n4bNmU-8pExF zS*=^sOJLnYT!1YC@5#*${B_X#6kh1p#Cq$QZRE>qL%wy!G&5@q^N%J%beSx&p&c__ z2%ck%2)R$6YFZ(q8_ls3c_bc;ewnfZ>g#!`Uj-a5 zLx1!-&$wBHIZ4&E)PHo=^B68e8J+x;pM@PM=--RlMBrm7uR{C$-m=*fiNqYp6r{iG z&WIj#PRhfY!6`PZ8cB>>?sX6KL*Jr$pjXkAVleG{wCv%9Euv9Vk^?T?SsLS&r3A`s zYQ#by-~G+7Ofz1^4rY;Ck6~AYd7%gPJA2XS&+4JZx~e5ykZxkfj-FZRHPkRit&lpq z$6kt&F?f)R8l)l?Wdo5b+i1e^bzlx-IbQJ|zJ(3FVC5nvN9~8@Rmel|AGZqaOmftj wSC42tWWIL5*d6ojCeijfo-UC{BoZ&gZyM=r**D`9UH||907*qoM6N<$f^W?HmjD0& delta 893 zcmV-@1A_dR2$TnqB!62;L_t(|ob8-jmV+P+hM76tiThuYdzlAMnV1^^0)i*slhqI+ zNPxe#KWP@{dBTs!aZIavWq#=?)Kb1Y*zV_f4!t!?0QBUC8qI7Y7*nqIis8DH4~#a@ z0G7%ha}l<7)GJ|oIH-u#lXgkA3)e~wE1VIo417O5BL{W`WCjCwg3x(0C`swQsRtJQ!(H)5r ztrT`OZ6eeN4NKS2EHNk*N&byz8usBC=GDa27`=O{RigB(8H;^t+X;JN+_*Ukv}_ub zG7^mB_{*{mje1>0hgEo{AeaY^`rlmkWG$HYdY;7jEBzM1h?;07`P(J?U?tsMGEE&FxMj zz(~I$G?N#0z+Swt1NPDZckO^Y3ESUUTa$&p4=4ha&SxWWWY-ZOvC;G!1VKuF2FED8 TpV*qk00000NkvXXu0mjfLFclA diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00013.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00013.png index 2f514b48f9d2027a0122623319ece3284253cff7..6fb484ac58ed68718402bc8e263925e7f3a54d85 100644 GIT binary patch delta 894 zcmV-^1A+X?1C$4lBYy*1Nklo4 zB1nM0wm)eW=Xt`9$8k)ndS!m;Db!NFJlO8%c@DibO91rbhZ@anBN$Vz_ln`Vln;zH z&;XXoA9E45cI4LcR=;5&x3>{6x%ID@F4Da@P}4{@u+^a3+<$`90J)-`M<)Q}|9=F` zX?;|^a<}ZWTvdfqP`4S{4rm;FqzmJ!&&N_WfLLrSb@kZzf*Sdjg6II*ku}@>qA&-f zxqXnI>tZ6RUBJLnXnxLTSev2DpJIa`2!bGx`Jt!KMx0dwps}>Hm&z&|edw*IE_C{5 zEql%=QPF!5xqnP0Re&0^mdZX;zr@y6>qLs#9&Ou!60mZK*#}64sV~P>t(P~+$+By3 ztcJ3%*}!-|meE($I&2zg@K04wiw?@#DA}@jU*!&{62*`WTefQ3srOB@U5d1E7P$RvvYnMn1vbbkOEeVz9sc^fe+tk(L;(gF5# zW=Vw=3o?Uol{bWC4rn{WM%5E)5ClOG1Os5iI7Cs6QYQUQ4GV?Qsru>b5LO3-vC$og z60H<=HEkl)2n|cu(JV126-oY$XBzh58Rpf*)fl~ds#T)&s~L-ZYTF5WVcfVm3bbq* zlrj>Gm`ufk^(~xNc2kfhwU*rXZLHj{4tR_GB%X_j;bh`78Y=R07*qoM6N<$g6Q0`vj6}9 delta 433 zcmV;i0Z#su2g(DGBYy#rNkl%@}sb+Wc}Tl)H-;VK3K20A-EnV z%cwzqY(e<~@iusDR>C$*wrHFIVbU{5Q#JicF*p56{Yt=|^6*?PJ)_@TUekZ$?ok@z z6V&_W)N|uK;D6t0PS5@GcihP<0KjsuWi4$<&*gpignfL(`UBwbBS$CW7L$3gO1dpr zIf0F(o2j}y)Te2td}X1TDJsqAQiW!adZD+?D?sYMXLBO|QD?n~^`wUGIurkg z+3Tza&~JU-(8)ntQ0UuF>W61|KATcXuJeB}0000004e|g00000000000000000000 bfU|r9InYp>n=yH200000NkvXXu0mjf@etEL diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00014.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00014.png index 4c6054eae8aa93a4b1db94ce6fa78c923c951244..2f514b48f9d2027a0122623319ece3284253cff7 100644 GIT binary patch delta 433 zcmV;i0Z#tI1%@}sb+Wc}Tl)H-;VK3K20A-EnV z%cwzqY(e<~@iusDR>C$*wrHFIVbU{5Q#JicF*p56{Yt=|^6*?PJ)_@TUekZ$?ok@z z6V&_W)N|uK;D6t0PS5@GcihP<0KjsuWi4$<&*gpignfL(`UBwbBS$CW7L$3gO1dpr zIf0F(o2j}y)Te2td}X1TDJsqAQiW!adZD+?D?sYMXLBO|QD?n~^`wUGIurkg z+3Tza&~JU-(8)ntQ0UuF>W61|KATcXuJeB}0000004e|g00000000000000000000 bfU|r9InYp>n=yH200000NkvXXu0mjfJwDTH delta 684 zcmV;d0#p6U1H%Q7BYy&lNkl$n>2^|8y=7+p57*rqa^dU0L#5kVx0S^>VLJvzedA5oN~m%5BXvF z8fe}h)&GocLl7sQjvz67R>7U+bYFAB3*aIC^8D!<#3ZRD;dI`zWwy|ITb_iMA20v_ z001ZusvrYWlay(l)FGudkfa)hJnw`LRQ{w@M@gE9)-aiq@-+A2xeAnb%lv^q)cPEI z+c0_~SKsKkc7I!AzJ3HTPU~?}4a*~xl52q!pitw@;4-2)#C(%`T`KX z;y#_dHt9qi=meSr?2-7uL_=+pRLQ%Per%gN8QY<}0Dt1K#dBk|_qK$VBAGTt)~|XP z@^QtGGRkYwhGswf7pA5tyYp}k0As1-fX6etJOcoj1jM*%N!md8ny%ZE*m)ufWaL-T zfNIgwV|F_;1hq-(Si^83WvxfxBlIR=aa-77mCUFyO6>A$=oaD`)ChLxzMsA={0f?1 z6yrLYy?@Wzc7QG0@oqJfocda5PpmIPN50BXPWe(P;eQkLl~nU%b*DO6zW@Z|6_vla zpU#2AQ!ca;18%~{p+8ol8l_+lvC5cWzny^{pk>!iY_X54V`UPy?b**-v?lOrBQ{KM z*}eMl7y5YcH6BYy&lNkl$n>2^|8y=7+p57*rqa^dU0L#5kVx0S^>VLJvzedA5oN~m%5BXvF z8fe}h)&GocLl7sQjvz67R>7U+bYFAB3*aIC^8D!<#3ZRD;dI`zWwy|ITb_iMA20v_ z001ZusvrYWlay(l)FGudkfa)hJnw`LRQ{w@M@gE9)-aiq@-+A2xeAnb%lv^q)cPEI z+c0_~SKsKkc7I!AzJ3HTPU~?}4a*~xl52q!pitw@;4-2)#C(%`T`KX z;y#_dHt9qi=meSr?2-7uL_=+pRLQ%Per%gN8QY<}0Dt1K#dBk|_qK$VBAGTt)~|XP z@^QtGGRkYwhGswf7pA5tyYp}k0As1-fX6etJOcoj1jM*%N!md8ny%ZE*m)ufWaL-T zfNIgwV|F_;1hq-(Si^83WvxfxBlIR=aa-77mCUFyO6>A$=oaD`)ChLxzMsA={0f?1 z6yrLYy?@Wzc7QG0@oqJfocda5PpmIPN50BXPWe(P;eQkLl~nU%b*DO6zW@Z|6_vla zpU#2AQ!ca;18%~{p+8ol8l_+lvC5cWzny^{pk>!iY_X54V`UPy?b**-v?lOrBQ{KM z*}eMl7y5YRN)eWAy;Bao8U$L9n)%)QA|CtvZcZ&{pt>Mx;sc&5$b}gaGV|uHm*!k*< zc^_+^EIYn4e8O9uX+MO-d~_HX>UAtw&x*?xy$O)DwR*CH*)6v%)aL2rOUyYRA7s2( z^88-$F8|rb#2;S^t#{?i%bFOx^B2<=*0xYDzUC|92lj5wzw+2g>2`hb)&)za&gq-7 zxn$G+zn7RE*nNNAxjS$6-C|?E?Ui3-7;u10`7gh39MKltSOrqx>FVdQ&MBb@04ctT AU;qFB diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00016.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00016.png index 914563b11cce944c340e4df681a2a8b4a884142f..db7c22e31883fd4aaee39ca17765700fb05d0318 100644 GIT binary patch delta 313 zcmZo-zQQy?rC!?8#WAE}&fA-gLd^<1t%+~HsNMPRac3!aT85g7qxg@E|M{v9EEEI0 zFV{vpp1Wxl?B(xj)I57_)11u-A>pmT72D0%ZrcB*ChJV%@{TD%>U%fs){)+JJXZd$ z!co_)w;8wU22WjZIJeHP*v;(f{qTVQ%!`h@MTfiAaOs`Yw+^enmQdv}y;W1}eD%e= zkF`&h9p4!~;jPZJA3|b2It&c;Iu@*F#pR0L1jyQ2J=wwRmfIF;^K|kh=A4fYGF~is zey@0!|LkMpkFSN+yYl5_O$^@oi)jmMTc{Ub^A+&}d$;CadF-TgyS{kqf~8aE^iA1Z zvT6U{OH2>!zCZ8Woj3b#v7gcQ$}chuI6$WSm)|#zXp3&F0x9rx^>bP0l+XkK)U}En delta 359 zcmcb@)WkeNrQXxi#WAE}&fDv;o0=7P+7jQCsK2TAe798GXYLp7NAg`azV9s3Qh&nY z@lxQNVc+8~GRZcX)4tAJBJ<|+ul>7bt-bq>L+D6-(ague*S+kdpS)!cjsKRJv|qCM zW@_fEOrLK&KmR)}YJIeAD$AzJCnHa)?f36e6O5Y_fArOFq2m&@_1YV@PPRH#@%xmW z&&5s6rzLM4J<<2^q`acE_6^n*5q}T0ovnNET5cbE{l-~k?b}`z%|0Qu=UJT0d^OuQ z-I}wj-mN{8!GAXQq}%^Y$I|Nwefk%!O}eRdf6twyht>)qQOvh_FV$>Y&2oKrEsNy* z-uL^>{9ideO}S?MxT#oE(^20yVZV<*gPz$Izl7O4e`_?@m0oMo`R^^ATT(0jNbHIP ycSG{7clLJ||I)Qx{L6nw8(ZEY2JGO0e+|Q-1jZRb{)=CLRCv1jxvX7bt-bq>L+D6-(ague*S+kdpS)!cjsKRJv|qCM zW@_fEOrLK&KmR)}YJIeAD$AzJCnHa)?f36e6O5Y_fArOFq2m&@_1YV@PPRH#@%xmW z&&5s6rzLM4J<<2^q`acE_6^n*5q}T0ovnNET5cbE{l-~k?b}`z%|0Qu=UJT0d^OuQ z-I}wj-mN{8!GAXQq}%^Y$I|Nwefk%!O}eRdf6twyht>)qQOvh_FV$>Y&2oKrEsNy* z-uL^>{9ideO}S?MxT#oE(^20yVZV<*gPz$Izl7O4e`_?@m0oMo`R^^ATT(0jNbHIP ycSG{7clLJ||I)Qx{L6nw8(ZEY2JGO0e+|Q-1jZRb{)=CLRCv1jxvXC&xrQX)l#WAE}&fA-gLWdN194@}7n0)8I$IkBVJ`YX~D?f(6`AZX2)pQfI zH?bKTZ@wAmQ}EUIW2c958?WusdshWdGtHQ}s_n?-!j{=asr*0LSLqg=TW@dkzDuWh z)vt$stTQJ4Ra&OB(A~yv!{g+Y+pS&dDyr75I=KJ(^#_p+JD>lnkKXw~@_xo&jjV#) zQkLKIU3XYq^bZcG;k{JwQ}jab!FcWNHPNwkvoysYYF>A=)7)R`u}?@vxj56x=F{v%c`B zeOMBg6232X!Y!X79_)fF0a8AnTFE?%(3DDh;H-)78&qol`;+0MZwm=Kufz diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00018.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00018.png index 43c85f24dd3de78e3dbe1e9d71df28a02235be44..fb4e7918681a183322082ef74706bcf71cccf1c7 100644 GIT binary patch delta 332 zcmV-S0ki(z1@;1vBYy!sNkl3-* zCM{qqvIa9Vv)NHhaP>{`iAW=c4Lzma)e*}An3<}E#M5zvn=)k&`3I^ka?Yw0BczUg>!N1qn;8}pV=YRfNx$qg^X#FT^aBX!2 z`=3R)IMGj2P<##2aQPL`jlo|li>zB+ewry4;VIWaJ}JL-NWKyzBXemwJo3k`v%vuX z03w&!0f;m*40Rm|DLFx62pU-G5lzwV^f0%bUPI#eB^iu8FL#` zftQ#f+<=#8<#ldNq4wq<=X<}_YIfXRNWoBv77^w3kD|63Q-4H^sH2<$AJ?1z74XR1 zH&^A#9zC?xXyXH&AlAWK{9&taGa5c;dE+O75v%Gu5o7$Z1sxj$r-M#*pLVp{b>|Ey z+s1(IA$&)sa&b-KmfWoCrDg1hn5V@iPHyr50002!@e<$sq^94kgqprQ=v;#MtG;D9 zYAy72!puNu*MBXwRxn+)c&ag)*l^ycqU8P*&v&PmSv}&{6pZ`zWg~U9Sx~&?k$=i} z02y^>qG^zO&lRtP(O`nI!MgDmk~35qnGG%3?**NG44Rpn;W|O7V~-|d1*AWQ;|=b* zrheI)HK9oK7Qg7UpNh!xw2%0{v`G32Fjtj50A+Rz&VTfaPS~yZ9jZG$HCua{aRvxy z@rfXo?a&O;XF#?7+r>30Jkzh}sg|r+*Ka~(3`~Q$o&f*=0Kgt(GHwF@q1#PY={#3a z*Pd>!&G%(qhn(gFvv@&;y$oH*Mw48A#jaVfmZKBD@=rfRymx@_hOWb6&T@NyB3z%@ zX;UpB!GGJU8;QAP&s$BA?^*%oRBcT<{=-Zjm&P@{*>_zJt%hbQA`wa+ zOs`Wj{ji809`Vdh^yM(N1x4`BWNyQ!&+Z1B{d@GZY>+v4%rl^sf}h|!=RN=c00000 t00000000000000000000006+3^9vq+5vG^LKREyZ002ovPDHLkV1h?aRFMDx diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00019.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00019.png index 471324463647c42b2de74c282e34caf0e801955d..43c85f24dd3de78e3dbe1e9d71df28a02235be44 100644 GIT binary patch delta 711 zcmV;&0yzE41KtIYBYy&=Nkl*40Rm|DLFx62pU-G5lzwV^f0%bUPI#eB^iu8FL#` zftQ#f+<=#8<#ldNq4wq<=X<}_YIfXRNWoBv77^w3kD|63Q-4H^sH2<$AJ?1z74XR1 zH&^A#9zC?xXyXH&AlAWK{9&taGa5c;dE+O75v%Gu5o7$Z1sxj$r-M#*pLVp{b>|Ey z+s1(IA$&)sa&b-KmfWoCrDg1hn5V@iPHyr50002!@e<$sq^94kgqprQ=v;#MtG;D9 zYAy72!puNu*MBXwRxn+)c&ag)*l^ycqU8P*&v&PmSv}&{6pZ`zWg~U9Sx~&?k$=i} z02y^>qG^zO&lRtP(O`nI!MgDmk~35qnGG%3?**NG44Rpn;W|O7V~-|d1*AWQ;|=b* zrheI)HK9oK7Qg7UpNh!xw2%0{v`G32Fjtj50A+Rz&VTfaPS~yZ9jZG$HCua{aRvxy z@rfXo?a&O;XF#?7+r>30Jkzh}sg|r+*Ka~(3`~Q$o&f*=0Kgt(GHwF@q1#PY={#3a z*Pd>!&G%(qhn(gFvv@&;y$oH*Mw48A#jaVfmZKBD@=rfRymx@_hOWb6&T@NyB3z%@ zX;UpB!GGJU8;QAP&s$BA?^*%oRBcT<{=-Zjm&P@{*>_zJt%hbQA`wa+ zOs`Wj{ji809`Vdh^yM(N1x4`BWNyQ!&+Z1B{d@GZY>+v4%rl^sf}h|!=RN=c00000 t00000000000000000000006+3^9vq+5vG^LKREyZ002ovPDHLkV1m+_RA&GH delta 434 zcmV;j0Zsni10000000000GrafSd+k=txobDzH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|D zrlT*m5)eZigKjgVo>74`SYX#hrE9#IzY@`D{rjEKAO6`Jghqx8uhvwT`%TFKC%buIrt__>Wv@K905|BC6`I>HPc(qGNvOXRXe1o zvj(&(Eif{z2Y=rz!s(l3c}jMeV3sm*q_B4#{bNV~V8wNFy5efV6r}9YuX2s*wNKcn zmD|L@^KG?$+>*||c@4D@;9lfC3gu>biKhO%gl{4q=i||Ms)A?sS?we#tCjqhVk97azfh*!)V$JmB$L~L72m$~A00000 c004A60Tiq>(_r(*v;Y7A07*qoM6N<$g2Ow|O8@`> diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00020.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00020.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 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 acou(u^iLm&WE+710000Q}p}P;kgtK8f{X8 z^se|b-cs}qij{2YUo}9nuMuDz{ijY3*E<{_G?+~qwY1n6!GGKU6qT2(od7`j|0BRA z`oKNW+Tyd^<$}18wo#1(7zaPt1wHri7|RAJEjBH_I5x6?Aiq*jK0tP4&A2~Q=77t# z58`uOO+>v5nDj0%KgTmg8&&M5SjTZ3$8l5{-Y5|UMH^X1A%W>=GP2br_NYp6ncD$S zjN^c*X5eJ1;eP<*O&!eyQ_zUVs;bpg(}I*E`u28593)3Tk%7dGX`Hf-hLLqtcp)QB zlzdlnG^`B>w#cFb90G0%0wQ*Cy6e@^iZ7(Z9nlpqa3qG!yQCu>U7muDV$*fV3XUAd z;nS$H@wb#_D%(*hs7nvn!jTBVV%%XW8{bhCEiI^6QGaYxll}xBA6`g+7IDN!U5rZ^ z`@X8zp8rXmC3|edmX-7P?9l-SW0!)=R5onF+)rgQ<4BdQ5l=x*f~#zf<1i_XZY8;G zBS%IUS6As<9ZN^@VqEo^ipL)!w;4e!vC}iyF;)oHomIJC%2DyE;5aiC<1hx=WBK)5 zua_=lHh*GI!{Spp7SJ{2Hr41~QX_zn-M7Y|Efy(gYq_mh$ZhgR?UI})w@H=nV%&$} za+~8gOHs`gn7$M*0Rv)}J8(dF7h(P+OfTlDt3B-<+{XI=5jkw9wf1TV%3(wbDjJAq zA*^D2tWyy2iesRtI6kT}I0x0jC(Hr%U!Sea{76Z7nEU0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L400000000000000GrafSd+k=txobDzH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|D zrlT*m5)eZigKjgVo>74`SYX#hrE9#IzY@`D{rjEKAO6`Jghqx8uhvwT`%TFKC%buIrt__>Wv@K905|BC6`I>HPc(qGNvOXRXe1o zvj(&(Eif{z2Y=rz!s(l3c}jMeV3sm*q_B4#{bNV~V8wNFy5efV6r}9YuX2s*wNKcn zmD|L@^KG?$+>*||c@4D@;9lfC3gu>biKhO%gl{4q=i||Ms)A?sS?we#tCjqhVk97azfh*!)V$JmB$L~L72m$~A00000 c004A60Tiq>(_r(*v;Y7A07*qoM6N<$g3^7^Q~&?~ diff --git a/tests/integration/nano/snapshots/nanox/test_ensure_always_clearsign/00015.png b/tests/integration/nano/snapshots/nanox/test_ensure_always_clearsign/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr diff --git a/tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_added_at_the_end/00010.png b/tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_added_at_the_end/00010.png index 393a15fb76753fbec14215b680629fedbfa392f5..c3d91803266513c0381429a103e59db091faba59 100644 GIT binary patch delta 344 zcmeyx{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@038sSIsgCw delta 480 zcmV<60U!SJ0{R1xB!9t4L_t(|obB0LlENSmK+!nmPT2pFvX}X=q}qNU;U(kT^A(ZM zElD8Y?U>*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>z@as@f}T8+_Qi8fxL+)qT516n{?5GoqPsZA!_ASx(i7 zwEu=)gEo|}@C5YkrXl;1obwwoKTvoA+|_qtF9(hbZ1h@vc9Y)!NVy9SkwQxtY-3U#>-(Od zQYGiN;--xN00000Ahp(7YwheRK6O32fIlh_eYa!-M*7>fom8QwRV600000 e0001hB5q2vdJ%F-?YF)F00009lcFm`nhbJ{xd~4eLv+BqFsM9rvX2&;IAN>34hv5A^+A1-(64{q{ z)yvr_Keae!b!y&g`R!-QRSWYSR((mH9%Y{X-R!KYoXU5>E8p{1$^DsrrrWA#!C#)U zX?!1Z*UT)Im-Bc0S-qiN=+B>NXM#DvJ^&F7N_k$JtBO3|Zr=yudb;|#taD0e0su+c Bhid=; literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00009.png b/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00009.png index 431986c71c6e730392aef05dda8241072bc257cd..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 517 zcmV+g0{Z>u1)c5xVz)Zm*Sx(;7EA8YU$lXVmb5JTKcVlPZgBz zPq>GpTrJ_pVfG!cx@za@YqiM)ILhT*guAsth?bysfv%ZV8ArK{`%q%K#wn?FL?ZR4 z%)A36%2IRuGJidqk5=C@m{hZ>M=(QOWqmlD>D*`YEwFN&zDknOzvGz%l*{mbX7tO0 z2`EmGKQ{W$Lk|9uH>g6+KcC7bcf~9+nT8`ks2#jML3Ezm3&4 zHpIs1j%gnv`c<>fI^Ugj>BA`ZH)0xbMYex>Y;|DttbTId`vkX0x$iZ1m^{iBYy&}NklNn-vKh! zN9h|!TfCO1QZ#mK$FSA`-3PDQ4}9tK=UQ(78HpLmwG%@ND)Oxhdfp%>Vzcgv&KMA6 z&q2PfyB*Q&1P1Pf#^=1H7{iME5bHRO<2a5Cv(t%oFl-IZRf<`b7i;6G(Uz%n4X_uq z$<#E9FPN~k<$neFAjBsiQM1p`Mrh`s;83qoyLL>ek(<;Iph?kSX>=Fk{#Uoh=zd;K zJr%Y9*&Wbb<|&#So2gk>u!RRQd}Qxep5@fs{sGwu_zWXY9+p8kR0cPuGlYzE^3=r! zEyDLuX?&DE?k*%A1Ne?#%ryQ4&Ykc$j&nLpz8DIVH-F}e0`?JIh!q)}+o6}M2xo-4 z0=U)zf!UH9`ITG%-%E33aQkB2$*8)3Ss3qtBAe>>4G(McRE04>(URK~kUA?`*Gqp8 z{&MIaNwWH4iUQC>F>afB9d%z!UBDFH1${2+7ofTT$8luPGR06{d53NvLxb>wDF#t- z==Pym2Y;x%t#*VMHCRnC)E5=~dNDDZNSkpPQ*%T`F`8q5x+@3K5@To(9tT-5rk$A{ zTwRd5D`!@W9HvY$Q(_=Tc0tY@rY<^DVjRcWr?#FHHpNgR+|Dgy2ZBKuxnqZ#Vr}?j zFj^5tOfdl&`m`OcZWy6Mr!Hd_GCMlH|8H>T(n&BfN0gLdZXssGp%ar~?gV@rWP|WX z|HEpEU6sFh6_#NgBc_-U8Ns`t??wI6OBj*isPP8~+Gq6ndvgu|0000+ zz{7{iPmm(U2)|y}C6?MUzt2smQnV=6J;um-Xd?oi8(+^L$r?dTId9UCe###PV_*Q> zD}T+q6tkmdDG&8612ucQ1B9!eG$q2l9H=z47+5vfY_8xl0Dm?0Y?-?QK<)qE0W#G` z=^IB|yq2d@GeChM&T5kXui5bbY6GICs@~sPc-XJGpv+jw`7!YL7 zLB6iL9ntIr2JVH%=e(sD!;1V6>o|_%IF1an(}{L4Yz@v;idmKyYvZZWmZ@|Nuotw+ z)HI7Pn6S0w1%LS<#3vw8v(L~*Xy%~cP_I$Dc1)>}o751XNzq_wbQk0PSGULLeqK&J z6}AA`9nf9oDViLcsaaRBg$FWxWbap=<<#8%0oe)o3?ok-mO(gF1~;ZNgp73Z)WrrZ z!uL>Ve3U-!E+ifU_>N!9H2wt6o$xr0b2?1E7z&d&=6{L;_7Po(6&ak{p_i)&XN0-} zxYhxI*^(Rim0SSdOLJs!`(oY6sJehz81H~0o9g!s4{P&Og)u(hi)H3gYbeW22pY7 z_Muq^sDHezc7zx;SWPk17Zv?_F)^D+n{gRab3{cknqz>vD+kdMV`vZ_2U#(uotYk7 zU68sfXI6|Hrc5zYVjxF$LCzeeE;>_U9LL$Gww@F=#ZV;N&MjjHfmQ)7@OaaB!8tzL_t(|ob8-jmV+P+hUuK{#QiUcz08AW7!0=nxvBY{S{vaP zOMqY6Pmm(Un7=)aL#%4c{FH}4OVOg(?lDHzOT!2#4}Qxa$u`P0rFu^d=SS%UGA0km z&q{C8Db?CRv6PqkCj%6F=>fv6e`-1j*X96C(~8MkEiX2;V1F3^iYiOyP5_|%{~jRI z`k?yG)mFdDQ&n_M?8mUS1Lz0e)(3pmr`N4)kb{ZA)U^{s3uxp^3MxCu9kJQ&CxbB{ z$linWy&fi_*$GU378sw?k!lPp@f!n z!9Y(}7vMN=j65LX_Q+?rsmrHcu)n%Es{!*Fn>-%!6qv5VuzIVYANYJc?0ZQ za!g7r(zmyUVN{mf@Cb>L9T-y(iDzqPg2<$VaUn+KWC=K8NH~h+zs>@#fxQ#(5?jW2b@aC~=&pLutn4yv>+fMra!Pcw=rEf*Y`AiapGj z(`0!M8h?m;@r%Jz*#u!@zT7GtF8IxG%#FG-e#$5j$#s3uVWcTN9(q ztRser7ck~PJc*bE6js93PB6=3W`~BXh*>u6us?(C?OaaB!8tzL_t(|ob8-jmV+P+hUuK{#QiUcz08AW7!0=nxvBY{S{vaP zOMqY6Pmm(Un7=)aL#%4c{FH}4OVOg(?lDHzOT!2#4}Qxa$u`P0rFu^d=SS%UGA0km z&q{C8Db?CRv6PqkCj%6F=>fv6e`-1j*X96C(~8MkEiX2;V1F3^iYiOyP5_|%{~jRI z`k?yG)mFdDQ&n_M?8mUS1Lz0e)(3pmr`N4)kb{ZA)U^{s3uxp^3MxCu9kJQ&CxbB{ z$linWy&fi_*$GU378sw?k!lPp@f!n z!9Y(}7vMN=j65LX_Q+?rsmrHcu)n%Es{!*Fn>-%!6qv5VuzIVYANYJc?0ZQ za!g7r(zmyUVN{mf@Cb>L9T-y(iDzqPg2<$VaUn+KWC=K8NH~h+zs>@#fxQ#(5?jW2b@aC~=&pLutn4yv>+fMra!Pcw=rEf*Y`AiapGj z(`0!M8h?m;@r%Jz*#u!@zT7GtF8IxG%#FG-e#$5j$#s3uVWcTN9(q ztRser7ck~PJc*bE6js93PB6=3W`~BXh*>u6us?(C?^;gB!8<(L_t(|ob8-ja>F1DMV(G|;{7j)z4XIVs)&bqNV;-H=c};^ zTx28Q+Ue`CBBew>p66-Sv}bhXw+!6Ie&s>0ajI6vvvYt_5Y6m zo9MIVJH4&m%TrBszSu9L8V5EG-mMdQ&F8;c*?=-qW~8m1GP1BBf25#tfIJbOalg2k z0}k73knii;L^QjAq2FTjb3Rfnql*0$8w5cR1ObZv>Vhsm%97Q^$?~RbN&r2$uc1%H zj1vUD>RJ$Bynk5aX50=fZ;PIyee3tLf41e&Z3of zN7y{K8q^>{q@Z94_=+nCf=9DplcDT6)n}HlNf@<~^MAI26y66MYBpKxAiQ07XxL=4 zZE3eFi2Mksf?75DU#;5B0Vtmi?hp2foiG@c6r^X9G0g0_Cn4V9+m*XgyEYh2!fVi% zID=7Q!4m|5B{pxX9iQ{9r7M>|W;!xv0ZhV9Ce?8nstF zAT{3Q%YVoFKX$zB!{8X#mZ67w3fg~LO{6NRMXLDL#KH@5Vuy*y5bsEsabR{+kP|yh zRfhMUPdl;0oXD6ZQqULS4Ug9;*Iw$?|bmPNv%h~wXRyG2pHU#)5VpBcQ z*wA4GC|&>qQ_P7g=Lq<#YT5$WBY}OaQ_!aL{Y5M+Xby@1dmytG2$BBp2oNWB!eE3) y0Nk6?7ErCw7jRPyE?|mCLEj7f280U;9>6cx6a!}!6t(350000^;gB!8<(L_t(|ob8-ja>F1DMV(G|;{7j)z4XIVs)&bqNV;-H=c};^ zTx28Q+Ue`CBBew>p66-Sv}bhXw+!6Ie&s>0ajI6vvvYt_5Y6m zo9MIVJH4&m%TrBszSu9L8V5EG-mMdQ&F8;c*?=-qW~8m1GP1BBf25#tfIJbOalg2k z0}k73knii;L^QjAq2FTjb3Rfnql*0$8w5cR1ObZv>Vhsm%97Q^$?~RbN&r2$uc1%H zj1vUD>RJ$Bynk5aX50=fZ;PIyee3tLf41e&Z3of zN7y{K8q^>{q@Z94_=+nCf=9DplcDT6)n}HlNf@<~^MAI26y66MYBpKxAiQ07XxL=4 zZE3eFi2Mksf?75DU#;5B0Vtmi?hp2foiG@c6r^X9G0g0_Cn4V9+m*XgyEYh2!fVi% zID=7Q!4m|5B{pxX9iQ{9r7M>|W;!xv0ZhV9Ce?8nstF zAT{3Q%YVoFKX$zB!{8X#mZ67w3fg~LO{6NRMXLDL#KH@5Vuy*y5bsEsabR{+kP|yh zRfhMUPdl;0oXD6ZQqULS4Ug9;*Iw$?|bmPNv%h~wXRyG2pHU#)5VpBcQ z*wA4GC|&>qQ_P7g=Lq<#YT5$WBY}OaQ_!aL{Y5M+Xby@1dmytG2$BBp2oNWB!eE3) y0Nk6?7ErCw7jRPyE?|mCLEj7f280U;9>6cx6a!}!6t(350000g^IP8{BPEOBxW^c`c5Os~`sS-Hq&Y^VPFZf!A$^rE2FsKM z%3AqjuF{lFnw9M8M-9^K*9uS`{iIVOd=Cd1nqHZ5)XHY_2!GZENKK+~6)K0{rKh~HSLu?~#|*>cNEBWF56 z4^Pus6q^8E>3?28jod85J9V?`CoDBJT+j=yF(zU>A~qgV+N#DnmL|wa*uz$h#tRuu zay0m{Y8X!d*l2=Ce7m`!tt|iMj;gPQYczK=|7tXW33>)j9z7>&002Jxh_~20*@wze zxf{LV%QNrp86BG1ma>=&DTLk7UO(5Fi_?u5{kfD2DSzb80rg0E2#|R=Z)-649PN(N zjpsV_nq}n5t`%SJ12T)9tgU%ZN|~}~k~ZS^Am$`aw;TBhIOwoLvZhVuTi67pE;aYb zx|mL!Zm#;NZfKbDH%1(%(pZZtV2IOASd)Wn<`$mbe*l0YBPUEJ7drSoh&=>M!1Hio zVVqbYtbYJwFagG30v?7FAO@s(t(a@m6Vk3&U7AH!vqS^ZVB7W1Hutbm@lY0;;y03Jh=Iw5+Www75D zhH1&SL{I;H;0QPg8zZ&?_#`s%+_z997LpB9JT2|+jGfs}e9>0)U3QtEh<^z5!&wdw acou(u^iLm&WE+710000g^IP8{BPEOBxW^c`c5Os~`sS-Hq&Y^VPFZf!A$^rE2FsKM z%3AqjuF{lFnw9M8M-9^K*9uS`{iIVOd=Cd1nqHZ5)XHY_2!GZENKK+~6)K0{rKh~HSLu?~#|*>cNEBWF56 z4^Pus6q^8E>3?28jod85J9V?`CoDBJT+j=yF(zU>A~qgV+N#DnmL|wa*uz$h#tRuu zay0m{Y8X!d*l2=Ce7m`!tt|iMj;gPQYczK=|7tXW33>)j9z7>&002Jxh_~20*@wze zxf{LV%QNrp86BG1ma>=&DTLk7UO(5Fi_?u5{kfD2DSzb80rg0E2#|R=Z)-649PN(N zjpsV_nq}n5t`%SJ12T)9tgU%ZN|~}~k~ZS^Am$`aw;TBhIOwoLvZhVuTi67pE;aYb zx|mL!Zm#;NZfKbDH%1(%(pZZtV2IOASd)Wn<`$mbe*l0YBPUEJ7drSoh&=>M!1Hio zVVqbYtbYJwFagG30v?7FAO@s(t(a@m6Vk3&U7AH!vqS^ZVB7W1Hutbm@lY0;;y03Jh=Iw5+Www75D zhH1&SL{I;H;0QPg8zZ&?_#`s%+_z997LpB9JT2|+jGfs}e9>0)U3QtEh<^z5!&wdw acou(u^iLm&WE+710000Q}p}P;kgtK8f{X8 z^se|b-cs}qij{2YUo}9nuMuDz{ijY3*E<{_G?+~qwY1n6!GGKU6qT2(od7`j|0BRA z`oKNW+Tyd^<$}18wo#1(7zaPt1wHri7|RAJEjBH_I5x6?Aiq*jK0tP4&A2~Q=77t# z58`uOO+>v5nDj0%KgTmg8&&M5SjTZ3$8l5{-Y5|UMH^X1A%W>=GP2br_NYp6ncD$S zjN^c*X5eJ1;eP<*O&!eyQ_zUVs;bpg(}I*E`u28593)3Tk%7dGX`Hf-hLLqtcp)QB zlzdlnG^`B>w#cFb90G0%0wQ*Cy6e@^iZ7(Z9nlpqa3qG!yQCu>U7muDV$*fV3XUAd z;nS$H@wb#_D%(*hs7nvn!jTBVV%%XW8{bhCEiI^6QGaYxll}xBA6`g+7IDN!U5rZ^ z`@X8zp8rXmC3|edmX-7P?9l-SW0!)=R5onF+)rgQ<4BdQ5l=x*f~#zf<1i_XZY8;G zBS%IUS6As<9ZN^@VqEo^ipL)!w;4e!vC}iyF;)oHomIJC%2DyE;5aiC<1hx=WBK)5 zua_=lHh*GI!{Spp7SJ{2Hr41~QX_zn-M7Y|Efy(gYq_mh$ZhgR?UI})w@H=nV%&$} za+~8gOHs`gn7$M*0Rv)}J8(dF7h(P+OfTlDt3B-<+{XI=5jkw9wf1TV%3(wbDjJAq zA*^D2tWyy2iesRtI6kT}I0x0jC(Hr%U!Sea{76Z7nEU0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L400000000000000GrafSd+k=txobDzH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|D zrlT*m5)eZigKjgVo>74`SYX#hrE9#IzY@`D{rjEKAO6`Jghqx8uhvwT`%TFKC%buIrt__>Wv@K905|BC6`I>HPc(qGNvOXRXe1o zvj(&(Eif{z2Y=rz!s(l3c}jMeV3sm*q_B4#{bNV~V8wNFy5efV6r}9YuX2s*wNKcn zmD|L@^KG?$+>*||c@4D@;9lfC3gu>biKhO%gl{4q=i||Ms)A?sS?we#tCjqhVk97azfh*!)V$JmB$L~L72m$~A00000 c004A60Tiq>(_r(*v;Y7A07*qoM6N<$g3^7^Q~&?~ diff --git a/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00015.png b/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00015.png index 137ca9e4946dcd461fab8ca146124917077d946d..471324463647c42b2de74c282e34caf0e801955d 100644 GIT binary patch delta 433 zcmV;i0Z#tz0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf*2U0Q delta 339 zcmX@j{ElgYO1-J4i(^Q|oVPb4`3@QIxCS=g@ch1C<$Wu^cjn0po=zWEzx&A~xa5j{ zaI`T41gzMxd-wg{rfa{y;fuMpc2m;J<{*aCn~t=vy7M$UQ^7@(;dQD)Y^`zi*>?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E)>ESNq3 diff --git a/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00016.png b/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..137ca9e4946dcd461fab8ca146124917077d946d GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#B;O$e9@oI; z8=l|ytGsXJ_s%?d!PDvE>UTex1eaXV4~{klY65{3J9h8B|J!u!_cweo*Vb-Idf6Pr zaC*~`_EmSDW@jq6XfnJ`Rfw%Mu0H$jfb82Q<*3@pvl$m^ZO{AaYto=Tktbmbr}ic8 zgx#@%_&)K@;U~L{E3ACNW|0C&t;uc GLK6TUIGRfU literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_reject_transaction/00009.png b/tests/integration/nano/snapshots/nanox/test_reject_transaction/00009.png index 431986c71c6e730392aef05dda8241072bc257cd..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 517 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 acou(u^iLm&WE+710000Q}p}P;kgtK8f{X8 z^se|b-cs}qij{2YUo}9nuMuDz{ijY3*E<{_G?+~qwY1n6!GGKU6qT2(od7`j|0BRA z`oKNW+Tyd^<$}18wo#1(7zaPt1wHri7|RAJEjBH_I5x6?Aiq*jK0tP4&A2~Q=77t# z58`uOO+>v5nDj0%KgTmg8&&M5SjTZ3$8l5{-Y5|UMH^X1A%W>=GP2br_NYp6ncD$S zjN^c*X5eJ1;eP<*O&!eyQ_zUVs;bpg(}I*E`u28593)3Tk%7dGX`Hf-hLLqtcp)QB zlzdlnG^`B>w#cFb90G0%0wQ*Cy6e@^iZ7(Z9nlpqa3qG!yQCu>U7muDV$*fV3XUAd z;nS$H@wb#_D%(*hs7nvn!jTBVV%%XW8{bhCEiI^6QGaYxll}xBA6`g+7IDN!U5rZ^ z`@X8zp8rXmC3|edmX-7P?9l-SW0!)=R5onF+)rgQ<4BdQ5l=x*f~#zf<1i_XZY8;G zBS%IUS6As<9ZN^@VqEo^ipL)!w;4e!vC}iyF;)oHomIJC%2DyE;5aiC<1hx=WBK)5 zua_=lHh*GI!{Spp7SJ{2Hr41~QX_zn-M7Y|Efy(gYq_mh$ZhgR?UI})w@H=nV%&$} za+~8gOHs`gn7$M*0Rv)}J8(dF7h(P+OfTlDt3B-<+{XI=5jkw9wf1TV%3(wbDjJAq zA*^D2tWyy2iesRtI6kT}I0x0jC(Hr%U!Sea{76Z7nEU0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L400000000000000GrafSd+k=txobDzH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|D zrlT*m5)eZigKjgVo>74`SYX#hrE9#IzY@`D{rjEKAO6`Jghqx8uhvwT`%TFKC%buIrt__>Wv@K905|BC6`I>HPc(qGNvOXRXe1o zvj(&(Eif{z2Y=rz!s(l3c}jMeV3sm*q_B4#{bNV~V8wNFy5efV6r}9YuX2s*wNKcn zmD|L@^KG?$+>*||c@4D@;9lfC3gu>biKhO%gl{4q=i||Ms)A?sS?we#tCjqhVk97azfh*!)V$JmB$L~L72m$~A00000 c004A60Tiq>(_r(*v;Y7A07*qoM6N<$g3^7^Q~&?~ diff --git a/tests/integration/nano/snapshots/nanox/test_reject_transaction/00015.png b/tests/integration/nano/snapshots/nanox/test_reject_transaction/00015.png index 137ca9e4946dcd461fab8ca146124917077d946d..471324463647c42b2de74c282e34caf0e801955d 100644 GIT binary patch delta 433 zcmV;i0Z#tz0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf*2U0Q delta 339 zcmX@j{ElgYO1-J4i(^Q|oVPb4`3@QIxCS=g@ch1C<$Wu^cjn0po=zWEzx&A~xa5j{ zaI`T41gzMxd-wg{rfa{y;fuMpc2m;J<{*aCn~t=vy7M$UQ^7@(;dQD)Y^`zi*>?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E)>ESNq3 diff --git a/tests/integration/nano/snapshots/nanox/test_reject_transaction/00016.png b/tests/integration/nano/snapshots/nanox/test_reject_transaction/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..137ca9e4946dcd461fab8ca146124917077d946d GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#B;O$e9@oI; z8=l|ytGsXJ_s%?d!PDvE>UTex1eaXV4~{klY65{3J9h8B|J!u!_cweo*Vb-Idf6Pr zaC*~`_EmSDW@jq6XfnJ`Rfw%Mu0H$jfb82Q<*3@pvl$m^ZO{AaYto=Tktbmbr}ic8 zgx#@%_&)K@;U~L{E3ACNW|0C&t;uc GLK6TUIGRfU literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_transaction/00009.png b/tests/integration/nano/snapshots/nanox/test_sign_transaction/00009.png index c3d91803266513c0381429a103e59db091faba59..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 100644 GIT binary patch delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr diff --git a/tests/integration/nano/snapshots/nanox/test_sign_transaction/00010.png b/tests/integration/nano/snapshots/nanox/test_sign_transaction/00010.png index 471324463647c42b2de74c282e34caf0e801955d..c3d91803266513c0381429a103e59db091faba59 100644 GIT binary patch delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB delta 433 zcmV;i0Z#t&0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- diff --git a/tests/integration/nano/snapshots/nanox/test_sign_transaction/00011.png b/tests/integration/nano/snapshots/nanox/test_sign_transaction/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_another_seed/00010.png b/tests/integration/nano/snapshots/nanox/test_sign_with_another_seed/00010.png index 471324463647c42b2de74c282e34caf0e801955d..c3d91803266513c0381429a103e59db091faba59 100644 GIT binary patch delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB delta 433 zcmV;i0Z#t&0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_another_seed/00011.png b/tests/integration/nano/snapshots/nanox/test_sign_with_another_seed/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt83B7%7z!WUV)^{^@uv@6 z4}8p)Qe7G{|J-MrH80D*-Hqd#X?4A|(qFT*c8juXhW@=<3np5w`W<{}w1#ePdpxC;IJqQL5>()gPmE7(T?u{;Phzxc6t}h1;j@ t2e=tAh#N!Eo&)I`3=FCa$lya{9Yev{Q*-$}9x;N%Jzf1=);T3K0RTUqjv)X5 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_long_hash/00010.png b/tests/integration/nano/snapshots/nanox/test_sign_with_long_hash/00010.png index 471324463647c42b2de74c282e34caf0e801955d..e9cbcd7e7348486b01339d3c8cbb5a9ecbdcef37 100644 GIT binary patch delta 300 zcmX@je4J^5N83B7%7z!WUV)^{^@uv@6 z4}8p)Qe7G{|J-MrH80D*-Hqd#X?4A|(qFT*c8juXhW@=<3np5w`W<{}w1#ePdpxC;IJqQL5>()gPmE7(T?u{;Phzxc6t}h1;j@ t2e=tAh#N!Eo&)I`3=FCa$lya{9Yev{Q*-$}9x;N%Jzf1=);T3K0RVF^j!ggn delta 433 zcmV;i0Z#tM0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjfl+MsF diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_long_hash/00011.png b/tests/integration/nano/snapshots/nanox/test_sign_with_long_hash/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_small_packet/00010.png b/tests/integration/nano/snapshots/nanox/test_sign_with_small_packet/00010.png index 471324463647c42b2de74c282e34caf0e801955d..c3d91803266513c0381429a103e59db091faba59 100644 GIT binary patch delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB delta 433 zcmV;i0Z#t&0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_small_packet/00011.png b/tests/integration/nano/snapshots/nanox/test_sign_with_small_packet/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 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 literal 8687 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 diff --git a/tests/integration/stax/snapshots/test_blindsign_valid/tst_review_004.png b/tests/integration/stax/snapshots/test_blindsign_valid/tst_review_004.png new file mode 100644 index 0000000000000000000000000000000000000000..afb0c5601ccb8216a0f02bec3ac2f7582aa90f38 GIT binary patch literal 7168 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 literal 8687 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 diff --git a/tests/integration/stax/snapshots/test_parsing_errors/tpe_review_0_04_full.png b/tests/integration/stax/snapshots/test_parsing_errors/tpe_review_0_04_full.png new file mode 100644 index 0000000000000000000000000000000000000000..afb0c5601ccb8216a0f02bec3ac2f7582aa90f38 GIT binary patch literal 7168 zcmeHMd00~GzHYE>qtt0|m!|FQPAg5@WzI^&Hq#ukLNP_D9JUo`0uG2!*>KX#U8I&~ zG^i9RSf;2bSZ*^SHzx=wkwBK{to4oW_x|4B z`&~O69<*ZVhNbi7&07(C@RuX==FR_Y-n<157B2wa_(ZhV&YNe`6a35GW7+p6#G;%p zAvO;pXZ#2Y`hR$`|M1mLtG!n9_nlw4$zt)#OYnU=et-h^x7H`*Gw!yD7hY=R@p6jI zvW*Qnu)i%bO&JUW?qTzl6Gl>yVqPco;-X7GK=*wASMeX10yAS`+@qp*st5uRU|^-A z2>K!e0%==k#7i(@wwnOsPvWLATGP(3BxOl45W(Xt3)2=)tEh|}_s83iEQvxh*M0I? zoU7tlcUlrlLW`=UP)t|yFVoOv@GwVW8+DG3hS8xe{mtUD9(KGB z;8|Qwgd=hICR~U~jWwy)qUAQZJP2aQO6c;(_%}G@&i)Yi4(dzWNDe+e8FRXp9Vf8)u$Ob;%rf zfZkRXl-NauUK6f=sBm?tGkyH2a=PkFXj07VRX<&b;n{HC?WCNHahX%}Ez{gkRp0Gf zL~=3&QoYciT)?k(_Re~v6t*2|$YhA8;6o!@kG#))=E68x=o!O4|Ke3MLbZD)->vA= zm$0Y>ghqyibAmaXx9MxPE!r?1-?qj-<9O$a=$*W8dg!ZZIO`bF2Jt}6TxCC^E!O?krY5>V?UEwfdZD6DjL-5&$?R_Y3Ba_L` zUFNLoU(+nSX5Xxe!ZH#}%Dc@70BL~{{S|eIhUQXE5>^`aISM;po!xfez9(rN6S=wb zf<3Uf#d+_ybNNW;M*+Dydm-9CbtCntB{&K;ql`j8sah;~! zl^_ExssRIw1zbe-NC68!U{>w2H$A&%kT!;g5U$C28|T@5)9G|92CzG%Z9DFU#>dCM zri~ko9R!UI7tn6Nc9@hOD{6A`@{9vNEJ%>XlP@7eCW8+342p(jWn2&=H42vbkL1Ri z&I3rgWtRDy>$>hthH*wNJo!v(pqzJ0FFOk0fMC=MB7lBiU}Z_4nkRt$m(YLK119tb zg9$Bv^d|GoX?o`>2lLXQDG6jk<7ynzj%Ii#LpmMA!?zpEWqW~{6^TSI7szMY2$YsM z*Q?Rm+1bo?X;;c+n#Oej7H<5Qx?q66A?>N8e^FKV)tGShclJnaX*|)qtRMp zQm^mY1fuaIHQ<&hpH%y40(ii3a0p;GsyrizLfPOYtfg!#KBw3CY$afPD#HO%phd*9 zDRQ5l7v{hHr1TeiL5-6*tq+Xv-fC?r{4l2%w)0@q)wK~;&kH`Q|9-)HWvA!4;ljzB zH$=zSycPq{{?+O?PG^#0YM7ypME6Y_-q_Jm`j zg%ZST zlOnJV{25@kYJD@Ja>>3;o&lTRMVB97X4A#U=vu+)CZB+M#@CLWz*5RC=JiF0w8e$< z>?U73)YYW&lBU(jilH+@fsyZ$8{L0AQ$7YCy4U{PgLo%DBBIBHfOVFc^unualw6X^GX` zjj;MCqxA|=a~}53>n+`u73Pyb^jZ9g-CIqF(+{mM7R_dTr){3x36hVFZuYE|w{@SK zQc1Z4lTJzk9#g|Tz&gw=d@_U0+p+b9IrAP!Li}jXU1!}vYcRh*ju7EZ`S#}-42k_i zt+F6Drqs!76-YR?J9)oTnOV6yh}a$qft1;8Qg%;jvz7?uGa^we-@OM_$s4$+(P)SZ zpZJ;dO56@v*%a@>k;&ttX48g6I28Cki4>GMv`e4%_h3TNm(Q^lCclKKtH%l@1n|t6 z=0%35hNswnnRot=wDs5Tf6e^A9`yb~&tK^IccJIH*&l0Z+5%{Fc^k<3OnHq9$L%AD z)rV(E&Uyq!)(Pc7ie>blp!63Kg{aw>{_MF+MUC#F(YryS;5@IRjLSXqz)qmkbWyd$ zcFxG8$}J~0(4C<4V?vDiE*~StvuKp@L7DsAP$o`TV8pYI*Hb9RUCRB2|f&1{hWiVkA!Z)4Shk-G_m8^4h zwGFuL9UWGPfkgu;T=b_S55Vnn$|&BaIQI! zz$QM`Ez~+ty0#8W!z-oKsl$L1~Cl zq`G??+lm;Re7e9gi^P?twiA7FyQ8c&+%{Fv{9zMUYQros_c-W)j~Fq4gLl-7&<4A$ zl|lCmJhqfOwPPEJP}E+7ckzE3em}H&Z;!Iva*`S6DwJdNyy{qQoqj(vKA-{Ig=F+! z$Pe-Kac=h}Un-_c6nwAEzO5fyRnI9DUT`ml==5E@%OOuIFp(b(z85pguE#~BlK9tj zY_~waCu!jgb~5eeSMC-q*cNmXs;ri;tOq~+(izBQ*V3me^NgPIG)E|?Q8dBx4m8H% z-=Ee#fA9YSkvlzt&K`@LV(iv@ew*cSH`H$WKrM?1_Yb8AUjFo8zV!7bnWsUJrU`cT z^A0`eX_fU;P-gb)J}3Hgm~EA}0`>Pw^RAY!CU_55b-}r*hktpx5FH(HG_>0H?yVQC zL%Tr(dC#DLI>blNKEI8AEBs(JjW*npbnYD;+C|?C1rd83jW$^f@ty`NW_dDv?eOQv zDCBkGm`}};-;AOl=Bk~n(42IQUxlB)8QfZO2sBRQo#q>!qd9DLwXv0E6p5OFiBI+D zLu4%{Ujpr_3{PqNglCa@lXY}#xeztI{?3)i)cc9p1EZd_qMT-OE(WGitB;i?ncs47 z0TC(|XtwHm&3hPUbb4@7R)4YEOnMlB9OdQfuh*mkh!SENKe?|qed7#NW06sNgyo>S!j$;GRZ8}Ife2S&PwsQ?Z!x=uF%UIfc*ie1x< z_JPra#h)u#H{q3nX2jdK!5A1A3{EJk2Z+XWP9YKeN%yg90wIv3n9u1$U{UMUAI%Fm zlD*7+l}bgpH?7y}haPM6daStos0^Un-YiC10Euh_>@Ye^%gvm8n4OzDSDt1o{r*H= z9feX>R;E^&MOp(FuvM;2;Ef63T4KN+DE1|iq3aP)yjr~<5%3}cUPW1K4}GXsc*_WjPyrn^0e zL7S|Ge#5pf^8;6`g%>+eQ{04@8}2D4CXAa4{y?Gho_`V*1||edGkBjsJ2&=pk0p7n z@kDo!CAwODx@)SaCt7lKcNiahwLF}>P$dS~j-VqJbMF*=mYwsZ_p=j^Kp@yvaJp!t zAJW=?fqF?_$$#k}qr66!qLImDK)zpra@%@?m4>xiLyoVqX(>moUT9syV=S1R%fmjM zRINTq=F3huZ7X<$5Rt%yC`d^^T6xSK5K{igg|&!sNBdU-x%51|=oXv6grpaCKT0j1!B$%S;y}lfdl2tV zFOpxeke`xm9#<<29-W`gW-2K$v%nsnG<@kw;at`9=GQeN-2AN>S3jLC#YUDU@!edG38pPq)^VzimZ*2NL0$A^hxpw! zkGAl1oWRG6cCI|&^EW+=qa2x;-{9%uV{`Rzs znEe6qV<&ZOisVLF@vN#iw=LtnMlPfQmSy+JbI8hJMFn?1s5Epx%kPVJXHI;!IaR0Q z!ed<40h=F8Fn#0tDoFWcQBRsNyjavK7&~Mc7-`Eo@^U8hj8_WWF3JQePqFz)7ukz? z3b=*()pfj+PEJ2xZ&wh8$5wAV`(#T2;2auC#i(VZii~s0!|IgenVt3nzM<(@eM$lahb|AX8;4SLnuxrl2QK-o{^K3r~q=Lzh)JhP4GDPLJc zdRX`$X#4nVFQ^mw3b}Z>Z#K>q+s0(EK=*J|&s6v!>E$w4Xf!G$yU298#I(E| zU8&Uyx^y^`Uhm__Pch`l+kn03ue;xpU%b$TGY$X!XJvsPa9N7%@wXdU3ZgZV_lGTb zLm0okqhqwP{a1Mwc7S&}f?3u8&bwWq1x}`LlcPBSrv{6(_V_PfwVqSOhV1jW`jmI- zH-+m0J`!_r%Fa7M!@PRQ@HrdSaq1Z4Rqp!iF`PE1WSFFKNVw7dRfiH2C-5kj*M1wK z+g*HK|2m4E%okCyQ?`dEjhd^Wnbs*8@L#EvN=+28$SesNMI|L*$RiPgA|fid-)8pO`|DcQwfEXz20q+eFYoj4ywBmj z|Gz&!o`iWDZ8F_tU|?Y6^WC?n4Gh-&WMHuN?;F zqb1i)!Sf5Q!8TI123el8d}aCD*00uWe0I~o^5NE#8-sy&yT$NZ>QHEOSLBBjjyC8P zrh7QX$5xrI#tEJM*C>0IN!}=fuC{fXHy*9OcIeOWZTH~e?v~Usz(YY63@Vg&NnR1SEb*QqD%VfX*76^?v_JRQRHF&Bw@o6m+V>5LWtxmm^8im&_ZaVE^Ut$xS%j&p39U#$i@cb+yG;*yca5lU zSh+Qmn5BM1lTE6yX9{z=&$oqcG46jI?N|omF?rpm$|t1K>ixIrG@jNs{M8kgbM{3C zKI2Kzj>Vo(=+0ve2-__V-;hY8nX)``;|!!k_9 zo?G9y3#u+KbVGT||rF$lX(W8I~uxX8R``N{*pGCF`B=|eozPmep-AVRkPS#erH*_oPJPTTP z?bokB+VJNGL$A(PIo(h4lA>2^KdR0pu5ZqKWZ)`!fqNqhF~{+fDs6JRd2y>^nFJ-oyAUfQgz>FVg5E4*tuj~Wg$M`$ zR+CI{^;az|(FOAGhzK5*r&1;9KlEdhqyrr&6bcxT3vnVgV^t4nT=$ztyL_*t-ZncV zt*)+)1y}gjBW#aP3gyXKsz2{t0`dC(c(a-`0+1#uzcf??$l(XX3nhNm-c#l~ zL!dqR0Nastt1Wju;n8kV)C3{lunoNQSVFyRrJ59(r*HpaQ8eQ?ke+sJ+TZK+OOqWy ze*B_lwj{0UFgD!cXQ0)&4VP01aj96hL5;3I(rC)O?HxM;488{f8g8!%tQ-np&|N$F zGvY*&gFlKwHhyYBwPnA%J3lciA zLXqKIh;~Kniv2ADdAJzpFKB7+;p8;0R3jozp%sq`Lponoqta2zmhxu z+%JFbm;bl@G7IomS1TYhmpWGy8mnS^8&@*r+RM$z_OrFOEB;`D1m8@IFH(>krjbNn zIOF24S}$lKBL$7NRLas4T+Hn+8;x(3x_S#*Fk#S3yr+<7^v85swl_?yK?;HaZSCf7 zUEm;oQt>~Ou+%JmU0qfJBTEf^YdcMV1`Jgd=OV8Kd1@O^I)CKce31=1(S-=X9R#{t zvYJm9V}!5NX8~$x2`PE{R5>pxy*%W6My!Fu!%~Xu)-SO}dieKflLJLdodK(mr8jpz z4klO@*)JrBW_t>pG-ceaHJ;*Wb@W6PFsnw=FQMvFGB95y=_(oO?7hRB&@F?RKpx76CQ2dgAeY0|R;FR<5- zox0L0@SMo@!1OMjcX*I&BV4qY3BoDq7aX6P471Q-MT!I?6blN4k|Rd(DV+m8&#t(z zr>vxx6!e*d_m9xMg^B=+^1HyGws9o2G7i(a;Pv8R7+CR^2pNiNK0BehpEG>V{yJZ# z7Oia+AnB(TB`|ZfL-!eVf5$(;>QOy7i)%whF9cm@jKnmZ0gHXg80YQqMkiJ|nsQn)tGlWU{N@53 z^l>?(U6^q((0vag|31wsFGD&#o0Mw$ppMzsLC)B39^~y%HQ>{;c+dM{gzXMsuBE<3 zw25h%u{J~dYT-`1{JeLv4P=_4oDBWKD;ywO&%GYtk!o2Zg)(rAgSoNqc(|>vah}C% zDb*s+c6t1)-Y=HOyQS@SIQFg@S{ex%koew|Zu{*6?=iKE9##euXWg(_2u1saGYX+2 zd_t4{Vy60#K<*M2IJnyDa5h)$LeHkj^1@5=@;z&g&HN4-V^%l-uyRSBrX84*$@WKF5-YVP{8I%d^4;(9t4ou?4IEsro}s^ zCA16k)?HRmW7h>=72(mavaz2V@?s6fm9tLbjl~gF?}(6m>wuosef&fzEdBJ^E2a^J zAb0RnwA%t^F_n)2I5+ntU7jVmr;MuNNda*zXyJ0X+E$z?KWToWANf>lX*9TEj>zwG zALWJq1CBaWjzrGDqJm*}pl^Aa)_uOg6_2Av&aOJmzitkt2a@`oIdRP&mh}K58RGzn zi?91>ybQczz2n#^zWS(F;TS$COMOWC<@$ly!s9OJFxO(g;~BlYLmKCAy@mjNt%BNL zY(R|Ph)b<1e3?|`^!JXvv7Y1ZJ*$$BQX7oh{#DiGHZ#D#5WnKratyK6JzfpAJi=W z@B(_<_j!-U%1!1~t5^?0Zb+KcEGGUfWQ!DU+hogD6;J{ry8Zz)!G=4-h+QcYpkM>( zjZ2^WjnuyXJ1c7p3LJeGqBm+oSC2k$+cBPVzR2)ee%qdP&$rrsW%z9Eza!N2Ow(yd zfj4UXPT8`^b>_NWHEpz*q)um!T-jpbz;2|;0PiGxF0L7ukzs$kBDO@0OV?S?H3O<& zA!Y)Q10w?mH(ylByc=0IhzaZMJ%tIYmO274vawEnh}(yVxp7U;GHrp{%gAU59>UH&k^=TQdcF9#}fzyk2lu{Uo}*X)lPJu&z!UoH8@p8ktp`OV_2_BqO-9BLMz^$tL)$fte3Z+PsAY{cZ0_-y zVP}rSzO-q9=!votKLzZt#npnJmM-c-M8_FmM+B>f|VDuESjSGS@cQvDhrVoSU}6Z4Y8! z?m8KOv(v_BXo%mz3m8MH!Fa?YZ^8_>R6}}pHxxdEV~FI*Io*E^DDHfuP$&Rk)~2NL zoPkKr$j%SwNHKKvcOr5Uk7hggcK|OYlgVIA{BZw5F~7036y53KiO%L82gy&t;kc~q zecsq!6+fe3N(!Fz*0-fLAqm@KBulznV5m8 zP*xU|txNvldp(CZ9k-fBY|Y;Sm8T7{WhucO*bv@Dgr{Ev{vpZ=s6hHhjPr65R&>1c zDn5r(H(;3Zp(5s5vH1U$8%z zMc!^9|MkHD)hOE-Bucm7J9Ct#ae$$6Ck4kK{;*(;(TUTu)MENn&I!pkH`1<-+32wLb2(Rz=aW{ z(XMF#49&LC9mo1HLM{nPrJO*HdJJ+Smdnap?{>TR7ol^Y{ z?|u3=k|jxpmb}WvTCPZ?(rNrdAW6~zg>zz=n3WG?5^b8unZsuLdRc;#KU5*B|IJ1D6}{sTmnC#(s8VY{}B^ zUe7o-*c7O^z{(&6E+GfX{2uRw|1rX(9m`WIaoP>*WRB9)dv$mErc@I70J;fqZPB{K z{_|XttA!;}Fyr5Lws!7#_>%?hD{~VpX4NSxrP_t)Pmk^!v-`)hP9ndo**!PwxRb3( z51|ezuRvFyl09}F1>7d!xk|WGxNe<(pq*Zxw$N1*Tb1_HBusHh ztgBP3%gXsh?PVrUl^oZg9X@huTXtPg0)%A>Gcn12Kq#8*-{6xGtU^%ue7?kh>O9ha z#4x6BnTs9!aUnQpTlW>0-30bb^^XBYZEx{5SyoM1Q>NK}*}SEwU|(PU_}1~O2-YKs z)+15>=}ZaZ%!b{$2Hu|!`&d0Q%?mLDePLyxJjus^Na=B1^X@8rlIRC{v|HCeFJJARg|58lSBYN`CVT!ej)zPc=676r&#-Ij z`OLUfbtRO(fcHdAITTW{50v4@^Gc1Ob#p7<>)#YvIe;^09&cw{U%oGm8M|F{fm{4> zfc!pS*QGf|+n$v;*7dw_XlBmF;gH>1xZ2(|fl4FbGnHZ^ysM6CPdK2d?<|2m8!C@mF!Ia;;IAzMpJT9ZY2QR<{wKN=&pQAB literal 8687 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 diff --git a/tests/integration/stax/snapshots/test_sign_transfer/tst_review_004.png b/tests/integration/stax/snapshots/test_sign_transfer/tst_review_004.png new file mode 100644 index 0000000000000000000000000000000000000000..afb0c5601ccb8216a0f02bec3ac2f7582aa90f38 GIT binary patch literal 7168 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 literal 8687 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 diff --git a/tests/integration/stax/snapshots/test_sign_transfer_without_hash/review_3.png b/tests/integration/stax/snapshots/test_sign_transfer_without_hash/review_3.png new file mode 100644 index 0000000000000000000000000000000000000000..afb0c5601ccb8216a0f02bec3ac2f7582aa90f38 GIT binary patch literal 7168 zcmeHMd00~GzHYE>qtt0|m!|FQPAg5@WzI^&Hq#ukLNP_D9JUo`0uG2!*>KX#U8I&~ zG^i9RSf;2bSZ*^SHzx=wkwBK{to4oW_x|4B z`&~O69<*ZVhNbi7&07(C@RuX==FR_Y-n<157B2wa_(ZhV&YNe`6a35GW7+p6#G;%p zAvO;pXZ#2Y`hR$`|M1mLtG!n9_nlw4$zt)#OYnU=et-h^x7H`*Gw!yD7hY=R@p6jI zvW*Qnu)i%bO&JUW?qTzl6Gl>yVqPco;-X7GK=*wASMeX10yAS`+@qp*st5uRU|^-A z2>K!e0%==k#7i(@wwnOsPvWLATGP(3BxOl45W(Xt3)2=)tEh|}_s83iEQvxh*M0I? zoU7tlcUlrlLW`=UP)t|yFVoOv@GwVW8+DG3hS8xe{mtUD9(KGB z;8|Qwgd=hICR~U~jWwy)qUAQZJP2aQO6c;(_%}G@&i)Yi4(dzWNDe+e8FRXp9Vf8)u$Ob;%rf zfZkRXl-NauUK6f=sBm?tGkyH2a=PkFXj07VRX<&b;n{HC?WCNHahX%}Ez{gkRp0Gf zL~=3&QoYciT)?k(_Re~v6t*2|$YhA8;6o!@kG#))=E68x=o!O4|Ke3MLbZD)->vA= zm$0Y>ghqyibAmaXx9MxPE!r?1-?qj-<9O$a=$*W8dg!ZZIO`bF2Jt}6TxCC^E!O?krY5>V?UEwfdZD6DjL-5&$?R_Y3Ba_L` zUFNLoU(+nSX5Xxe!ZH#}%Dc@70BL~{{S|eIhUQXE5>^`aISM;po!xfez9(rN6S=wb zf<3Uf#d+_ybNNW;M*+Dydm-9CbtCntB{&K;ql`j8sah;~! zl^_ExssRIw1zbe-NC68!U{>w2H$A&%kT!;g5U$C28|T@5)9G|92CzG%Z9DFU#>dCM zri~ko9R!UI7tn6Nc9@hOD{6A`@{9vNEJ%>XlP@7eCW8+342p(jWn2&=H42vbkL1Ri z&I3rgWtRDy>$>hthH*wNJo!v(pqzJ0FFOk0fMC=MB7lBiU}Z_4nkRt$m(YLK119tb zg9$Bv^d|GoX?o`>2lLXQDG6jk<7ynzj%Ii#LpmMA!?zpEWqW~{6^TSI7szMY2$YsM z*Q?Rm+1bo?X;;c+n#Oej7H<5Qx?q66A?>N8e^FKV)tGShclJnaX*|)qtRMp zQm^mY1fuaIHQ<&hpH%y40(ii3a0p;GsyrizLfPOYtfg!#KBw3CY$afPD#HO%phd*9 zDRQ5l7v{hHr1TeiL5-6*tq+Xv-fC?r{4l2%w)0@q)wK~;&kH`Q|9-)HWvA!4;ljzB zH$=zSycPq{{?+O?PG^#0YM7ypME6Y_-q_Jm`j zg%ZST zlOnJV{25@kYJD@Ja>>3;o&lTRMVB97X4A#U=vu+)CZB+M#@CLWz*5RC=JiF0w8e$< z>?U73)YYW&lBU(jilH+@fsyZ$8{L0AQ$7YCy4U{PgLo%DBBIBHfOVFc^unualw6X^GX` zjj;MCqxA|=a~}53>n+`u73Pyb^jZ9g-CIqF(+{mM7R_dTr){3x36hVFZuYE|w{@SK zQc1Z4lTJzk9#g|Tz&gw=d@_U0+p+b9IrAP!Li}jXU1!}vYcRh*ju7EZ`S#}-42k_i zt+F6Drqs!76-YR?J9)oTnOV6yh}a$qft1;8Qg%;jvz7?uGa^we-@OM_$s4$+(P)SZ zpZJ;dO56@v*%a@>k;&ttX48g6I28Cki4>GMv`e4%_h3TNm(Q^lCclKKtH%l@1n|t6 z=0%35hNswnnRot=wDs5Tf6e^A9`yb~&tK^IccJIH*&l0Z+5%{Fc^k<3OnHq9$L%AD z)rV(E&Uyq!)(Pc7ie>blp!63Kg{aw>{_MF+MUC#F(YryS;5@IRjLSXqz)qmkbWyd$ zcFxG8$}J~0(4C<4V?vDiE*~StvuKp@L7DsAP$o`TV8pYI*Hb9RUCRB2|f&1{hWiVkA!Z)4Shk-G_m8^4h zwGFuL9UWGPfkgu;T=b_S55Vnn$|&BaIQI! zz$QM`Ez~+ty0#8W!z-oKsl$L1~Cl zq`G??+lm;Re7e9gi^P?twiA7FyQ8c&+%{Fv{9zMUYQros_c-W)j~Fq4gLl-7&<4A$ zl|lCmJhqfOwPPEJP}E+7ckzE3em}H&Z;!Iva*`S6DwJdNyy{qQoqj(vKA-{Ig=F+! z$Pe-Kac=h}Un-_c6nwAEzO5fyRnI9DUT`ml==5E@%OOuIFp(b(z85pguE#~BlK9tj zY_~waCu!jgb~5eeSMC-q*cNmXs;ri;tOq~+(izBQ*V3me^NgPIG)E|?Q8dBx4m8H% z-=Ee#fA9YSkvlzt&K`@LV(iv@ew*cSH`H$WKrM?1_Yb8AUjFo8zV!7bnWsUJrU`cT z^A0`eX_fU;P-gb)J}3Hgm~EA}0`>Pw^RAY!CU_55b-}r*hktpx5FH(HG_>0H?yVQC zL%Tr(dC#DLI>blNKEI8AEBs(JjW*npbnYD;+C|?C1rd83jW$^f@ty`NW_dDv?eOQv zDCBkGm`}};-;AOl=Bk~n(42IQUxlB)8QfZO2sBRQo#q>!qd9DLwXv0E6p5OFiBI+D zLu4%{Ujpr_3{PqNglCa@lXY}#xeztI{?3)i)cc9p1EZd_qMT-OE(WGitB;i?ncs47 z0TC(|XtwHm&3hPUbb4@7R)4YEOnMlB9OdQfuh*mkh!SENKe?|qed7#NW06sNgyo>S!j$;GRZ8}Ife2S&PwsQ?Z!x=uF%UIfc*ie1x< z_JPra#h)u#H{q3nX2jdK!5A1A3{EJk2Z+XWP9YKeN%yg90wIv3n9u1$U{UMUAI%Fm zlD*7+l}bgpH?7y}haPM6daStos0^Un-YiC10Euh_>@Ye^%gvm8n4OzDSDt1o{r*H= z9feX>R;E^&MOp(FuvM;2;Ef63T4KN+DE1|iq3aP)yjr~<5%3}cUPW1K4}GXsc*_WjPyrn^0e zL7S|Ge#5pf^8;6`g%>+eQ{04@8}2D4CXAa4{y?Gho_`V*1||edGkBjsJ2&=pk0p7n z@kDo!CAwODx@)SaCt7lKcNiahwLF}>P$dS~j-VqJbMF*=mYwsZ_p=j^Kp@yvaJp!t zAJW=?fqF?_$$#k}qr66!qLImDK)zpra@%@?m4>xiLyoVqX(>moUT9syV=S1R%fmjM zRINTq=F3huZ7X<$5Rt%yC`d^^T6xSK5K{igg|&!sNBdU-x%51|=oXv6grpaCKT0j1!B$%S;y}lfdl2tV zFOpxeke`xm9#<<29-W`gW-2K$v%nsnG<@kw;at`9=GQeN-2AN>S3jLC#YUDU@!edG38pPq)^VzimZ*2NL0$A^hxpw! zkGAl1oWRG6cCI|&^EW+=qa2x;-{9%uV{`Rzs znEe6qV<&ZOisVLF@vN#iw=LtnMlPfQmSy+JbI8hJMFn?1s5Epx%kPVJXHI;!IaR0Q z!ed<40h=F8Fn#0tDoFWcQBRsNyjavK7&~Mc7-`Eo@^U8hj8_WWF3JQePqFz)7ukz? z3b=*()pfj+PEJ2xZ&wh8$5wAV`(#T2;2auC#i(VZii~s0!|IgenVt3nzM<(@eM$lahb|AX8;4SLnuxrl2QK-o{^K3r~q=Lzh)JhP4GDPLJc zdRX`$X#4nVFQ^mw3b}Z>Z#K>q+s0(EK=*J|&s6v!>E$w4Xf!G$yU298#I(E| zU8&Uyx^y^`Uhm__Pch`l+kn03ue;xpU%b$TGY$X!XJvsPa9N7%@wXdU3ZgZV_lGTb zLm0okqhqwP{a1Mwc7S&}f?3u8&bwWq1x}`LlcPBSrv{6(_V_PfwVqSOhV1jW`jmI- zH-+m0J`!_r%Fa7M!@PRQ@HrdSaq1Z4Rqp!iF`PE1WSFFKNVw7dRfiH2C-5kj*M1wK z+g*HK|2m4E%okCyQ?`dEjhd^Wnbs*8@L# Date: Fri, 12 Jan 2024 17:23:00 +0100 Subject: [PATCH 24/78] Parser: set transaction entrypoint parameter to non-complex --- app/src/parser/operation_parser.c | 4 ++-- tests/generate/gen_integration.ml | 1 - .../nanos/regression_batched_ops/00009.png | Bin 499 -> 379 bytes .../nanos/regression_batched_ops/00010.png | Bin 379 -> 499 bytes .../nanos/regression_batched_ops/00011.png | Bin 499 -> 462 bytes .../nanos/regression_batched_ops/00012.png | Bin 462 -> 455 bytes .../nanos/regression_batched_ops/00013.png | Bin 455 -> 472 bytes .../nanos/regression_batched_ops/00014.png | Bin 472 -> 437 bytes .../nanos/regression_batched_ops/00015.png | Bin 437 -> 450 bytes .../nanos/regression_batched_ops/00016.png | Bin 450 -> 442 bytes .../nanos/regression_batched_ops/00017.png | Bin 442 -> 478 bytes .../nanos/regression_batched_ops/00018.png | Bin 478 -> 448 bytes .../nanos/regression_batched_ops/00019.png | Bin 448 -> 466 bytes .../nanos/regression_batched_ops/00020.png | Bin 466 -> 468 bytes .../nanos/regression_batched_ops/00021.png | Bin 468 -> 464 bytes .../nanos/regression_batched_ops/00022.png | Bin 464 -> 462 bytes .../nanos/regression_batched_ops/00023.png | Bin 462 -> 471 bytes .../nanos/regression_batched_ops/00024.png | Bin 471 -> 469 bytes .../nanos/regression_batched_ops/00025.png | Bin 469 -> 440 bytes .../nanos/regression_batched_ops/00026.png | Bin 440 -> 351 bytes .../nanos/regression_batched_ops/00027.png | Bin 351 -> 427 bytes .../nanos/regression_batched_ops/00028.png | Bin 427 -> 484 bytes .../nanos/regression_batched_ops/00029.png | Bin 484 -> 461 bytes .../nanos/regression_batched_ops/00030.png | Bin 461 -> 320 bytes .../nanos/regression_batched_ops/00031.png | Bin 320 -> 361 bytes .../nanos/regression_batched_ops/00032.png | Bin 361 -> 354 bytes .../nanos/regression_batched_ops/00033.png | Bin 354 -> 497 bytes .../nanos/regression_batched_ops/00034.png | Bin 497 -> 489 bytes .../nanos/regression_batched_ops/00035.png | Bin 489 -> 404 bytes .../nanos/regression_batched_ops/00036.png | Bin 404 -> 0 bytes .../test_ensure_always_clearsign/00009.png | Bin 499 -> 326 bytes .../test_ensure_always_clearsign/00010.png | Bin 326 -> 499 bytes .../test_ensure_always_clearsign/00011.png | Bin 499 -> 421 bytes .../test_ensure_always_clearsign/00012.png | Bin 421 -> 406 bytes .../test_ensure_always_clearsign/00013.png | Bin 406 -> 402 bytes .../test_ensure_always_clearsign/00014.png | Bin 402 -> 407 bytes .../test_ensure_always_clearsign/00015.png | Bin 407 -> 405 bytes .../test_ensure_always_clearsign/00016.png | Bin 405 -> 422 bytes .../test_ensure_always_clearsign/00017.png | Bin 422 -> 415 bytes .../test_ensure_always_clearsign/00018.png | Bin 415 -> 420 bytes .../test_ensure_always_clearsign/00019.png | Bin 420 -> 414 bytes .../test_ensure_always_clearsign/00020.png | Bin 414 -> 398 bytes .../test_ensure_always_clearsign/00021.png | Bin 398 -> 406 bytes .../test_ensure_always_clearsign/00022.png | Bin 406 -> 401 bytes .../test_ensure_always_clearsign/00023.png | Bin 401 -> 390 bytes .../test_ensure_always_clearsign/00024.png | Bin 390 -> 439 bytes .../test_ensure_always_clearsign/00025.png | Bin 439 -> 314 bytes .../test_ensure_always_clearsign/00026.png | Bin 314 -> 410 bytes .../test_ensure_always_clearsign/00027.png | Bin 410 -> 403 bytes .../test_ensure_always_clearsign/00028.png | Bin 403 -> 392 bytes .../test_ensure_always_clearsign/00029.png | Bin 392 -> 419 bytes .../test_ensure_always_clearsign/00030.png | Bin 419 -> 404 bytes .../test_ensure_always_clearsign/00031.png | Bin 404 -> 404 bytes .../test_ensure_always_clearsign/00032.png | Bin 404 -> 0 bytes .../one_byte_added_at_the_end/00009.png | Bin 499 -> 324 bytes .../one_byte_added_at_the_end/00010.png | Bin 324 -> 499 bytes .../one_byte_added_at_the_end/00011.png | Bin 499 -> 347 bytes .../one_byte_added_at_the_end/00012.png | Bin 347 -> 465 bytes .../one_byte_added_at_the_end/00013.png | Bin 465 -> 444 bytes .../one_byte_added_at_the_end/00014.png | Bin 444 -> 288 bytes .../one_byte_removed_inside/00009.png | Bin 499 -> 366 bytes .../one_byte_removed_inside/00010.png | Bin 366 -> 465 bytes .../one_byte_removed_inside/00011.png | Bin 465 -> 444 bytes .../one_byte_removed_inside/00012.png | Bin 444 -> 288 bytes .../one_byte_removed_inside/00013.png | Bin 288 -> 0 bytes .../reject_signing/00009.png | Bin 499 -> 326 bytes .../reject_signing/00010.png | Bin 326 -> 499 bytes .../reject_signing/00011.png | Bin 499 -> 421 bytes .../reject_signing/00012.png | Bin 421 -> 406 bytes .../reject_signing/00013.png | Bin 406 -> 402 bytes .../reject_signing/00014.png | Bin 402 -> 407 bytes .../reject_signing/00015.png | Bin 407 -> 405 bytes .../reject_signing/00016.png | Bin 405 -> 422 bytes .../reject_signing/00017.png | Bin 422 -> 415 bytes .../reject_signing/00018.png | Bin 415 -> 420 bytes .../reject_signing/00019.png | Bin 420 -> 414 bytes .../reject_signing/00020.png | Bin 414 -> 398 bytes .../reject_signing/00021.png | Bin 398 -> 406 bytes .../reject_signing/00022.png | Bin 406 -> 401 bytes .../reject_signing/00023.png | Bin 401 -> 390 bytes .../reject_signing/00024.png | Bin 390 -> 439 bytes .../reject_signing/00025.png | Bin 439 -> 314 bytes .../reject_signing/00026.png | Bin 314 -> 410 bytes .../reject_signing/00027.png | Bin 410 -> 403 bytes .../reject_signing/00028.png | Bin 403 -> 392 bytes .../reject_signing/00029.png | Bin 392 -> 419 bytes .../reject_signing/00030.png | Bin 419 -> 404 bytes .../reject_signing/00031.png | Bin 404 -> 404 bytes .../reject_signing/00032.png | Bin 404 -> 341 bytes .../reject_signing/00033.png | Bin 341 -> 0 bytes .../nanos/test_reject_transaction/00009.png | Bin 499 -> 326 bytes .../nanos/test_reject_transaction/00010.png | Bin 326 -> 499 bytes .../nanos/test_reject_transaction/00011.png | Bin 499 -> 421 bytes .../nanos/test_reject_transaction/00012.png | Bin 421 -> 406 bytes .../nanos/test_reject_transaction/00013.png | Bin 406 -> 402 bytes .../nanos/test_reject_transaction/00014.png | Bin 402 -> 407 bytes .../nanos/test_reject_transaction/00015.png | Bin 407 -> 405 bytes .../nanos/test_reject_transaction/00016.png | Bin 405 -> 422 bytes .../nanos/test_reject_transaction/00017.png | Bin 422 -> 415 bytes .../nanos/test_reject_transaction/00018.png | Bin 415 -> 420 bytes .../nanos/test_reject_transaction/00019.png | Bin 420 -> 414 bytes .../nanos/test_reject_transaction/00020.png | Bin 414 -> 398 bytes .../nanos/test_reject_transaction/00021.png | Bin 398 -> 406 bytes .../nanos/test_reject_transaction/00022.png | Bin 406 -> 401 bytes .../nanos/test_reject_transaction/00023.png | Bin 401 -> 390 bytes .../nanos/test_reject_transaction/00024.png | Bin 390 -> 439 bytes .../nanos/test_reject_transaction/00025.png | Bin 439 -> 314 bytes .../nanos/test_reject_transaction/00026.png | Bin 314 -> 410 bytes .../nanos/test_reject_transaction/00027.png | Bin 410 -> 403 bytes .../nanos/test_reject_transaction/00028.png | Bin 403 -> 392 bytes .../nanos/test_reject_transaction/00029.png | Bin 392 -> 419 bytes .../nanos/test_reject_transaction/00030.png | Bin 419 -> 404 bytes .../nanos/test_reject_transaction/00031.png | Bin 404 -> 404 bytes .../nanos/test_reject_transaction/00032.png | Bin 404 -> 341 bytes .../nanos/test_reject_transaction/00033.png | Bin 341 -> 0 bytes .../nanos/test_sign_transaction/00009.png | Bin 499 -> 324 bytes .../nanos/test_sign_transaction/00010.png | Bin 324 -> 499 bytes .../nanos/test_sign_transaction/00011.png | Bin 499 -> 347 bytes .../nanos/test_sign_transaction/00012.png | Bin 347 -> 404 bytes .../nanos/test_sign_transaction/00013.png | Bin 404 -> 0 bytes .../test_sign_with_another_seed/00009.png | Bin 499 -> 324 bytes .../test_sign_with_another_seed/00010.png | Bin 324 -> 499 bytes .../test_sign_with_another_seed/00011.png | Bin 499 -> 347 bytes .../test_sign_with_another_seed/00012.png | Bin 347 -> 404 bytes .../test_sign_with_another_seed/00013.png | Bin 404 -> 0 bytes .../nanos/test_sign_with_long_hash/00010.png | Bin 499 -> 326 bytes .../nanos/test_sign_with_long_hash/00011.png | Bin 326 -> 499 bytes .../nanos/test_sign_with_long_hash/00012.png | Bin 499 -> 303 bytes .../nanos/test_sign_with_long_hash/00013.png | Bin 303 -> 404 bytes .../nanos/test_sign_with_long_hash/00014.png | Bin 404 -> 0 bytes .../test_sign_with_small_packet/00009.png | Bin 499 -> 324 bytes .../test_sign_with_small_packet/00010.png | Bin 324 -> 499 bytes .../test_sign_with_small_packet/00011.png | Bin 499 -> 347 bytes .../test_sign_with_small_packet/00012.png | Bin 347 -> 404 bytes .../test_sign_with_small_packet/00013.png | Bin 404 -> 0 bytes .../test_too_complex_transaction/00009.png | Bin 508 -> 324 bytes .../test_too_complex_transaction/00010.png | Bin 288 -> 488 bytes .../00011.png} | Bin .../test_ensure_always_clearsign/00007.png | Bin 542 -> 357 bytes .../test_ensure_always_clearsign/00008.png | Bin 357 -> 542 bytes .../test_ensure_always_clearsign/00009.png | Bin 542 -> 743 bytes .../test_ensure_always_clearsign/00010.png | Bin 743 -> 734 bytes .../test_ensure_always_clearsign/00011.png | Bin 734 -> 740 bytes .../test_ensure_always_clearsign/00012.png | Bin 740 -> 716 bytes .../test_ensure_always_clearsign/00013.png | Bin 716 -> 743 bytes .../test_ensure_always_clearsign/00014.png | Bin 743 -> 459 bytes .../test_ensure_always_clearsign/00015.png | Bin 459 -> 0 bytes .../one_byte_added_at_the_end/00007.png | Bin 542 -> 356 bytes .../one_byte_added_at_the_end/00008.png | Bin 356 -> 542 bytes .../one_byte_added_at_the_end/00009.png | Bin 542 -> 371 bytes .../one_byte_added_at_the_end/00010.png | Bin 371 -> 506 bytes .../one_byte_added_at_the_end/00011.png | Bin 506 -> 483 bytes .../one_byte_added_at_the_end/00012.png | Bin 483 -> 306 bytes .../one_byte_removed_inside/00007.png | Bin 542 -> 402 bytes .../one_byte_removed_inside/00008.png | Bin 402 -> 506 bytes .../one_byte_removed_inside/00009.png | Bin 506 -> 483 bytes .../one_byte_removed_inside/00010.png | Bin 483 -> 306 bytes .../reject_signing/00007.png | Bin 542 -> 357 bytes .../reject_signing/00008.png | Bin 357 -> 542 bytes .../reject_signing/00009.png | Bin 542 -> 743 bytes .../reject_signing/00010.png | Bin 743 -> 734 bytes .../reject_signing/00011.png | Bin 734 -> 740 bytes .../reject_signing/00012.png | Bin 740 -> 716 bytes .../reject_signing/00013.png | Bin 716 -> 743 bytes .../reject_signing/00014.png | Bin 743 -> 459 bytes .../reject_signing/00015.png | Bin 459 -> 366 bytes .../reject_signing/00016.png | Bin 366 -> 0 bytes .../nanosp/test_reject_transaction/00007.png | Bin 542 -> 357 bytes .../nanosp/test_reject_transaction/00008.png | Bin 357 -> 542 bytes .../nanosp/test_reject_transaction/00009.png | Bin 542 -> 743 bytes .../nanosp/test_reject_transaction/00010.png | Bin 743 -> 734 bytes .../nanosp/test_reject_transaction/00011.png | Bin 734 -> 740 bytes .../nanosp/test_reject_transaction/00012.png | Bin 740 -> 716 bytes .../nanosp/test_reject_transaction/00013.png | Bin 716 -> 743 bytes .../nanosp/test_reject_transaction/00014.png | Bin 743 -> 459 bytes .../nanosp/test_reject_transaction/00015.png | Bin 459 -> 366 bytes .../nanosp/test_reject_transaction/00016.png | Bin 366 -> 0 bytes .../nanosp/test_sign_transaction/00007.png | Bin 542 -> 356 bytes .../nanosp/test_sign_transaction/00008.png | Bin 356 -> 542 bytes .../nanosp/test_sign_transaction/00009.png | Bin 542 -> 371 bytes .../nanosp/test_sign_transaction/00010.png | Bin 371 -> 459 bytes .../nanosp/test_sign_transaction/00011.png | Bin 459 -> 0 bytes .../test_sign_with_another_seed/00007.png | Bin 542 -> 356 bytes .../test_sign_with_another_seed/00008.png | Bin 356 -> 542 bytes .../test_sign_with_another_seed/00009.png | Bin 542 -> 371 bytes .../test_sign_with_another_seed/00010.png | Bin 371 -> 459 bytes .../test_sign_with_another_seed/00011.png | Bin 459 -> 0 bytes .../nanosp/test_sign_with_long_hash/00007.png | Bin 542 -> 357 bytes .../nanosp/test_sign_with_long_hash/00008.png | Bin 357 -> 542 bytes .../nanosp/test_sign_with_long_hash/00009.png | Bin 542 -> 327 bytes .../nanosp/test_sign_with_long_hash/00010.png | Bin 327 -> 459 bytes .../nanosp/test_sign_with_long_hash/00011.png | Bin 459 -> 0 bytes .../test_sign_with_small_packet/00007.png | Bin 542 -> 356 bytes .../test_sign_with_small_packet/00008.png | Bin 356 -> 542 bytes .../test_sign_with_small_packet/00009.png | Bin 542 -> 371 bytes .../test_sign_with_small_packet/00010.png | Bin 371 -> 459 bytes .../test_sign_with_small_packet/00011.png | Bin 459 -> 0 bytes .../test_too_complex_transaction/00007.png | Bin 539 -> 356 bytes .../test_too_complex_transaction/00008.png | Bin 306 -> 516 bytes .../00009.png} | Bin .../nanox/regression_batched_ops/00007.png | Bin 542 -> 416 bytes .../nanox/regression_batched_ops/00008.png | Bin 416 -> 542 bytes .../nanox/regression_batched_ops/00009.png | Bin 542 -> 968 bytes .../nanox/regression_batched_ops/00010.png | Bin 968 -> 984 bytes .../nanox/regression_batched_ops/00011.png | Bin 984 -> 1048 bytes .../nanox/regression_batched_ops/00012.png | Bin 1048 -> 916 bytes .../nanox/regression_batched_ops/00013.png | Bin 916 -> 458 bytes .../nanox/regression_batched_ops/00014.png | Bin 458 -> 707 bytes .../nanox/regression_batched_ops/00015.png | Bin 707 -> 340 bytes .../nanox/regression_batched_ops/00016.png | Bin 340 -> 386 bytes .../nanox/regression_batched_ops/00017.png | Bin 386 -> 374 bytes .../nanox/regression_batched_ops/00018.png | Bin 374 -> 734 bytes .../nanox/regression_batched_ops/00019.png | Bin 734 -> 459 bytes .../nanox/regression_batched_ops/00020.png | Bin 459 -> 0 bytes .../test_ensure_always_clearsign/00007.png | Bin 542 -> 357 bytes .../test_ensure_always_clearsign/00008.png | Bin 357 -> 542 bytes .../test_ensure_always_clearsign/00009.png | Bin 542 -> 743 bytes .../test_ensure_always_clearsign/00010.png | Bin 743 -> 734 bytes .../test_ensure_always_clearsign/00011.png | Bin 734 -> 740 bytes .../test_ensure_always_clearsign/00012.png | Bin 740 -> 716 bytes .../test_ensure_always_clearsign/00013.png | Bin 716 -> 743 bytes .../test_ensure_always_clearsign/00014.png | Bin 743 -> 459 bytes .../test_ensure_always_clearsign/00015.png | Bin 459 -> 0 bytes .../one_byte_added_at_the_end/00007.png | Bin 542 -> 356 bytes .../one_byte_added_at_the_end/00008.png | Bin 356 -> 542 bytes .../one_byte_added_at_the_end/00009.png | Bin 542 -> 371 bytes .../one_byte_added_at_the_end/00010.png | Bin 371 -> 506 bytes .../one_byte_added_at_the_end/00011.png | Bin 506 -> 483 bytes .../one_byte_added_at_the_end/00012.png | Bin 483 -> 306 bytes .../one_byte_added_at_the_end/00013.png | Bin 306 -> 0 bytes .../one_byte_removed_inside/00007.png | Bin 542 -> 402 bytes .../one_byte_removed_inside/00008.png | Bin 402 -> 506 bytes .../one_byte_removed_inside/00009.png | Bin 506 -> 483 bytes .../one_byte_removed_inside/00010.png | Bin 483 -> 306 bytes .../one_byte_removed_inside/00011.png | Bin 306 -> 0 bytes .../reject_signing/00007.png | Bin 542 -> 357 bytes .../reject_signing/00008.png | Bin 357 -> 542 bytes .../reject_signing/00009.png | Bin 542 -> 743 bytes .../reject_signing/00010.png | Bin 743 -> 734 bytes .../reject_signing/00011.png | Bin 734 -> 740 bytes .../reject_signing/00012.png | Bin 740 -> 716 bytes .../reject_signing/00013.png | Bin 716 -> 743 bytes .../reject_signing/00014.png | Bin 743 -> 459 bytes .../reject_signing/00015.png | Bin 459 -> 366 bytes .../reject_signing/00016.png | Bin 366 -> 0 bytes .../nanox/test_reject_transaction/00007.png | Bin 542 -> 357 bytes .../nanox/test_reject_transaction/00008.png | Bin 357 -> 542 bytes .../nanox/test_reject_transaction/00009.png | Bin 542 -> 743 bytes .../nanox/test_reject_transaction/00010.png | Bin 743 -> 734 bytes .../nanox/test_reject_transaction/00011.png | Bin 734 -> 740 bytes .../nanox/test_reject_transaction/00012.png | Bin 740 -> 716 bytes .../nanox/test_reject_transaction/00013.png | Bin 716 -> 743 bytes .../nanox/test_reject_transaction/00014.png | Bin 743 -> 459 bytes .../nanox/test_reject_transaction/00015.png | Bin 459 -> 366 bytes .../nanox/test_reject_transaction/00016.png | Bin 366 -> 0 bytes .../nanox/test_sign_transaction/00007.png | Bin 542 -> 356 bytes .../nanox/test_sign_transaction/00008.png | Bin 356 -> 542 bytes .../nanox/test_sign_transaction/00009.png | Bin 542 -> 371 bytes .../nanox/test_sign_transaction/00010.png | Bin 371 -> 459 bytes .../nanox/test_sign_transaction/00011.png | Bin 459 -> 0 bytes .../test_sign_with_another_seed/00007.png | Bin 542 -> 356 bytes .../test_sign_with_another_seed/00008.png | Bin 356 -> 542 bytes .../test_sign_with_another_seed/00009.png | Bin 542 -> 371 bytes .../test_sign_with_another_seed/00010.png | Bin 371 -> 459 bytes .../test_sign_with_another_seed/00011.png | Bin 459 -> 0 bytes .../nanox/test_sign_with_long_hash/00007.png | Bin 542 -> 357 bytes .../nanox/test_sign_with_long_hash/00008.png | Bin 357 -> 542 bytes .../nanox/test_sign_with_long_hash/00009.png | Bin 542 -> 327 bytes .../nanox/test_sign_with_long_hash/00010.png | Bin 327 -> 459 bytes .../nanox/test_sign_with_long_hash/00011.png | Bin 459 -> 0 bytes .../test_sign_with_small_packet/00007.png | Bin 542 -> 356 bytes .../test_sign_with_small_packet/00008.png | Bin 356 -> 542 bytes .../test_sign_with_small_packet/00009.png | Bin 542 -> 371 bytes .../test_sign_with_small_packet/00010.png | Bin 371 -> 459 bytes .../test_sign_with_small_packet/00011.png | Bin 459 -> 0 bytes .../test_too_complex_transaction/00007.png | Bin 539 -> 356 bytes .../test_too_complex_transaction/00008.png | Bin 306 -> 516 bytes .../test_too_complex_transaction/00009.png} | Bin .../tst_review_003.png | Bin 0 -> 6913 bytes tests/integration/stax/test_blindsign_valid.py | 8 ++++---- .../stax/test_expert_mode_rejections.py | 2 ++ tests/integration/stax/test_parsing_errors.py | 6 +----- tests/integration/stax/test_sign_transfer.py | 10 ++-------- .../stax/test_sign_transfer_without_hash.py | 5 +---- tests/unit/ctest/tests_parser.c | 4 ++-- 285 files changed, 14 insertions(+), 26 deletions(-) delete mode 100644 tests/integration/nano/snapshots/nanos/regression_batched_ops/00036.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00032.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_removed_inside/00013.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00033.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_reject_transaction/00033.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign_transaction/00013.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign_with_another_seed/00013.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign_with_long_hash/00014.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign_with_small_packet/00013.png rename tests/integration/nano/snapshots/nanos/{test_parsing_errors/one_byte_added_at_the_end/00015.png => test_too_complex_transaction/00011.png} (100%) delete mode 100644 tests/integration/nano/snapshots/nanosp/test_ensure_always_clearsign/00015.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00016.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_reject_transaction/00016.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_transaction/00011.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00011.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00011.png delete mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00011.png rename tests/integration/nano/snapshots/nanosp/{test_parsing_errors/one_byte_added_at_the_end/00013.png => test_too_complex_transaction/00009.png} (100%) delete mode 100644 tests/integration/nano/snapshots/nanox/regression_batched_ops/00020.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_ensure_always_clearsign/00015.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_added_at_the_end/00013.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_removed_inside/00011.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00016.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_reject_transaction/00016.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign_transaction/00011.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign_with_another_seed/00011.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign_with_long_hash/00011.png delete mode 100644 tests/integration/nano/snapshots/nanox/test_sign_with_small_packet/00011.png rename tests/integration/nano/snapshots/{nanosp/test_parsing_errors/one_byte_removed_inside/00011.png => nanox/test_too_complex_transaction/00009.png} (100%) create mode 100644 tests/integration/stax/snapshots/test_expert_mode_rejections/tst_review_003.png diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index db2a9b495..91c7d72f8 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -115,8 +115,8 @@ TZ_OPERATION_FIELDS(transaction_fields, TZ_OPERATION_FIELD("Destination", TZ_OPERATION_FIELD_DESTINATION), TZ_OPERATION_OPTION_FIELD("_Parameters", TZ_OPERATION_TUPLE_FIELD("_Parameters", - TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_SMART_ENTRYPOINT, .complex=true), - TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_EXPR, .complex=true)), + TZ_OPERATION_FIELD("Entrypoint", TZ_OPERATION_FIELD_SMART_ENTRYPOINT), + TZ_OPERATION_FIELD("Parameter", TZ_OPERATION_FIELD_EXPR, .complex=true)), .display_none=false) ); diff --git a/tests/generate/gen_integration.ml b/tests/generate/gen_integration.ml index 053011190..cf0113820 100644 --- a/tests/generate/gen_integration.ml +++ b/tests/generate/gen_integration.ml @@ -279,7 +279,6 @@ let operation_to_screens then [] else [ - need_expert_mode_screen "Entrypoint"; make_screen ~title:"Entrypoint" "%a" Entrypoint.pp entrypoint; need_expert_mode_screen "Parameter"; make_screen ~title:"Parameter" "%a" pp_lazy_expr parameters; diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00009.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00009.png index 92b4bce4e0b6ca6910717fd0d8adde36278ae65b..29807b584511f5b00b16907dc8081ede68355c1e 100644 GIT binary patch delta 352 zcmV-m0iXW!1N#DyB!5ClL_t(|ob8#*62l+}MYWUs{|9%`E;3_{pc0={?^#((fPkP$ ztQp4V{TthJoL%a}EbCJINVQcf(JU0}L|5yaX3Ge5S|D`wUACNC{@9-h=A8zokY42r zu$Ks}H;07xmHxYn2mXBq7TwsM(Kuc|X*vVXgILF$$y#pfgfHDSr!|Keu=Kz#H0000000000upwXDb+@DaR$7Yy0000kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfK&0oJ diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00010.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00010.png index 29807b584511f5b00b16907dc8081ede68355c1e..92b4bce4e0b6ca6910717fd0d8adde36278ae65b 100644 GIT binary patch delta 473 zcmV;~0Ve+Y0`miqB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfK&0oJ delta 352 zcmV-m0iXW!1N#DyB!5ClL_t(|ob8#*62l+}MYWUs{|9%`E;3_{pc0={?^#((fPkP$ ztQp4V{TthJoL%a}EbCJINVQcf(JU0}L|5yaX3Ge5S|D`wUACNC{@9-h=A8zokY42r zu$Ks}H;07xmHxYn2mXBq7TwsM(Kuc|X*vVXgILF$$y#pfgfHDSr!|Keu=Kz#H0000000000upwXDb+@DaR$7Yy0000uEQV*hV8QR{tvv1oeL9#iWDr+F8ROgVr>!i zucFwar1AZ9m&adT)eq*y+#8hg1-1<^I_ip>N{h@n8Z`rYI zszN9z+l1=S&x7~sL16WbRWzVzY&3OUvGJuBxer0p1o=sxse9#Q4Jf(qppEO(KxEy( z&{D(t-0rY8q2w>I001Cz__&diCe~h#hO!@;0nBEC^Svm%s%6!@8(_E9S5`K8pT1q4 z?CoN!wwR70B7azA{3T`_vGb!$$ppO&I(tx%@&e?X*4k}T7-5ehs2_d$IhZ*O9gi1q z+Omza1ge)T&|R^3FFBtGm;tO1PR%uY-i|Fp!LS^P`yOD$J$W8ZkCjIYtN6Aj+;%}D zDQiG+9s8z3LuG)nPL#NB2AjCY7Uecn<3V5K4m?6oB`x9|JXJMEoHF5OqD;#H00000 e00000kj6h+kOkT4HdqJ%0000rrB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf??~rw diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00012.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00012.png index c6158a7d25dd7a3b5a9d51e70f954334fec477e9..aba10d4bb53bd2a79f1605b88dbd86788b964ba6 100644 GIT binary patch delta 429 zcmV;e0aE_X1IGi9B!7-cL_t(|ob8xN4#OY}MM;(3|G-_e3nb(TV+fE``cGX1YRtz8 zW;oI|z8_XR-ut?KFfXG{L~1TK#{K(QJG6)Z#c3Grj1kpT`pp{hU*#caLk(!FQY=l( z-i6z_WY63!p8=brpEc!Q;^7dXsoBt|QAz~0fpDcguTB8mKYy74d!jFf=Zx0;mb%HXh2a@+ z??~c000000000009Nw@ XmDE3=$>kXY00000NkvXXu0mjfz;ex^ delta 436 zcmV;l0ZabJ1I`1GB!87jL_t(|ob8#>uEQV*hV8QR{tvv1oeL9#iWDr+F8ROgVr>!i zucFwar1AZ9m&adT)eq*y+#8hg1-1<^I_ip>N{h@n8Z`rYI zszN9z+l1=S&x7~sL16WbRWzVzY&3OUvGJuBxer0p1o=sxse9#Q4Jf(qppEO(KxEy( z&{D(t-0rY8q2w>I001Cz__&diCe~h#hO!@;0nBEC^Svm%s%6!@8(_E9S5`K8pT1q4 z?CoN!wwR70B7azA{3T`_vGb!$$ppO&I(tx%@&e?X*4k}T7-5ehs2_d$IhZ*O9gi1q z+Omza1ge)T&|R^3FFBtGm;tO1PR%uY-i|Fp!LS^P`yOD$J$W8ZkCjIYtN6Aj+;%}D zDQiG+9s8z3LuG)nPL#NB2AjCY7Uecn<3V5K4m?6oB`x9|JXJMEoHF5OqD;#H00000 e00000kj6h+kOkT4HdqJ%0000K diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00013.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00013.png index aba10d4bb53bd2a79f1605b88dbd86788b964ba6..a1d031e413a910444398ca1fd2da1e1805ba4271 100644 GIT binary patch delta 446 zcmV;v0YU!91K0zQB!8btL_t(|ob8#xlEWYfhRsg<{tw(kdvJz9KqNL2yYqjuhfRW@ zs3`O(X}n*}^)I-qzMLYY3|eImQH5A_rM6O`csycIoC z6Vtj-do5LStG3+%$=eUNqoDWFoe{k-3)E$!!Qy8{{Y1)9;nR8BlWPfY$Xe5S_ii z@K)k{rZ=X{Qu2>j003|~Cfn&$#Yu&9;1khMhiUU(-_zDp>vX%9f(13-9L@D5S|4Km z9lV!wMc#aKV1GtBZ0e7vFDFr@h}H01KPc>cCB!OrHs8=LQv14 zLXuKKe@K3+JamUSNfX)VaC9!S6QIZJl(&XNB>i$*1mU1PuH;h_Fy{ikyUY3YVhYcd zD0U+847mLkkyGqC$0000000000001D14}Xsp&VC{!l>h($07*qoM6N<$g5XQt_y7O^ delta 429 zcmV;e0aE_h1IGi9B!7-cL_t(|ob8xN4#OY}MM;(3|G-_e3nb(TV+fE``cGX1YRtz8 zW;oI|z8_XR-ut?KFfXG{L~1TK#{K(QJG6)Z#c3Grj1kpT`pp{hU*#caLk(!FQY=l( z-i6z_WY63!p8=brpEc!Q;^7dXsoBt|QAz~0fpDcguTB8mKYy74d!jFf=Zx0;mb%HXh2a@+ z??~c000000000009Nw@ XmDE3=$>kXY00000NkvXXu0mjf(KOAh diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00014.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00014.png index a1d031e413a910444398ca1fd2da1e1805ba4271..51e439646733e7b44f89db85c981cd53a1283b75 100644 GIT binary patch delta 411 zcmV;M0c8Hz1GNK?B!7HKL_t(|ob8#x5`-WKhHIyN{|D~S9-L)RQK6Kq`M=r2Rw#&q zM(g6nu}7Ed*H87te1v<6r}}cE-;aIl&@={QY=V%dkGM^wH`ov!(I2G@7vQbvlA4Ix zlWzMGdXBq|Bf#1F!KUzAVs|92DamlJama(YK+;v-^XLQ+_kYhKz{mT^@G7Gf*Rn}P zrD0uWs2}1u*h&uuswYa>fTNMo=(-})m)Oa13d#cHk<97$Kw}SBeCL4Hbu$rJ4=}t{ zvOm)uQD!LqTPy$o45ywz`GHT9aGU9vdQc{AtHz7w-HB+Nc;db?4AUEv#<`{mu!^E#Nx=qVLX?8B8iBM*1EwGw&#tFnUKovM*^0d|ggN%fGPP+`99f zv-HV9seSgC>%L&$6#-96L4kM80RR9100000004j&KNQFd80ov7Pr(2H002ovPDHLk FV1o1n%9sEE delta 446 zcmV;v0YUz?1K0zQB!8btL_t(|ob8#xlEWYfhRsg<{tw(kdvJz9KqNL2yYqjuhfRW@ zs3`O(X}n*}^)I-qzMLYY3|eImQH5A_rM6O`csycIoC z6Vtj-do5LStG3+%$=eUNqoDWFoe{k-3)E$!!Qy8{{Y1)9;nR8BlWPfY$Xe5S_ii z@K)k{rZ=X{Qu2>j003|~Cfn&$#Yu&9;1khMhiUU(-_zDp>vX%9f(13-9L@D5S|4Km z9lV!wMc#aKV1GtBZ0e7vFDFr@h}H01KPc>cCB!OrHs8=LQv14 zLXuKKe@K3+JamUSNfX)VaC9!S6QIZJl(&XNB>i$*1mU1PuH;h_Fy{ikyUY3YVhYcd zD0U+847mLkkyGqC$0000000000001D14}Xsp&VC{!l>h($07*qoM6N<$g23ji-G1qTgT7*r8cEz_<%SJAG94iR|V+}`P zh}IjmzGTg{+Ij_S_I~bD{-xR-jca-`rPoTxgIu6d#WhC$sZzZsq~T5&E< znNS+)GNFE`*TKE_AkaL~iv}eY8H=qI8DDBA*CB{4kiXJ*Q005{Q=bQGjmGXH0vD1%zdSp}%`%}GIl+hEtp|&W*y-Pe|pWfxB z@*_)+^DZ+S(*7@ZPJB;E7M zm;%w-3m6V^7&;em(Ppf^@l|5n>40bK-!o1O1#AXW~LEgrKXt1|a|d000000002sa=Zcky#wT@ SOgfTNMo=(-})m)Oa13d#cHk<97$Kw}SBeCL4Hbu$rJ4=}t{ zvOm)uQD!LqTPy$o45ywz`GHT9aGU9vdQc{AtHz7w-HB+Nc;db?4AUEv#<`{mu!^E#Nx=qVLX?8B8iBM*1EwGw&#tFnUKovM*^0d|ggN%fGPP+`99f zv-HV9seSgC>%L&$6#-96L4kM80RR9100000004j&KNQFd80ov7Pr(2H002ovPDHLk FV1m%H%7Op@ diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00016.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00016.png index 81da7862777a2aef8946928ac83eef32d4b69c4a..b3c17e476a565bf5d879dd000411a84b6c38f79a 100644 GIT binary patch delta 416 zcmV;R0bl;Y1G)o{B!7WPL_t(|ob8xN4#OY}MM;(3|G-_e3shwAfE&Oi(tqlrA-4H( z!sH``@qSg8$1|?$jd=)dO{V7Z$GpE^Yah)cfN=^&kvXE8O21h{zE%D>ZKwhDDwoAY z?7ay)mmIkcTaSR?>}O5+m+EvhsnKj`)+i-|+@J}?Bd?wS>VNoT1jJ;&c|7B3#c%ni zE(}N8W@#Skad2uk7It6IW&?`H#?#k`&0Ojv*HaK1Ah%@Cyk|OVK#F|_<-6`qM89re zs8_Q-mln}xDe+4z005XAax*`P_*;^G%(>=e)G&-LxVyHmHQH@4+Cv#$t~G$~k@FvZ zP|}W0&VZsJxAXGF$G zZReUiw}z=NpnF~wt2fS>dPIg+G7=RwUe`vy=EXEjeF2=?9X-O;`qqGLxqsory$wxD z)wjDb)e6O0i+|Ucq#0u*pr)3ZMQlR>000000000002u%P3-|y@dn>K;-K=W>0000< KMNUMnLSTZZ7{np~ delta 424 zcmV;Z0ayOI1HuE4B!7uXL_t(|ob8#x4#OY_hV8Pw{{!!^9ZZ-CB35u)^MBc4Z4s0z z3O&*`UeD_Ccji-G1qTgT7*r8cEz_<%SJAG94iR|V+}`P zh}IjmzGTg{+Ij_S_I~bD{-xR-jca-`rPoTxgIu6d#WhC$sZzZsq~T5&E< znNS+)GNFE`*TKE_AkaL~iv}eY8H=qI8DDBA*CB{4kiXJ*Q005{Q=bQGjmGXH0vD1%zdSp}%`%}GIl+hEtp|&W*y-Pe|pWfxB z@*_)+^DZ+S(*7@ZPJB;E7M zm;%w-3m6V^7&;em(Ppf^@l|5n>40bK-!o1O1#AXW~LEgrKXt1|a|d000000002sa=Zcky#wT@ SOg1KtCWB!8tzL_t(|ob8y|j>8}fMaii1{~z3k%mWfK-ndDCX{CGAhb-P= ziZL8z8|S;bJ%0DO{$PHbXDU;3`NzDU@3o(X1YmeMLOXLLV`_eD4E0sJ0A-|r)M~d) z#r3Yt&ZS!J&Gs{3bM|XY^;i0IsMJIOdlif=2=##uIt*sY33e zl=RMsR$@n9B!BX`NB0`Bmc#=J*vJttr4+vly1~T7{Tus)2knhH3&LGi62}uyR1kNO z7+4IS#1>T~zzaM8>NrLDaB&Z6^1_{)vPRVIT^-e_Fl=Bqz_lZKwhDDwoAY z?7ay)mmIkcTaSR?>}O5+m+EvhsnKj`)+i-|+@J}?Bd?wS>VNoT1jJ;&c|7B3#c%ni zE(}N8W@#Skad2uk7It6IW&?`H#?#k`&0Ojv*HaK1Ah%@Cyk|OVK#F|_<-6`qM89re zs8_Q-mln}xDe+4z005XAax*`P_*;^G%(>=e)G&-LxVyHmHQH@4+Cv#$t~G$~k@FvZ zP|}W0&VZsJxAXGF$G zZReUiw}z=NpnF~wt2fS>dPIg+G7=RwUe`vy=EXEjeF2=?9X-O;`qqGLxqsory$wxD z)wjDb)e6O0i+|Ucq#0u*pr)3ZMQlR>000000000002u%P3-|y@dn>K;-K=W>0000< KMNUMnLSTZ`n8ZE+ diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00018.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00018.png index 37311841295dcc87812d9a38ba3ef99cb9a2309a..7069eac669198c9836591882dcd2e0a7ae911118 100644 GIT binary patch delta 422 zcmV;X0a^au1Hc22B!7oVL_t(|ob8y~4#OY_hV9b5{{!!0yD%}zL6M5>lK;ytR*Ohc zP(0E$zMtmtc<&qf!Mubv;;FUV==bj@_R}l|Fit^er;loz%DCBv{Hpvh%G3gNuku*B zh@%s=Yss2hwQU4!_I|c0|5ED?;u=k+_F7HxAQvF2xaQ~t(0}T$B4CgA$>(*xR$R+d zLv%X!WkUVX#=)t*2pqnkWrG@vjAg7VGHYp_+@>HFAb-g-{hk@@0cr0XlyyB!M6(B& zx)<4>ON%HI%Kj}D006oio=!Zg@?*GG>1Yc3$8}fMaii1{~z3k%mWfK-ndDCX{CGAhb-P= ziZL8z8|S;bJ%0DO{$PHbXDU;3`NzDU@3o(X1YmeMLOXLLV`_eD4E0sJ0A-|r)M~d) z#r3Yt&ZS!J&Gs{3bM|XY^;i0IsMJIOdlif=2=##uIt*sY33e zl=RMsR$@n9B!BX`NB0`Bmc#=J*vJttr4+vly1~T7{Tus)2knhH3&LGi62}uyR1kNO z7+4IS#1>T~zzaM8>NrLDaB&Z6^1_{)vPRVIT^-e_Fl=Bqz_l8}fgvqM={tw(k_kd&>{F8wK+e-7PhlH5H zxWPDFqu%{(A168sdQA;TWBak@iW(tv=L8ask?C1Kmq* zrHeayC%cxa+{(5q;BfS-PxV*YaCD)GY;@E#54 z!02Ax{wyu7%~sBDv4jwka{0~fw@*ncZreBdCIVZmRIVJEmOId8NJM$m0Yn^8R*b9wD=~ds6X{R9GDsItdCmc(S8NmP0nrha zoE;AF6~`O+|_(}jq7d+b}??Q1Cc-0B|GBn>_)3_LI@#* i5JCtcgb+f=dHw*pFKp2&&z5rl0000lK;ytR*Ohc zP(0E$zMtmtc<&qf!Mubv;;FUV==bj@_R}l|Fit^er;loz%DCBv{Hpvh%G3gNuku*B zh@%s=Yss2hwQU4!_I|c0|5ED?;u=k+_F7HxAQvF2xaQ~t(0}T$B4CgA$>(*xR$R+d zLv%X!WkUVX#=)t*2pqnkWrG@vjAg7VGHYp_+@>HFAb-g-{hk@@0cr0XlyyB!M6(B& zx)<4>ON%HI%Kj}D006oio=!Zg@?*GG>1Yc3$o~}JB9(0O82OX#xZ^| zn80~#Tm@s^_hOS3G^$`!D=`YopRcgS+6(nLDEY8T*h2QG;Z0fXF09gS(j#VeIf}aAhA0ZwA(0V4V-&* zGaRZStvk^<0UWZ+kI=60@REtTEyr!mc9};vLIYTjQAU&KnSkid%c@lv%VhY1=o?o0 z3MQa9)%nN6z$Mx<4~i>i-J5{6*78=Uisjy+tJaiQi!+?sQ5A_xrQ=y^Zklf5l^6g3 k0000000000001}g2l5Lq#zf73$^ZZW07*qoM6N<$f`jJOga7~l delta 440 zcmV;p0Z0DS1JVPKB!8JnL_t(|ob8y+j>8}fgvqM={tw(k_kd&>{F8wK+e-7PhlH5H zxWPDFqu%{(A168sdQA;TWBak@iW(tv=L8ask?C1Kmq* zrHeayC%cxa+{(5q;BfS-PxV*YaCD)GY;@E#54 z!02Ax{wyu7%~sBDv4jwka{0~fw@*ncZreBdCIVZmRIVJEmOId8NJM$m0Yn^8R*b9wD=~ds6X{R9GDsItdCmc(S8NmP0nrha zoE;AF6~`O+|_(}jq7d+b}??Q1Cc-0B|GBn>_)3_LI@#* i5JCtcgb+f=dHw*pFKp2&&z5rl0000I4ch3#hc{U3NPW-m+#ia$rI*x8&fbJ2D{ zC>5mk3T}Mf$?5g$XZpeX6s~2FTFb$>f8Kj<4ROHmDhPSTNc$vqqYv>fIRIs}fYy>z zQ7Kx_hFwb>IUP350O#mOpW-j1;mAT$lhIMrNCd4wHk2KCcYgs$$5$EP6aDP=8h2Zq z%R?p_ifx&#aY*yvRr_P3d7)MfG>8mh>yFG?(jccL$Rx;D^31qLI%`1ieFieGyM<`9 zfzevo`Ycz9GF$OqVhJI{58K06q9zlYYCk_j&+b@C}I_9EyG@e-GFJ=xgmgT=pz?a4z~`O$NyH zwEM#iFNgO2zyf6xWk^xPz)u4E%H|}~Z74D(uJTp5lrNxv7qx|4ryT&$&+jS8P6#1{ g5JCtcgpeuz0A8z9c@~07*qoM6N<$g0Sh*-v9sr delta 442 zcmV;r0Y(1M1JnbMB!8PpL_t(|ob8y)Zp0uAMU!g!{~tVy=>o~}JB9(0O82OX#xZ^| zn80~#Tm@s^_hOS3G^$`!D=`YopRcgS+6(nLDEY8T*h2QG;Z0fXF09gS(j#VeIf}aAhA0ZwA(0V4V-&* zGaRZStvk^<0UWZ+kI=60@REtTEyr!mc9};vLIYTjQAU&KnSkid%c@lv%VhY1=o?o0 z3MQa9)%nN6z$Mx<4~i>i-J5{6*78=Uisjy+tJaiQi!+?sQ5A_xrQ=y^Zklf5l^6g3 k0000000000001}g2l5Lq#zf73$^ZZW07*qoM6N<$f`D?>f&c&j diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00022.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00022.png index ea0f2a1b85412d41e9537b8455aa404bd615ed0f..f9c016fd8ffc08fcb20cb58b525c73cbc8a613cd 100644 GIT binary patch delta 436 zcmV;l0ZabS1I`1GB!87jL_t(|ob8#*j>8}fMM>59{}1k>vp_=NS1!-C(mm=Tag1%8 zU=sIA$9TV*)9de?>o4YE$V8^r^1-~nUwfy91fX~tN+)wv$5j0081kiZ0P55V^{8@M zhM3-k*|lWLt=V=39L|1@DgRQN4v`v9r_NeU$)HvcrnKeV1%IHmU#);M*%#9bW@|pn zT`q!wvCh^!wCmvMUD)Wp;8lYfLm^UM)gu)Ooz9dLp#`4-nRo;;1XHmS{Wkoh^67?^tYOTS8%SI3a`(LI@#* e5JCtcWI6xOVo|K|6cC&M0000I4ch3#hc{U3NPW-m+#ia$rI*x8&fbJ2D{ zC>5mk3T}Mf$?5g$XZpeX6s~2FTFb$>f8Kj<4ROHmDhPSTNc$vqqYv>fIRIs}fYy>z zQ7Kx_hFwb>IUP350O#mOpW-j1;mAT$lhIMrNCd4wHk2KCcYgs$$5$EP6aDP=8h2Zq z%R?p_ifx&#aY*yvRr_P3d7)MfG>8mh>yFG?(jccL$Rx;D^31qLI%`1ieFieGyM<`9 zfzevo`Ycz9GF$OqVhJI{58K06q9zlYYCk_j&+b@C}I_9EyG@e-GFJ=xgmgT=pz?a4z~`O$NyH zwEM#iFNgO2zyf6xWk^xPz)u4E%H|}~Z74D(uJTp5lrNxv7qx|4ryT&$&+jS8P6#1{ g5JCtcgpeuz0A8z9c@~07*qoM6N<$f~KX?*#H0l diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00023.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00023.png index f9c016fd8ffc08fcb20cb58b525c73cbc8a613cd..3ed39eca9c766488c7ac9db99e4d496ec89cd8fc 100644 GIT binary patch delta 445 zcmV;u0Yd)H1J?tPB!8YsL_t(|ob8y|j>8}fMaii1{~z3k_5lfbk69-p-J?DvU@pcf zX1U5SK5zDV{hsUk!TcCyB2sJl!?=Imdxw^BK=Cq+PR5A()cUPH)T;K7w4nyHReNns z%-)6UTBe$CC`j|g3KB)R$_WJ n<0=3E00000000000AQXkz>r&rf7G7F00000NkvXXu0mjfRs_?z delta 436 zcmV;l0ZabZ1I`1GB!87jL_t(|ob8#*j>8}fMM>59{}1k>vp_=NS1!-C(mm=Tag1%8 zU=sIA$9TV*)9de?>o4YE$V8^r^1-~nUwfy91fX~tN+)wv$5j0081kiZ0P55V^{8@M zhM3-k*|lWLt=V=39L|1@DgRQN4v`v9r_NeU$)HvcrnKeV1%IHmU#);M*%#9bW@|pn zT`q!wvCh^!wCmvMUD)Wp;8lYfLm^UM)gu)Ooz9dLp#`4-nRo;;1XHmS{Wkoh^67?^tYOTS8%SI3a`(LI@#* e5JCtcWI6xOVo|K|6cC&M0000o|zeqkntPNaL(MMJKQ zF~K~}V;k4I`*{BD>-xd`7;Pd`wftk=ulL%aWdcyV4AIUU@tCOJ7DM}r{z+=MfLqZ= zGBJA>Zfj|td$;`x*qr?qQ~Nvmbcob=8lE){Wl#%*EA4r80e|TIvlXx>`(k*(XwBd9 zR2P9^tXZ0eejU8LFBW!Bc-4TD(PaAiL{m$j4-ZrR<6P63Dt)h3Z$Uc=9&p5)Pu^iH zHp`$_k$5C@OO5@{-`?vcAUSxBDE(8>-&^%wK{sW?UhYNSQ#1ipL(*=!3H4%nyHTk; z|4B^o8}fMaii1{~z3k_5lfbk69-p-J?DvU@pcf zX1U5SK5zDV{hsUk!TcCyB2sJl!?=Imdxw^BK=Cq+PR5A()cUPH)T;K7w4nyHReNns z%-)6UTBe$CC`j|g3KB)R$_WJ n<0=3E00000000000AQXkz>r&rf7G7F00000NkvXXu0mjfVlUIc diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00025.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00025.png index a1a29a201b83df603b39082d505ed70a4fad16ea..a73970865bd7c893ef7371fbc7a0fdbd392654ae 100644 GIT binary patch delta 414 zcmV;P0b%~t1Goc_B!7QNL_t(|ob8#*vcn(&` z4Kb|?wQEV5bG3N{1baWtDgCb89l|vw8SXU>c~A=oRa*1z1b>k0XAuzNeQ|r0yEWhC zE)$i3b(yVx$m8Hyy0FnaQOX7!kBrCGjLcecC+8_h1;~-y)9;B!4Y*>T0lnAFMAW;0 z;iE)-rZc9@R^m%6004wSDb>uXy=(1ecIFDVW^@1Qxf8V$o@Z>ys1YTrS;5Y%Z=(-D zZ~f=tI@5pAX@BVL5cvBOTEJ<=Y?DM#-#3{8rA|X>U^D84!iv19vtqGstEsSur71|X zTzZ$iGg(WtcZLbyhi<3=!_0^9{4O%QkXYXXh7n!gGpk}Sfe|2*l5RLR3!um_T%msP zJqrCpN}nZeM}4KgJj0&fI@}Ne=Q{-e0000000000;1{3r1y2JJLv#Cx%>V!Z07*qo IM6N<$g5N5^a{vGU delta 443 zcmV;s0Yv_|1JwhNB!8SqL_t(|ob8y)ZUZ3o|zeqkntPNaL(MMJKQ zF~K~}V;k4I`*{BD>-xd`7;Pd`wftk=ulL%aWdcyV4AIUU@tCOJ7DM}r{z+=MfLqZ= zGBJA>Zfj|td$;`x*qr?qQ~Nvmbcob=8lE){Wl#%*EA4r80e|TIvlXx>`(k*(XwBd9 zR2P9^tXZ0eejU8LFBW!Bc-4TD(PaAiL{m$j4-ZrR<6P63Dt)h3Z$Uc=9&p5)Pu^iH zHp`$_k$5C@OO5@{-`?vcAUSxBDE(8>-&^%wK{sW?UhYNSQ#1ipL(*=!3H4%nyHTk; z|4B^oq_mjWX)2oi~wiv=RW0MlI~EhsmXA!ama(EfKpXz9-RQBet#ALKHgWuYmC-h%ePE4 z8n$JI`a#CQUVAXmJWNDLjWrpHkVgUeP9n4IvUMOGR?%u>YikOz3ok6rJ7it1%ji-1keF&` z4Kb|?wQEV5bG3N{1baWtDgCb89l|vw8SXU>c~A=oRa*1z1b>k0XAuzNeQ|r0yEWhC zE)$i3b(yVx$m8Hyy0FnaQOX7!kBrCGjLcecC+8_h1;~-y)9;B!4Y*>T0lnAFMAW;0 z;iE)-rZc9@R^m%6004wSDb>uXy=(1ecIFDVW^@1Qxf8V$o@Z>ys1YTrS;5Y%Z=(-D zZ~f=tI@5pAX@BVL5cvBOTEJ<=Y?DM#-#3{8rA|X>U^D84!iv19vtqGstEsSur71|X zTzZ$iGg(WtcZLbyhi<3=!_0^9{4O%QkXYXXh7n!gGpk}Sfe|2*l5RLR3!um_T%msP zJqrCpN}nZeM}4KgJj0&fI@}Ne=Q{-e0000000000;1{3r1y2JJLv#Cx%>V!Z07*qo IM6N<$g6+A%d;kCd diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00027.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00027.png index 0778ddec01d74c65e67a555163fc32ac9cf6236d..dd15dbb89939c7e979431afa1f5778da7e84c55d 100644 GIT binary patch delta 401 zcmV;C0dD@^0;>a%B!6;AL_t(|ob8#*62l+}MM)?9{}0Y0U1Y`qMYL7aCihG?Aq0GY z54w>P=OG@qx0j>TX^XG(5TA2{(W_3p^hPui+I{`H*vvWNmV>*Wtr?H1q{TiF5$%eS zYqaJvBO1rhk}#L50{@mPM>e^Hn=*Rp5iyr*=~QNb_vrJcM1OvXlypg>n=1q(YT!q! z2bZgTEZXdn%26bV3>Y^0oM>oL)D-#3Y>VC$ZLvDyyz;2sQ%e8yJV=0E` z{P+dE*~Yn=Qh%IC+wk-#9=`!ByX6p(Qi>Q1uL>B&2GVY1H9Gt;y6C8diqzEIC>Ff9 zP`xMTB08r~G-3;#nVkWg`aY|H{GTj#46V5sUpgJD&{J7#0_quGHSuAkC5Yq_mjWX)2oi~wiv=RW0MlI~EhsmXA!ama(EfKpXz9-RQBet#ALKHgWuYmC-h%ePE4 z8n$JI`a#CQUVAXmJWNDLjWrpHkVgUeP9n4IvUMOGR?%u>YikOz3ok6rJ7it1%ji-1keFfh`-P3sKQlVFjE>^80%j@?*U$ezX!5bOOYGJMV zQN3{m?{hbK4$V(o|HMc}+DVis`N9@py7xtlYaeZTZS`+3@qY?guD0+gf0(`op7(pn zpHA)MIt7{GGX||!J1gnF=7|GPA--f@8iZLSy&_EYmgUvLlQz8wPfsua08nGq01uIl zc}5c{m|u&?O5bAqAX*Xs$tw(`436hg_+6RlDKe)ZeylDJdeD>E_n;L>6Q}+Lz47$m zlhf3#h~Nx#CXX)CwNn16eJwuh2_N-qf8EVyLRK*PvO|vWR z!l_j%6uz?tfZl{P;10}czXJdO00000008&o0|~1_`M1*|{Qv*}07*qoM6N<$f}n`p AJ^%m! delta 401 zcmV;C0dD@}1FHj&B!6;AL_t(|ob8#*62l+}MM)?9{}0Y0U1Y`qMYL7aCihG?Aq0GY z54w>P=OG@qx0j>TX^XG(5TA2{(W_3p^hPui+I{`H*vvWNmV>*Wtr?H1q{TiF5$%eS zYqaJvBO1rhk}#L50{@mPM>e^Hn=*Rp5iyr*=~QNb_vrJcM1OvXlypg>n=1q(YT!q! z2bZgTEZXdn%26bV3>Y^0oM>oL)D-#3Y>VC$ZLvDyyz;2sQ%e8yJV=0E` z{P+dE*~Yn=Qh%IC+wk-#9=`!ByX6p(Qi>Q1uL>B&2GVY1H9Gt;y6C8diqzEIC>Ff9 zP`xMTB08r~G-3;#nVkWg`aY|H{GTj#46V5sUpgJD&{J7#0_quGHSuAkC5YQ$i8X+P zM`F%nE8ef)@%i+#!*<>VA8d*%RFjxJ^ zX6)eo)J-La+Aj=0GGdW7i5Mkck{jUeeG=o`M^&!{|0);mP=Doe3orVI`#mUmf0TT8 zawq2{NDQAfaJ}4FM)%#mZ~-jDPs^l5h)uH8gpWLB({53c=H7(e3k(1NqT{R)nnSV;K8}oj8T9h(CIj{`IpRPp_qKs74iDFA8>1(N)A<>-y{fL$Nb_9u4 zK1vg_imS8i7gaOW#s)Wlz`b_kayy-h#46WvCm!`F7E?mP4lI15HbsV5r7W=9&Xx=) zb=OWvE|b$#Dc^O_?IHVmT$E@4`L1wpEvs?g31LOmcB!8<(L_t(|ob8y~lEWYfhDoP={|D~H_99b@oI;Gz?BxGuFS0fQ zK?G%?OY!&qJuk0$cFcu)VX)p=s>fh`-P3sKQlVFjE>^80%j@?*U$ezX!5bOOYGJMV zQN3{m?{hbK4$V(o|HMc}+DVis`N9@py7xtlYaeZTZS`+3@qY?guD0+gf0(`op7(pn zpHA)MIt7{GGX||!J1gnF=7|GPA--f@8iZLSy&_EYmgUvLlQz8wPfsua08nGq01uIl zc}5c{m|u&?O5bAqAX*Xs$tw(`436hg_+6RlDKe)ZeylDJdeD>E_n;L>6Q}+Lz47$m zlhf3#h~Nx#CXX)CwNn16eJwuh2_N-qf8EVyLRK*PvO|vWR z!l_j%6uz?tfZl{P;10}czXJdO00000008&o0|~1_`M1*|{Qv*}07*qoM6N<$g56x) AU;qFB diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00030.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00030.png index f12d6df3266fc964f005594a4523b23e7c611137..e67c683e4899e536c2841d34d04bf86d4943d11c 100644 GIT binary patch delta 293 zcmV+=0owk}1Hb~1B!34<)`A#0gULyFI`00000NkvXXu0mjfo3e;& delta 435 zcmV;k0ZjhD0?h-EB!84iL_t(|ob8#*62l+}MUzhY{~z2%yKrh15HUV*I`>Q$i8X+P zM`F%nE8ef)@%i+#!*<>VA8d*%RFjxJ^ zX6)eo)J-La+Aj=0GGdW7i5Mkck{jUeeG=o`M^&!{|0);mP=Doe3orVI`#mUmf0TT8 zawq2{NDQAfaJ}4FM)%#mZ~-jDPs^l5h)uH8gpWLB({53c=H7(e3k(1NqT{R)nnSV;K8}oj8T9h(CIj{`IpRPp_qKs74iDFA8>1(N)A<>-y{fL$Nb_9u4 zK1vg_imS8i7gaOW#s)Wlz`b_kayy-h#46WvCm!`F7E?mP4lI15HbsV5r7W=9&Xx=) zb=OWvE|b$#Dc^O_?IHVmT$E@4`L1wpEvs?gBf22Ucp;NUdAE!v~P}eF%qk?=z2S2 z_K^M$!Ww1ERs>+W6TM;v-$t~ST3BR!j_PZP!)lBIuAR_PoPXzAe6d+G59cG~$uQBu zpFtE>k^o2bGX-mY)VkBJ@r!Em3LQ1&sz`IN>}@!>iL}`iMZLExJo2WwEoq^rBgiEO zMGIP>TFJP|HnCv_DnEbgCLz4djD4&J_=wt_TTc8TwgN z2Y|kW(E(JVpGUTnGg|^Uk4wh1%zP8z4j2p)08TRV{Fxu9KaxkN|A=QO;Ux+H00000 g00000001cQ1(eLOxu-Q~p#T5?07*qoM6N<$g3soZNB{r; delta 293 zcmV+=0owlQ0>A>0B!34<)`A#0gULyFI`00000NkvXXu0mjfx|)cF diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00032.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00032.png index 4027411b7af1cb28517b1b0c1bc9a5011b174950..c3151dcffbbdceb2674e5d148fcaca645e9e80a1 100644 GIT binary patch delta 327 zcmV-N0l5C@0^$OYB!4MML_t(|ob8xF62l+}MZcZq{s+z?T{vYhXiVA;V)NfBkuV@A z7=a*cE4FpC69afu#{2^z7Trt_$#>17Nx-%uEgs%<$?i&|@`Ij3YXoI{t-2O@rXelX zT$z9&(ck&B3uyMoI+i~ZY1f2Sm*=#2&)4KYC1C8@zZ44_@qdZ>N1201OW@6YnsB+$ z%M#?D12Ly}K-UMmSAz7dE~dOf404&&kF);1EIx03eNa;7zrf zw?w*i>p}avEAjTffkhcOyo#`*gSOfFrlk_#;QJiyz)z7Se`a0BIFrnofNBYvliF=) ze7?WKiLv}KYd`{8Bf22Ucp;NUdAE!v~P}eF%qk?=z2S2 z_K^M$!Ww1ERs>+W6TM;v-$t~ST3BR!j_PZP!)lBIuAR_PoPXzAe6d+G59cG~$uQBu zpFtE>k^o2bGX-mY)VkBJ@r!Em3LQ1&sz`IN>}@!>iL}`iMZLExJo2WwEoq^rBgiEO zMGIP>TFJP|HnCv_DnEbgCLz4djD4&J_=wt_TTc8TwgN z2Y|kW(E(JVpGUTnGg|^Uk4wh1%zP8z4j2p)08TRV{Fxu9KaxkN|A=QO;Ux+H00000 g00000001cQ1(eLOxu-Q~p#T5?07*qoM6N<$g8V|1Y5)KL diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00033.png b/tests/integration/nano/snapshots/nanos/regression_batched_ops/00033.png index c3151dcffbbdceb2674e5d148fcaca645e9e80a1..433736555d7b79aca4f3fdf838bdf1b4c92db921 100644 GIT binary patch delta 471 zcmV;|0Vw|B0`UWoB!9R`L_t(|ob8#-vcn((rvBn#MQ1646{$Vq`VAYbRuA@lps^6rZ<2nUxn}Z-gJHuxkt#*BJ2GFuO;P()j zk-1&HCP_T05K%ea-`0t7wDp#xS^hC@(GkQ&s0aMs1E#t?HS17Nx-%uEgs%<$?i&|@`Ij3YXoI{t-2O@rXelX zT$z9&(ck&B3uyMoI+i~ZY1f2Sm*=#2&)4KYC1C8@zZ44_@qdZ>N1201OW@6YnsB+$ z%M#?D12Ly}K-UMmSAz7dE~dOf404&&kF);1EIx03eNa;7zrf zw?w*i>p}avEAjTffkhcOyo#`*gSOfFrlk_#;QJiyz)z7Se`a0BIFrnofNBYvliF=) ze7?WKiLv}KYd`{8B6{SQ2gnMJB71O%f#Hx^-H4OH7AeBoZ%e9ai!hHG%6}nHzXCvW0$$nsYGhc6 z(T_rnG)`EA_8ffpgJf{SvMmo&R}ni^XVUt(4MAx>Fcv6t`Q$*mhj#7&*yaPwLuf?C zc9telOKRrQGd4uj+hP-$LB1%8Vt{M1pB*&a&krmb%F4*7s(QJ+98PvOkW+dZuk%8@ zdmpljMn1I-?0>$l*w8i`6y$)B_gTy_0>OBFfG0vv0CZBoKuB4)5zO5nFV#m^x-s-?j&xJN zb?Z{ delta 471 zcmV;|0Vw|I1MvfpB!9R`L_t(|ob8#-vcn((rvBn#MQ1646{$Vq`VAYbRuA@lps^6rZ<2nUxn}Z-gJHuxkt#*BJ2GFuO;P()j zk-1&HCP_T05K%ea-`0t7wDp#xS^hC@(GkQ&s0aMs1E#t?HS8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjftyi_; delta 463 zcmV;=0WkiQ1L*^hB!93;L_t(|ob8xFlEfegMM>B6{SQ2gnMJB71O%f#Hx^-H4OH7AeBoZ%e9ai!hHG%6}nHzXCvW0$$nsYGhc6 z(T_rnG)`EA_8ffpgJf{SvMmo&R}ni^XVUt(4MAx>Fcv6t`Q$*mhj#7&*yaPwLuf?C zc9telOKRrQGd4uj+hP-$LB1%8Vt{M1pB*&a&krmb%F4*7s(QJ+98PvOkW+dZuk%8@ zdmpljMn1I-?0>$l*w8i`6y$)B_gTy_0>OBFfG0vv0CZBoKuB4)5zO5nFV#m^x-s-?j&xJN zbvY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000g-rP&!moi>QxeVZ-sRyYo4l6kMeE7Yq( z0dq;E^~+J=eeD0;#e?uU6N`TAUfDQqKXp12&y!f^oGDtr7JrrIXV#leoHKD~l^O1P zo~{OetVJX`0s0J1$Rt5*A>In{6|_VSq}0rq7sw=;E7Sn#pMzqX;cxAuZkQ$XXy19- zdJXejgH7n@jO|?8P$vKY0NPokDyUBp6JovzOWfP!WMrBKbYYTD7kXTroEW;G!H|H# xkbuD~QiONvZ6t2e6axSN00000004l$kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf-l*qh diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00010.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00010.png index d58a3edc056c1790f3bb80538af2a96705513c5d..92b4bce4e0b6ca6910717fd0d8adde36278ae65b 100644 GIT binary patch delta 473 zcmV;~0Ve*&0`miqB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf-l*qh delta 299 zcmV+`0o4BU1I7Z7B!3M_L_t(|ob8xF62l+}0I}2l|G_=9hs;g-rP&!moi>QxeVZ-sRyYo4l6kMeE7Yq( z0dq;E^~+J=eeD0;#e?uU6N`TAUfDQqKXp12&y!f^oGDtr7JrrIXV#leoHKD~l^O1P zo~{OetVJX`0s0J1$Rt5*A>In{6|_VSq}0rq7sw=;E7Sn#pMzqX;cxAuZkQ$XXy19- zdJXejgH7n@jO|?8P$vKY0NPokDyUBp6JovzOWfP!WMrBKbYYTD7kXTroEW;G!H|H# xkbuD~QiONvZ6t2e6axSN00000004l$lo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoLrrB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfqlf24 diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00012.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00012.png index de32f3ce07dff69f81610af590478fccb00eb981..d1f0c52d8077e5a03ec63b54ac67ca3287164e62 100644 GIT binary patch delta 379 zcmV->0fhdg1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1l%xt`qlo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoL6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1m8(r?3D3 delta 379 zcmV->0fhdN1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1k%}t^oi5 diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00014.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00014.png index 9068ab50d49af8af99788f17c6939150c5387fca..ca3d9981762c636f11dddc5cf3ebbb25d718bc9c 100644 GIT binary patch delta 380 zcmV-?0fYXM1D6AkB!6B>L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF00006!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1mDHr?CJ4 diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00015.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00015.png index ca3d9981762c636f11dddc5cf3ebbb25d718bc9c..caae0be866a45f241d0b2e3535081a8da8301096 100644 GIT binary patch delta 378 zcmV-=0fqjT1C;}iB!65FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTXw;JZKo delta 378 zcmV-=0fqji1C;}iB!65FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTX=Si4F9 diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00018.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00018.png index f20965b93a9104857683e8020bb96a3cd236905f..91ba67e9d58f19b59a4f1935d93924c881070be3 100644 GIT binary patch delta 394 zcmV;50d@YL1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1w5o6aWAK delta 388 zcmV-~0ek+W1D^wsB!6Z}L_t(|ob8#>a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1k5It^xo6 delta 394 zcmV;50d@YK1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1i8{6951J diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00020.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00020.png index e2e233f0147f46c5d8f5b844bfde76b129062a91..972f178b3e37735865d0e4ee44873ed4fd2c9f4a 100644 GIT binary patch delta 371 zcmV-(0gV2h1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1ilns?Goa delta 387 zcmV-}0et?B1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1i>4t?U2* diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00021.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00021.png index 972f178b3e37735865d0e4ee44873ed4fd2c9f4a..083033d454e290bc2cd0ed3d7c9958ef2c288adc 100644 GIT binary patch delta 379 zcmV->0fhdJ1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jKcwLJg; delta 371 zcmV-(0gV2Z1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1iCus>T2S diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00022.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00022.png index 083033d454e290bc2cd0ed3d7c9958ef2c288adc..9c2054a609aabadd8aa507d9098cac32d83ad4bb 100644 GIT binary patch delta 374 zcmV-+0g3*W1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+n0fhdM1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jX+wLky> diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00023.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00023.png index 9c2054a609aabadd8aa507d9098cac32d83ad4bb..08b20a8371c78697a4e4a0915c8987ccfbb0132d 100644 GIT binary patch delta 363 zcmV-x0hIoc1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1g%Qt?~c> delta 374 zcmV-+0g3*G1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+nc_W%F@ diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00024.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00024.png index 08b20a8371c78697a4e4a0915c8987ccfbb0132d..afa9173a2db50134265726a18b83f78c125c7317 100644 GIT binary patch delta 413 zcmV;O0b>4!1GfW^B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfOU%Qn delta 363 zcmV-x0hIo?1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1ivot{4CS diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00025.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00025.png index afa9173a2db50134265726a18b83f78c125c7317..7226a9e230b3e9732865ded1fe0d639b690029e9 100644 GIT binary patch delta 287 zcmV+)0pR|(1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEj5T0=EN@B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfo)p8~ diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00026.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00026.png index 7226a9e230b3e9732865ded1fe0d639b690029e9..dc7f9b18a8211268f0dd96c032fd617a091a2c72 100644 GIT binary patch delta 383 zcmV-_0f7Fx0-6JmB!6K^L_t(|ob8#>4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1g-^wG{vW delta 287 zcmV+)0pR|c1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEjJY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn00004uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1n?iwC?}_ diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00028.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00028.png index 182640db43ff9724045c67199b76083d44b6dd53..f13eb25ed587c0b4a16f9b23cb556d08e40e6259 100644 GIT binary patch delta 365 zcmV-z0h0cc1Be5VB!5pyL_t(|ob8xF5`!QNMYUt^e_$8wf@vm%1W+M@{cpOc82At* zK-R^L&mKLlZ$IgQc`0SWQ*F7?@1MQz&}ur6uqj5KKH_~M-Oz{divCpEa06b89;u3| zE}CsiXgO{+UIEVD4}A*1C3c5!jb+2V#vu=;2BN97<=z1xZhxPx03Yv*;blgve#?g> zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfhexC( delta 376 zcmV-;0f+vG1Cs-gB!5~-L_t(|ob8y)62l+}MUzhY{~w%1x^RX;#77j#qxVb~jX|$s zL}gvvIQHmq{rXAYn2%B>JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000 zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfo)@Gw diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00030.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00030.png index 37c456b81b45dae7b9f1c9fed698cb98d4d81796..873a1b0ad917883e58aab9725bc9765a1c6e0d27 100644 GIT binary patch delta 377 zcmV-<0fzpg1C#@hB!62;L_t(|ob8y)4ul{KMRDT%{|CF6S&%fPJXLOe+mhGi>(}*-`4sAmrRH*>-G3W)Y9j;4SPMd)Hqv8~e&ZP8Cn*fdXaU_yUZqK~ zccXSLQFE#`-2u+lk7J5YNX=nPQ;Ve_^yHc*Ih@n_W+|? znfNRr@Zud}N&y@pN~s8E+Ht8Hxa1}U0vtB8RK!GTDFjog zFSJHDTz6i419G+0f~nbcaqTMUDnI6hV7R-WiRW&U;lY^+sr-r4mj+mr}E&T6G8|fgb+dqAq2x8 XXmI^j`r+?o00000NkvXXu0mjf8$7e= delta 393 zcmV;40e1eB1ET|wB!6m2L_t(|ob8y=4#OY_McbwO{}1j%_h3R$!Ky{7**)3Ax*}Iu z!OFh5ah=iS{`Hfdn2+#V5-D3=jQe$tU0TfqG7iDWGe&$)q#NcCZqb)Y8*acy(IpKL z)f2b21kbVCI0KxcALbN3TO5ugG@1>M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000p-(U@stE)_m9`sINU%bz?xxT-6yaFB#Im$yH8*V$QEbQ!QCgK zV|M_4bFRt%QeT(7OeRml^{v>(lv`*cz=e#mpi)xrKH7k- z$<9}kV{Tr##c6Z`X5tv`JG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^ z)LIqCmRxHQ=E~~lRE6BBD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S O0000apL^{2fLVAkTj({Rc?Lcp143P1&XxLCAjh1lGo+y z*Y%D06zYtn=5nFke;amcBLm1-3qqbY(qoc-;~3&6DGbVJ0o_VorAe`OqjoM)bE-Do z0nXNsV~S5m&0$PalhIbwhy`;2qbk>ob^xhHCnZGZ7!-ql5;VOs`jhjbsT zwGY7Vg_<|ejL3}ibw*|`sgY9`lx>hla!!R4DrxB|KjwvCxVxZ<=WdhX!I=rE{E8TW_S%o)20{2RCdrIjRHSlb5Dt~N zioW;fY3h>&B;Wm#@SC diff --git a/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00032.png b/tests/integration/nano/snapshots/nanos/test_ensure_always_clearsign/00032.png deleted file mode 100644 index 7e0e238204773a5ce6d51d5a1ce25147473482ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000ch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDekz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf+Vkz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf+Vch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDe-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf1%&5& diff --git a/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_added_at_the_end/00012.png b/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_added_at_the_end/00012.png index 6f75a6599218fd6ca395e5f014ad540381528c05..9fefcab8d139572d5628671f1d325c0a77df9f50 100644 GIT binary patch delta 439 zcmV;o0Z9Ja0?`AIB!8GmL_t(|ob8#xb^U3i-Fk_Sl0ps8|K8WUh3 zfiNDI41T`5ug7gw)QW_?`4Ywk_k}sdYsc+?L47d&Pu8v^Q!%Dj;4mTtwiJ662CEa%(ki`{d4sxhz`gLh*e#2 zRZPyh5Chs(RD@4I2PpPobj3pLfy<_-*CP{`Bzyn=GX&KWmiJ#D5WSi6$H|jM1iv!aXum5bw+U+0)42-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@J$|1q#bkA<>sFr2VTKwxXdnpk&2peN&+(3$ ze%upkq6s^@?|)M6aOX0FA$mO=e_A$!3&SsB02=@R001C~f7DX#t{XFIasU7T M07*qoM6N<$g5xsG+W-In delta 439 zcmV;o0Z9J51JMJJB!8GmL_t(|ob8#xb^U3i-Fk_Sl0ps8|K8WUh3 zfiNDI41T`5ug7gw)QW_?`4Ywk_k}sdYsc+?L47d&Pu8v^Q!%Dj;4mTtwiJ662CEa%(ki`{d4sxhz`gLh*e#2 zRZPyh5Chs(RD@4I2PpPobj3pLfy<_-*CP{`Bzyn=GX&KWmiJ#D5WSi6$H|jM1iv!aXum5bw+U+0)42CV3vB!09HUP z&?-QxwIIL>Q12xULVy8CsSLaTAXZhP|9C*yFAMEQLi_PBgMN52WU&6`Eb+_p1ak^% zTkQpB@CS^l00000 LNkvXXu0mjfw~%;& delta 419 zcmV;U0bKr|0=xr|BYy#dNkla$M*5s%-wsJJBWqKWkXgMVcprBbO+fb}$m_)A{T zZ!~|8`UIpypF}GMi4C^6SD)Gge8TSSya9>vD(=wcF+8 zVA(p-ClaNoh(Pp!aJK-yMk}hHC*d1JUp;=GF2!VZsq0pr%VCBZIcOjV^38IfHqY^n zntt39YN81{yMOOe?sBsA(5ipsIC^vGjM&s8l{yh(_Wtb5n&qiu@Ni+}#-wE!=Zx4` zEaZr7Ghk7cva8KVMnnC^PX+Cx2(==I2ilS9G-#ualGvH6ksqD~QNoAO|0J+Wzc&Hx z(@+`8k+FV}cmD%G3ula@t?EB%dm(x~9DiCigA2niVjKVf0000WiGS2m?XDX$YH|Po N002ovPDHLkV1kqc%&GtY diff --git a/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_removed_inside/00009.png b/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_removed_inside/00009.png index 92b4bce4e0b6ca6910717fd0d8adde36278ae65b..218dc0511b0c69b94466f46b39ae4f591098f8dc 100644 GIT binary patch delta 339 zcmV-Z0j&P>1MUKlB!4wYL_t(|ob8y)5`!QNMWLhr|G{0 zCx{|O>zBjA`>Fpu#DnxbGmA8iYcY=dPoB=q^DNdSXH@Ig!hh1d6ulY5ITKA%Vz}qL zodqiE5W=AXcnvzlNf3KDehSAH^oSe;Z8IY_5GR>a)_^cR2kJJ1x^}A@;u6}r?>ueY zf}b|n1&_|XJJ&u~1pojXP;V*yD+Exe#OqurNy=F!7JbT0N@u7Y+M$(Bx#=AP$!3=y zp?z!g7P2b}bxcqaH|p_$vkDMV*MleXgaoL)qJHD%8=M1f##04|w;kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfD4*w! diff --git a/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_removed_inside/00010.png b/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_removed_inside/00010.png index 218dc0511b0c69b94466f46b39ae4f591098f8dc..9fefcab8d139572d5628671f1d325c0a77df9f50 100644 GIT binary patch delta 439 zcmV;o0Z9Jt0?`AIB!8GmL_t(|ob8#xb^U3i-Fk_Sl0ps8|K8WUh3 zfiNDI41T`5ug7gw)QW_?`4Ywk_k}sdYsc+?L47d&Pu8v^Q!%Dj;4mTtwiJ662CEa%(ki`{d4sxhz`gLh*e#2 zRZPyh5Chs(RD@4I2PpPobj3pLfy<_-*CP{`Bzyn=GX&KWmiJ#D5WSi6$H|jM1iv!aXum5bw+U+0)42(1w delta 339 zcmV-Z0j&Pf1MUKlB!4wYL_t(|ob8y)5`!QNMWLhr|G{0 zCx{|O>zBjA`>Fpu#DnxbGmA8iYcY=dPoB=q^DNdSXH@Ig!hh1d6ulY5ITKA%Vz}qL zodqiE5W=AXcnvzlNf3KDehSAH^oSe;Z8IY_5GR>a)_^cR2kJJ1x^}A@;u6}r?>ueY zf}b|n1&_|XJJ&u~1pojXP;V*yD+Exe#OqurNy=F!7JbT0N@u7Y+M$(Bx#=AP$!3=y zp?z!g7P2b}bxcqaH|p_$vkDMV*MleXgaoL)qJHD%8=M1f##04|w;J$|1q#bkA<>sFr2VTKwxXdnpk&2peN&+(3$ ze%upkq6s^@?|)M6aOX0FA$mO=e_A$!3&SsB02=@R001C~f7DX#t{XFIasU7T M07*qoM6N<$g5xsG+W-In delta 439 zcmV;o0Z9J51JMJJB!8GmL_t(|ob8#xb^U3i-Fk_Sl0ps8|K8WUh3 zfiNDI41T`5ug7gw)QW_?`4Ywk_k}sdYsc+?L47d&Pu8v^Q!%Dj;4mTtwiJ662CEa%(ki`{d4sxhz`gLh*e#2 zRZPyh5Chs(RD@4I2PpPobj3pLfy<_-*CP{`Bzyn=GX&KWmiJ#D5WSi6$H|jM1iv!aXum5bw+U+0)42CV3vB!09HUP z&?-QxwIIL>Q12xULVy8CsSLaTAXZhP|9C*yFAMEQLi_PBgMN52WU&6`Eb+_p1ak^% zTkQpB@CS^l00000 LNkvXXu0mjfw~%;& delta 419 zcmV;U0bKr|0=xr|BYy#dNkla$M*5s%-wsJJBWqKWkXgMVcprBbO+fb}$m_)A{T zZ!~|8`UIpypF}GMi4C^6SD)Gge8TSSya9>vD(=wcF+8 zVA(p-ClaNoh(Pp!aJK-yMk}hHC*d1JUp;=GF2!VZsq0pr%VCBZIcOjV^38IfHqY^n zntt39YN81{yMOOe?sBsA(5ipsIC^vGjM&s8l{yh(_Wtb5n&qiu@Ni+}#-wE!=Zx4` zEaZr7Ghk7cva8KVMnnC^PX+Cx2(==I2ilS9G-#ualGvH6ksqD~QNoAO|0J+Wzc&Hx z(@+`8k+FV}cmD%G3ula@t?EB%dm(x~9DiCigA2niVjKVf0000WiGS2m?XDX$YH|Po N002ovPDHLkV1kqc%&GtY diff --git a/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_removed_inside/00013.png b/tests/integration/nano/snapshots/nanos/test_parsing_errors/one_byte_removed_inside/00013.png deleted file mode 100644 index fda55f50120668ceacffb79c3b669070627c9ad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmV+*0pI?KP)CV3vB!09HUP&?-QxwIIL>Q12xULVy8CsSLaTAXZhP z|9C*yFAMEQLi_PBgLpDzu>R&O@yqiBa|&u(?FDD!?!3!Yyx zU&L(lQOk1FIx|=w><~LD2Z;kvYZL44(k8-(#A`wI$k%z4#1-&_m3XN&v3CV006BL5 m7v<`Z#9fFGLI@$`57_~1yHn5b2aKu!0000g-rP&!moi>QxeVZ-sRyYo4l6kMeE7Yq( z0dq;E^~+J=eeD0;#e?uU6N`TAUfDQqKXp12&y!f^oGDtr7JrrIXV#leoHKD~l^O1P zo~{OetVJX`0s0J1$Rt5*A>In{6|_VSq}0rq7sw=;E7Sn#pMzqX;cxAuZkQ$XXy19- zdJXejgH7n@jO|?8P$vKY0NPokDyUBp6JovzOWfP!WMrBKbYYTD7kXTroEW;G!H|H# xkbuD~QiONvZ6t2e6axSN00000004l$kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf-l*qh diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00010.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00010.png index d58a3edc056c1790f3bb80538af2a96705513c5d..92b4bce4e0b6ca6910717fd0d8adde36278ae65b 100644 GIT binary patch delta 473 zcmV;~0Ve*&0`miqB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf-l*qh delta 299 zcmV+`0o4BU1I7Z7B!3M_L_t(|ob8xF62l+}0I}2l|G_=9hs;g-rP&!moi>QxeVZ-sRyYo4l6kMeE7Yq( z0dq;E^~+J=eeD0;#e?uU6N`TAUfDQqKXp12&y!f^oGDtr7JrrIXV#leoHKD~l^O1P zo~{OetVJX`0s0J1$Rt5*A>In{6|_VSq}0rq7sw=;E7Sn#pMzqX;cxAuZkQ$XXy19- zdJXejgH7n@jO|?8P$vKY0NPokDyUBp6JovzOWfP!WMrBKbYYTD7kXTroEW;G!H|H# xkbuD~QiONvZ6t2e6axSN00000004l$lo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoLrrB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfqlf24 diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00012.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00012.png index de32f3ce07dff69f81610af590478fccb00eb981..d1f0c52d8077e5a03ec63b54ac67ca3287164e62 100644 GIT binary patch delta 379 zcmV->0fhdg1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1l%xt`qlo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoL6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1m8(r?3D3 delta 379 zcmV->0fhdN1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1k%}t^oi5 diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00014.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00014.png index 9068ab50d49af8af99788f17c6939150c5387fca..ca3d9981762c636f11dddc5cf3ebbb25d718bc9c 100644 GIT binary patch delta 380 zcmV-?0fYXM1D6AkB!6B>L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF00006!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1mDHr?CJ4 diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00015.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00015.png index ca3d9981762c636f11dddc5cf3ebbb25d718bc9c..caae0be866a45f241d0b2e3535081a8da8301096 100644 GIT binary patch delta 378 zcmV-=0fqjT1C;}iB!65FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTXw;JZKo delta 378 zcmV-=0fqji1C;}iB!65FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTX=Si4F9 diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00018.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00018.png index f20965b93a9104857683e8020bb96a3cd236905f..91ba67e9d58f19b59a4f1935d93924c881070be3 100644 GIT binary patch delta 394 zcmV;50d@YL1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1w5o6aWAK delta 388 zcmV-~0ek+W1D^wsB!6Z}L_t(|ob8#>a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1k5It^xo6 delta 394 zcmV;50d@YK1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1i8{6951J diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00020.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00020.png index e2e233f0147f46c5d8f5b844bfde76b129062a91..972f178b3e37735865d0e4ee44873ed4fd2c9f4a 100644 GIT binary patch delta 371 zcmV-(0gV2h1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1ilns?Goa delta 387 zcmV-}0et?B1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1i>4t?U2* diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00021.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00021.png index 972f178b3e37735865d0e4ee44873ed4fd2c9f4a..083033d454e290bc2cd0ed3d7c9958ef2c288adc 100644 GIT binary patch delta 379 zcmV->0fhdJ1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jKcwLJg; delta 371 zcmV-(0gV2Z1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1iCus>T2S diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00022.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00022.png index 083033d454e290bc2cd0ed3d7c9958ef2c288adc..9c2054a609aabadd8aa507d9098cac32d83ad4bb 100644 GIT binary patch delta 374 zcmV-+0g3*W1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+n0fhdM1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jX+wLky> diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00023.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00023.png index 9c2054a609aabadd8aa507d9098cac32d83ad4bb..08b20a8371c78697a4e4a0915c8987ccfbb0132d 100644 GIT binary patch delta 363 zcmV-x0hIoc1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1g%Qt?~c> delta 374 zcmV-+0g3*G1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+nc_W%F@ diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00024.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00024.png index 08b20a8371c78697a4e4a0915c8987ccfbb0132d..afa9173a2db50134265726a18b83f78c125c7317 100644 GIT binary patch delta 413 zcmV;O0b>4!1GfW^B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfOU%Qn delta 363 zcmV-x0hIo?1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1ivot{4CS diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00025.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00025.png index afa9173a2db50134265726a18b83f78c125c7317..7226a9e230b3e9732865ded1fe0d639b690029e9 100644 GIT binary patch delta 287 zcmV+)0pR|(1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEj5T0=EN@B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfo)p8~ diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00026.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00026.png index 7226a9e230b3e9732865ded1fe0d639b690029e9..dc7f9b18a8211268f0dd96c032fd617a091a2c72 100644 GIT binary patch delta 383 zcmV-_0f7Fx0-6JmB!6K^L_t(|ob8#>4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1g-^wG{vW delta 287 zcmV+)0pR|c1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEjJY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn00004uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1n?iwC?}_ diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00028.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00028.png index 182640db43ff9724045c67199b76083d44b6dd53..f13eb25ed587c0b4a16f9b23cb556d08e40e6259 100644 GIT binary patch delta 365 zcmV-z0h0cc1Be5VB!5pyL_t(|ob8xF5`!QNMYUt^e_$8wf@vm%1W+M@{cpOc82At* zK-R^L&mKLlZ$IgQc`0SWQ*F7?@1MQz&}ur6uqj5KKH_~M-Oz{divCpEa06b89;u3| zE}CsiXgO{+UIEVD4}A*1C3c5!jb+2V#vu=;2BN97<=z1xZhxPx03Yv*;blgve#?g> zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfhexC( delta 376 zcmV-;0f+vG1Cs-gB!5~-L_t(|ob8y)62l+}MUzhY{~w%1x^RX;#77j#qxVb~jX|$s zL}gvvIQHmq{rXAYn2%B>JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000 zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfo)@Gw diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00030.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00030.png index 37c456b81b45dae7b9f1c9fed698cb98d4d81796..873a1b0ad917883e58aab9725bc9765a1c6e0d27 100644 GIT binary patch delta 377 zcmV-<0fzpg1C#@hB!62;L_t(|ob8y)4ul{KMRDT%{|CF6S&%fPJXLOe+mhGi>(}*-`4sAmrRH*>-G3W)Y9j;4SPMd)Hqv8~e&ZP8Cn*fdXaU_yUZqK~ zccXSLQFE#`-2u+lk7J5YNX=nPQ;Ve_^yHc*Ih@n_W+|? znfNRr@Zud}N&y@pN~s8E+Ht8Hxa1}U0vtB8RK!GTDFjog zFSJHDTz6i419G+0f~nbcaqTMUDnI6hV7R-WiRW&U;lY^+sr-r4mj+mr}E&T6G8|fgb+dqAq2x8 XXmI^j`r+?o00000NkvXXu0mjf8$7e= delta 393 zcmV;40e1eB1ET|wB!6m2L_t(|ob8y=4#OY_McbwO{}1j%_h3R$!Ky{7**)3Ax*}Iu z!OFh5ah=iS{`Hfdn2+#V5-D3=jQe$tU0TfqG7iDWGe&$)q#NcCZqb)Y8*acy(IpKL z)f2b21kbVCI0KxcALbN3TO5ugG@1>M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000p-(U@stE)_m9`sINU%bz?xxT-6yaFB#Im$yH8*V$QEbQ!QCgK zV|M_4bFRt%QeT(7OeRml^{v>(lv`*cz=e#mpi)xrKH7k- z$<9}kV{Tr##c6Z`X5tv`JG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^ z)LIqCmRxHQ=E~~lRE6BBD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S O0000apL^{2fLVAkTj({Rc?Lcp143P1&XxLCAjh1lGo+y z*Y%D06zYtn=5nFke;amcBLm1-3qqbY(qoc-;~3&6DGbVJ0o_VorAe`OqjoM)bE-Do z0nXNsV~S5m&0$PalhIbwhy`;2qbk>ob^xhHCnZGZ7!-ql5;VOs`jhjbsT zwGY7Vg_<|ejL3}ibw*|`sgY9`lx>hla!!R4DrxB|KjwvCxVxZ<=WdhX!I=rE{E8TW_S%o)20{2RCdrIjRHSlb5Dt~N zioW;fY3h>&B;Wm#@SC diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00032.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00032.png index 7e0e238204773a5ce6d51d5a1ce25147473482ed..970b15944a929cb54b84d1187fb0c49d776ce161 100644 GIT binary patch delta 314 zcmV-A0mc551JweMB!3)9L_t(|ob8#x4#OY}L(^&d{}1Ls4@?M=Pz9t78|9tWF0E2K zKm;N|5CnmToFu2ke^GhuPGBBWWkTr-R0dq1?~hLIdRYT_pfW%#517>#k!yDXOXvxQ zQ+?qZ0fkO(TJ?q1fP>&PV6+GmLTEs{>W=y%9@q@fJrB7DmVW`TUoz@AnLSVjW- znCXG%?1iv`4kFawPk8Wm)K5CEhTu`_NS7vBQwUxeE?3ynj-;PsRXz)wK|C`Xik5Cp+qZZyP&s1Bsn{Qv*} M07*qoM6N<$f>eo&3;+NC delta 377 zcmV-<0fzq70+a)gB!62;L_t(|ob8y+j>8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfj%&5e diff --git a/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00033.png b/tests/integration/nano/snapshots/nanos/test_regression_continue_after_reject/reject_signing/00033.png deleted file mode 100644 index 970b15944a929cb54b84d1187fb0c49d776ce161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmV-b0jmCqP)W-nCXG%?1iv`4kFawPk8Wm)K5CEhTv2Gq0-vaAjgxfa@jYGiT n^^^<1PeB1FN0fgM1i@ZzG{l9d4y4un00000NkvXXu0mjf06&f| diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00009.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00009.png index 92b4bce4e0b6ca6910717fd0d8adde36278ae65b..d58a3edc056c1790f3bb80538af2a96705513c5d 100644 GIT binary patch delta 299 zcmV+`0o4BU1I7Z7B!3M_L_t(|ob8xF62l+}0I}2l|G_=9hs;g-rP&!moi>QxeVZ-sRyYo4l6kMeE7Yq( z0dq;E^~+J=eeD0;#e?uU6N`TAUfDQqKXp12&y!f^oGDtr7JrrIXV#leoHKD~l^O1P zo~{OetVJX`0s0J1$Rt5*A>In{6|_VSq}0rq7sw=;E7Sn#pMzqX;cxAuZkQ$XXy19- zdJXejgH7n@jO|?8P$vKY0NPokDyUBp6JovzOWfP!WMrBKbYYTD7kXTroEW;G!H|H# xkbuD~QiONvZ6t2e6axSN00000004l$kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf-l*qh diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00010.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00010.png index d58a3edc056c1790f3bb80538af2a96705513c5d..92b4bce4e0b6ca6910717fd0d8adde36278ae65b 100644 GIT binary patch delta 473 zcmV;~0Ve*&0`miqB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf-l*qh delta 299 zcmV+`0o4BU1I7Z7B!3M_L_t(|ob8xF62l+}0I}2l|G_=9hs;g-rP&!moi>QxeVZ-sRyYo4l6kMeE7Yq( z0dq;E^~+J=eeD0;#e?uU6N`TAUfDQqKXp12&y!f^oGDtr7JrrIXV#leoHKD~l^O1P zo~{OetVJX`0s0J1$Rt5*A>In{6|_VSq}0rq7sw=;E7Sn#pMzqX;cxAuZkQ$XXy19- zdJXejgH7n@jO|?8P$vKY0NPokDyUBp6JovzOWfP!WMrBKbYYTD7kXTroEW;G!H|H# xkbuD~QiONvZ6t2e6axSN00000004l$lo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoLrrB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjfqlf24 diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00012.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00012.png index de32f3ce07dff69f81610af590478fccb00eb981..d1f0c52d8077e5a03ec63b54ac67ca3287164e62 100644 GIT binary patch delta 379 zcmV->0fhdg1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1l%xt`qlo?KaVN@Qt1xinwAXr8izbs3kX%UX72z{>VIb|AjbP*dY##--|~`) zPRG8Cs~^gB@M%48G*7gm0cS>L#?~1bTS_OFA*fm)kK~?y&kS-vihT$4T@M4%>IR1Q z68V{0R2f&|Q!D@g#IYJo`@&oskJPG_!&}vP)1t+QsuDiQQj+l#Hq>^w9GS!V1!P)> z2cnUevO+kueSg&Vos(%%OWzc=yzGRF`RacdF^1QNO)rV9W48i^o7@XaypyIq_wU+q zv>$Zx70+SQ&efCM3;2&?jBtFCaB3tsr#B>y5zS4j3h#*Dk@|d=e%dOu&H;Y&zx)ry pC-K}34*&oF00000003P10n9o9OMrVEo&W#<07*qoL6!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1m8(r?3D3 delta 379 zcmV->0fhdN1C|4jB!68=L_t(|ob8y)5`!QNMYUu9|ASrF1v8lt!b?M-?LFh7N`PxB z31r{gxX$QyfBQ|nFfZkq@RThR{eGQeU#&$z!l4*>`iN_yd4q<~L_ZpBxB>4)x701` z6grk|hWa612S=`9;PgZ;8gN={TIPCUV@vGhI0PjNisCNUy zdx`u^PgI+s_@`I^0PyDat})jd4AlLr8ooURJVq-;IMbMy#A((rn@tsvlp+ktl@P>3 zexMb`Tg^M=R&;X#~Ubn8`Q&?YFKo1B(Kg{$GaJm2h0000000000 Z2tFcj`D!_`X_Ei|002ovPDHLkV1k%}t^oi5 diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00014.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00014.png index 9068ab50d49af8af99788f17c6939150c5387fca..ca3d9981762c636f11dddc5cf3ebbb25d718bc9c 100644 GIT binary patch delta 380 zcmV-?0fYXM1D6AkB!6B>L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF00006!sag^DXop+t zC5VfBXRF=X6>td^%rt6!g+_9)Hv>d2(y7Tam}hia0XGP> V@nk2cG@Jkc002ovPDHLkV1mDHr?CJ4 diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00015.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00015.png index ca3d9981762c636f11dddc5cf3ebbb25d718bc9c..caae0be866a45f241d0b2e3535081a8da8301096 100644 GIT binary patch delta 378 zcmV-=0fqjT1C;}iB!65FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|L_t(|ob8#*5`!QNMYUu9|ASrF1)WR?4?&WM<2}kW89D3_R(4dBy1TY&lqt{G;YukZqb)U8*adR(Is`s zjxOBl5F^xk!54O?`!{LciHsG|_w2U=kqe~p*I0YpWz0~Hs+O6IRDx(vn89=+}!TdAHHqcRqMh(z~ zPRHIMW4<5YW#|>*mi!}ZvIXt(^e_E$;4EWye2(3pA_FPt#oYbs{h34t0000000000 a@DhHe*zs^pt1UJF0000~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTXw;JZKo delta 378 zcmV-=0fqji1C;}iB!65FZ~?AGkEGJ{ zF3ip)TQ1F(GaxwoIi~zeWjaJ^dNMp~9LiuVAWYSky$e8TpMTAOnCy%0DZOoe%coo@ zin@$z9?E&}?7eVwPxPt*$0B3#bw_3{Ws=JhR85edWY4^325Ufy9RvEVhlS|u28L^i z^_g0lGOolgu>b&|a?CNK>{Z03TWFoCiMssogykK;C90F~eR_wZS(ZJ7*V&vj0K>?1 zf!<|a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*~Tnw|}h8iyiS8z@(`=ja3={eQC+kQ06NddAx}=klp8 zjE1&NXdL7^IC>8PyC-_tfHPw=)7KRnUu2MF3aS>!PqJp*3xhpi%N+xn*TY0~_5+5u zQu{OAY1)L6zr_LofXVLZ%s%5N1K#RXX0+{97rpvNf|5C^ldvP|)avebNb`Vpi;_OB z127b18yJg*-+$x>;M(nEP<)lFNUyFiX;wF>&#uF7N5hG)k_$wppymwy+R5$2C~1|W zy`VbRB7UwDpd@kt3ja~w2qQ8D&7dlP&8+qH_|;=?%->KYOOsQGpK+d}L=vBZ76F-X q%sK&DM+pD`00000008i3d;kor>C^WkB}f1O002ovP6b4+LSTX=Si4F9 diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00018.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00018.png index f20965b93a9104857683e8020bb96a3cd236905f..91ba67e9d58f19b59a4f1935d93924c881070be3 100644 GIT binary patch delta 394 zcmV;50d@YL1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1w5o6aWAK delta 388 zcmV-~0ek+W1D^wsB!6Z}L_t(|ob8#>a)dAlMYXg2{}0}W?L%f50t90Un0D@&eOQ%{ zD+XfXd6e;acZcV9UDq4)WtCm~j_;chQ67i$|# zi4hM#Zvz|?p?&cUoTT9=`C@oML!go;xqOEk?J-Q6=_Yy|drL!xl2xiokU2t^ojgvQ zlJYqq#Lo^-B1nn#JpdF^l>sw|-9WQyEsr?8#o{Dos*@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1k5It^xo6 delta 394 zcmV;50d@YK1Ed3xB!6p3L_t(|ob8z14udcVg}Y^Y{|Da1cF}}T`eW&UsySbFF_pG> z6tFx}7~fBE_;|-HePW)Cb3!RwHtPQU_}qgP=C(PA|OV6aeITiZNAH@ zB?be>Hm*99aq#M0a9p0~WdqKP&CFW=*w|8vT&AEZKrYESbig5Wtoal$~00000NkvXXt^-0~g1i8{6951J diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00020.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00020.png index e2e233f0147f46c5d8f5b844bfde76b129062a91..972f178b3e37735865d0e4ee44873ed4fd2c9f4a 100644 GIT binary patch delta 371 zcmV-(0gV2h1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1ilns?Goa delta 387 zcmV-}0et?B1D*qrB!6W|L_t(|ob8z14#OY_g}Y^Y{|D~Hc40z5k@|z!Cg;m8){2U( z96DY{7{60ozP@o=-@FN>5f8{_^v*B-6Kfr5`>6d5D#6YZOPNJI3c(S{rFS#(KL z)ZMdXeMu|JWn~5gM?d+LK8FlP7Mhw3j~a&}SQ=zYl`F3n0DrkY%Yc~ZXU8*6t3JzJ zTNo2wHg4I*>(w`vWvcnb((T+mhF{UWK6&T@Lj6;K8yC*uta(F}(nZcMYK4 z)-EO;2=4_fF2YYF_BU{qpkq!1)Vj*aBtosLF0nJTXopPQiI}c^qYoZHg1{Kt-?#t( h000000000mz#m&$=ZI+Ip*8>j002ovPDHLkV1i>4t?U2* diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00021.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00021.png index 972f178b3e37735865d0e4ee44873ed4fd2c9f4a..083033d454e290bc2cd0ed3d7c9958ef2c288adc 100644 GIT binary patch delta 379 zcmV->0fhdJ1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jKcwLJg; delta 371 zcmV-(0gV2Z1C9fbB!5*&L_t(|ob8#*5`!QNMX_W5|ASrF1=CCj;h~a1JNHZ%6$62* zB!F9R<2;hf?d|7!VO~m^P--j_bw3Z=q4jhiV^@qkHR63Dzp)ST7X9h8;Rd`GT~Za* zyJ&VSvE{VcbOt!9ANv%4A(cZ&Q?lWzaY(`3Ks1%NY#jj7_J7$7@KIk3uQFQoUB2X^ zQn7AhszW*t_R%%H?=ztHx*3SBE?{^q zk)NqVwK2s%#R34piqvDS2+DlPm{+{LNNu{V`yGUK6ydfoojnslJISezD)fySnvP<000000001>!UrMq-FRzV R3%&pV002ovPDHLkV1iCus>T2S diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00022.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00022.png index 083033d454e290bc2cd0ed3d7c9958ef2c288adc..9c2054a609aabadd8aa507d9098cac32d83ad4bb 100644 GIT binary patch delta 374 zcmV-+0g3*W1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+n0fhdM1C|4jB!68=L_t(|ob8yw4#OY_hV9b5{{#219ZU#(<^Qt7s)&dR z>XyRz9L4AMj_Z11UX?Q8DO+yz`{(c-+K2&)y&@FpBW@G*n{CKd^k-0p3-DI-NlmJ~ z3$?an&86CM2LyXR+mwH)bcb+FONM)mLmt!uLY3C+9RN!GY<~yDcwY?fWVF?_e5s3* zhUYS_ekk|B-l}lyo@hk_&WOxNUo$ecluj-~klG-RWKF+kIyoT4&H=6KZXmjPfZ?q~ zex{PDj4Sae761U;`T3aGs%@PSdAU~NXGUVFLYOz5Jk(7%fJG9~xEY?w({ut_Zw8`} z-(ZDsvN%L8VsyqB(-R<8hj^<=y$fx341;^z+YC4SL(pWD)Hml_%n*9)Cam@xZ4Nzn z-HVAC)&mKd0MKSS1c@iSYC;RR=)0P+`V(2qOZrpHxClbfKe5QtTf__i0000000000 ZXukGv<;0kBti}KU002ovPDHLkV1jX+wLky> diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00023.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00023.png index 9c2054a609aabadd8aa507d9098cac32d83ad4bb..08b20a8371c78697a4e4a0915c8987ccfbb0132d 100644 GIT binary patch delta 363 zcmV-x0hIoc1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1g%Qt?~c> delta 374 zcmV-+0g3*G1CaxeB!5^*L_t(|ob8!O4#OY}MUyJM|ADh;7f6;dbFmGn{!%y%r!E@|39s$nL51PX7h{GX5Q?lVv<4^=s1K}$5Y@GmN|9@-*_(WfHuhQG>yFAoH zrDEO2G!F4NxJow+nc_W%F@ diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00024.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00024.png index 08b20a8371c78697a4e4a0915c8987ccfbb0132d..afa9173a2db50134265726a18b83f78c125c7317 100644 GIT binary patch delta 413 zcmV;O0b>4!1GfW^B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfOU%Qn delta 363 zcmV-x0hIo?1BL^TB!5jwL_t(|ob8yw4#OY_hTElk{|D}&JD3naw00`m_qDu^)o#&AEQl0sx1TKew}@XR^mX!VF-D~i2Fo#gAd^q{V9~;0=ySJQWw*@ zQrniGS*n#Qz&ZNCr|{ckI8_#=wNq8)eYLwd1Hmq-srLx@wbMav6{WW4GW~8MVRE%o5T$O000000001BS$^Hs>t^^1iv0ip002ov JPDHLkV1ivot{4CS diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00025.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00025.png index afa9173a2db50134265726a18b83f78c125c7317..7226a9e230b3e9732865ded1fe0d639b690029e9 100644 GIT binary patch delta 287 zcmV+)0pR|(1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEj5T0=EN@B!7NML_t(|ob8yw4#OY_hV9b5{{!!^9ZU!cQf;GkkwM9Tw zM3*#;@27ZN-t$afn3wXdij*%W#{K(=?OKlmf>jZk86)l!+08!WPxPl#h70gk^hixq z>y=txvgT54xdJ9fKl_w_sSHOInwAWY8iyh%1u9iib94eI^?$P!Femy|_l(}Eb9u;w z(a@F&jYGK(*4BqW^F%8faC&5VY#ovDr3`YJg2V#3CD)95W@8UXbH{+@^=2X(Ens-7 zYJa9Ts!S;Jw^#rGFj@Rns;8SI_Px=BXv-VLlHr5uEw^R-aYCGg4-#~S9Mw5=hS*o* zI^jJ4NsE*nyMNXktX}dtDAjHb&r`~e&Uw_jb&$>Fk#*AqRhB)@wA31QUDry$3UJ|I zCuKHoS>bm?XVmH1b@WA`YqGy4U;u7(nNeL+pE2IvDJXYI-6y4(+;Zhr-98RZf*Y5i zX;;0`Q#kQt?e4&NTy+zk$&GSm2v6@n0000000000@D?O~H+t*qCA!kl00000NkvXX Hu0mjfo)p8~ diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00026.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00026.png index 7226a9e230b3e9732865ded1fe0d639b690029e9..dc7f9b18a8211268f0dd96c032fd617a091a2c72 100644 GIT binary patch delta 383 zcmV-_0f7Fx0-6JmB!6K^L_t(|ob8#>4uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1g-^wG{vW delta 287 zcmV+)0pR|c1G)l`B!2-(L_t(|ob8z14uc>JMsacP|G-{s7bHy!sF+FV;yLlcpVGot zTZ~I`;%w+=~_2wxFs&{*suwXHNEjJY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn00004uc>JMRjri|G_?N4277=KH=_B4I(hY40kLXXO4L9JW=#q+v z>PfX@2{p&n#xua#`=L$Ycf{^UT%*}=uW`tOxj|A@UbA%oh=1#6Gr-6DN%so9702=` zi9*4$jj12vd2neD4CM(e8gOcCYP5Q6#u7U@4nf%j*^)K=9(Y&-4&Qe`{dmI=>21(Pik4&0O4XcT8|0d$cbx%cCWh1oX|vYOdjUslg27+9IV)9x z^gRGLGHwRs$zgu-78ke90i`AGldNLD^d2j7VL|f`G83g=Vitmscv^_PHaq|T00000 d00026;}7U!4ErC^#4!K>002ovPDHLkV1n?iwC?}_ diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00028.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00028.png index 182640db43ff9724045c67199b76083d44b6dd53..f13eb25ed587c0b4a16f9b23cb556d08e40e6259 100644 GIT binary patch delta 365 zcmV-z0h0cc1Be5VB!5pyL_t(|ob8xF5`!QNMYUt^e_$8wf@vm%1W+M@{cpOc82At* zK-R^L&mKLlZ$IgQc`0SWQ*F7?@1MQz&}ur6uqj5KKH_~M-Oz{divCpEa06b89;u3| zE}CsiXgO{+UIEVD4}A*1C3c5!jb+2V#vu=;2BN97<=z1xZhxPx03Yv*;blgve#?g> zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfhexC( delta 376 zcmV-;0f+vG1Cs-gB!5~-L_t(|ob8y)62l+}MUzhY{~w%1x^RX;#77j#qxVb~jX|$s zL}gvvIQHmq{rXAYn2%B>JY~y;en0lPLu=_k!loE``iS?5bVDD)EBe!D!wq;XdZa3< zx@gvx&~n^tyaJrPANmx2OY9Eenw$;y8izcX8i=OSmS+cmxPN`N0(`tLhF2J^`YoT5 zC{!%lO!Y&&4z}EjiSk4)8gN={TC_%NY>Ay5hoEGEJd%6*Jy6*L7T-Cb@46a@&K_WR zEwMjSiE1+y|1A~(0H)J@Oe`3vHnu_({Zq4tokVQATR5Rl^2?8?k3cIGqM|z z%LITt!y!nd@YL<@Y!*RH$D0e4JK!K>hEFE_l|l$X@8X%~kXr}=0000000000f5Hz6 W1PdcZypuKn0000M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000 zG8OYSUHuTRgUx!;QJ%1(0jI{MM(c`ATVf~2At+fOQ!=LC1BE?c@tp(uu8V=_=mCb; z68kfis5V{k-(mp(z>i`iwF2(xgJxc(x6owNoXY1CYC)2UxB|bL299p}R@OljP9#*K z=>%}pj;g~Dhh{U8?O94!;(LWI(`^D&&Ru9vUw~(b_*y!8KqzJQ7@;4NOu%z-3_(_& zT_gdm@Li9!VKx_f4nDbfPoZiMf&j00000000000RP1oGEwEaS|Mmh00000 LNkvXXu0mjfo)@Gw diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00030.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00030.png index 37c456b81b45dae7b9f1c9fed698cb98d4d81796..873a1b0ad917883e58aab9725bc9765a1c6e0d27 100644 GIT binary patch delta 377 zcmV-<0fzpg1C#@hB!62;L_t(|ob8y)4ul{KMRDT%{|CF6S&%fPJXLOe+mhGi>(}*-`4sAmrRH*>-G3W)Y9j;4SPMd)Hqv8~e&ZP8Cn*fdXaU_yUZqK~ zccXSLQFE#`-2u+lk7J5YNX=nPQ;Ve_^yHc*Ih@n_W+|? znfNRr@Zud}N&y@pN~s8E+Ht8Hxa1}U0vtB8RK!GTDFjog zFSJHDTz6i419G+0f~nbcaqTMUDnI6hV7R-WiRW&U;lY^+sr-r4mj+mr}E&T6G8|fgb+dqAq2x8 XXmI^j`r+?o00000NkvXXu0mjf8$7e= delta 393 zcmV;40e1eB1ET|wB!6m2L_t(|ob8y=4#OY_McbwO{}1j%_h3R$!Ky{7**)3Ax*}Iu z!OFh5ah=iS{`Hfdn2+#V5-D3=jQe$tU0TfqG7iDWGe&$)q#NcCZqb)Y8*acy(IpKL z)f2b21kbVCI0KxcALbN3TO5ugG@1>M8iyj78zioB&!Y=K?0=tSfKT+3c@w;LvUilqa-mz^SpR(RyNIOC0351Z4@bBy+|+aI*(&zW)I|*SCeJ^#z8H zO7>^^MYI`;{}u}X0N#l8wEI<3yQ>xMX@#6{o^I}THKD8(@dSR3FW3-T+hAia40(^C zelk8nvrsr&YJWY3g5~XLR!p@KLgHP!JTuLJZaUVZb%D%4bxmmbK=vuw8W>|{)*5ujP?Mq3~mR= nNl&T(000000002MfAa$fixCsIJ5lfe0000p-(U@stE)_m9`sINU%bz?xxT-6yaFB#Im$yH8*V$QEbQ!QCgK zV|M_4bFRt%QeT(7OeRml^{v>(lv`*cz=e#mpi)xrKH7k- z$<9}kV{Tr##c6Z`X5tv`JG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^ z)LIqCmRxHQ=E~~lRE6BBD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S O0000apL^{2fLVAkTj({Rc?Lcp143P1&XxLCAjh1lGo+y z*Y%D06zYtn=5nFke;amcBLm1-3qqbY(qoc-;~3&6DGbVJ0o_VorAe`OqjoM)bE-Do z0nXNsV~S5m&0$PalhIbwhy`;2qbk>ob^xhHCnZGZ7!-ql5;VOs`jhjbsT zwGY7Vg_<|ejL3}ibw*|`sgY9`lx>hla!!R4DrxB|KjwvCxVxZ<=WdhX!I=rE{E8TW_S%o)20{2RCdrIjRHSlb5Dt~N zioW;fY3h>&B;Wm#@SC diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00032.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00032.png index 7e0e238204773a5ce6d51d5a1ce25147473482ed..970b15944a929cb54b84d1187fb0c49d776ce161 100644 GIT binary patch delta 314 zcmV-A0mc551JweMB!3)9L_t(|ob8#x4#OY}L(^&d{}1Ls4@?M=Pz9t78|9tWF0E2K zKm;N|5CnmToFu2ke^GhuPGBBWWkTr-R0dq1?~hLIdRYT_pfW%#517>#k!yDXOXvxQ zQ+?qZ0fkO(TJ?q1fP>&PV6+GmLTEs{>W=y%9@q@fJrB7DmVW`TUoz@AnLSVjW- znCXG%?1iv`4kFawPk8Wm)K5CEhTu`_NS7vBQwUxeE?3ynj-;PsRXz)wK|C`Xik5Cp+qZZyP&s1Bsn{Qv*} M07*qoM6N<$f>eo&3;+NC delta 377 zcmV-<0fzq70+a)gB!62;L_t(|ob8y+j>8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfj%&5e diff --git a/tests/integration/nano/snapshots/nanos/test_reject_transaction/00033.png b/tests/integration/nano/snapshots/nanos/test_reject_transaction/00033.png deleted file mode 100644 index 970b15944a929cb54b84d1187fb0c49d776ce161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmV-b0jmCqP)W-nCXG%?1iv`4kFawPk8Wm)K5CEhTv2Gq0-vaAjgxfa@jYGiT n^^^<1PeB1FN0fgM1i@ZzG{l9d4y4un00000NkvXXu0mjf06&f| diff --git a/tests/integration/nano/snapshots/nanos/test_sign_transaction/00009.png b/tests/integration/nano/snapshots/nanos/test_sign_transaction/00009.png index 92b4bce4e0b6ca6910717fd0d8adde36278ae65b..c40c8991909ea7077a4a24882fb4f363f288b5da 100644 GIT binary patch delta 297 zcmV+^0oMNW1H=N5B!3G@L_t(|ob8!Q5`!QNKto6Gf8Z|Kg)ch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDekz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf+Vkz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf+Vch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDe-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf1%&5& diff --git a/tests/integration/nano/snapshots/nanos/test_sign_transaction/00012.png b/tests/integration/nano/snapshots/nanos/test_sign_transaction/00012.png index 6f75a6599218fd6ca395e5f014ad540381528c05..7e0e238204773a5ce6d51d5a1ce25147473482ed 100644 GIT binary patch delta 377 zcmV-<0fzqD0+a)gB!62;L_t(|ob8y+j>8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfmqE4D delta 320 zcmV-G0l)r~1KR?SB!41FL_t(|ob8xF4ul{KMRDTX|G+MsMU$p2En<`^lmFsEv9$Ps zf-EJCeN&IiH!t*y`8Z`pse5@)_kA1tX*~_7SRJEGjbxiRF13MP@lB_VG?2CUk*m1T zjoW)6&)Th?0m-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000ch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDekz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf+Vkz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf+Vch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDe-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf1%&5& diff --git a/tests/integration/nano/snapshots/nanos/test_sign_with_another_seed/00012.png b/tests/integration/nano/snapshots/nanos/test_sign_with_another_seed/00012.png index 6f75a6599218fd6ca395e5f014ad540381528c05..7e0e238204773a5ce6d51d5a1ce25147473482ed 100644 GIT binary patch delta 377 zcmV-<0fzqD0+a)gB!62;L_t(|ob8y+j>8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfmqE4D delta 320 zcmV-G0l)r~1KR?SB!41FL_t(|ob8xF4ul{KMRDTX|G+MsMU$p2En<`^lmFsEv9$Ps zf-EJCeN&IiH!t*y`8Z`pse5@)_kA1tX*~_7SRJEGjbxiRF13MP@lB_VG?2CUk*m1T zjoW)6&)Th?0m-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000g-rP&!moi>QxeVZ-sRyYo4l6kMeE7Yq( z0dq;E^~+J=eeD0;#e?uU6N`TAUfDQqKXp12&y!f^oGDtr7JrrIXV#leoHKD~l^O1P zo~{OetVJX`0s0J1$Rt5*A>In{6|_VSq}0rq7sw=;E7Sn#pMzqX;cxAuZkQ$XXy19- zdJXejgH7n@jO|?8P$vKY0NPokDyUBp6JovzOWfP!WMrBKbYYTD7kXTroEW;G!H|H# xkbuD~QiONvZ6t2e6axSN00000004l$kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf-l*qh diff --git a/tests/integration/nano/snapshots/nanos/test_sign_with_long_hash/00011.png b/tests/integration/nano/snapshots/nanos/test_sign_with_long_hash/00011.png index d58a3edc056c1790f3bb80538af2a96705513c5d..92b4bce4e0b6ca6910717fd0d8adde36278ae65b 100644 GIT binary patch delta 473 zcmV;~0Ve*&0`miqB!9X|L_t(|ob8#x7J@(sMX6K&|G_P4;b|fU7#MKM;;u~b4S``k z0g9q1ilX=kr@`_2?HPD|ecZNF@anSx=~)@q&ES%*$RK6k@87kE5q3+=+<^N{tl-A! z`gS?vLpZpJv;e$ciUFYn{VF8kUL32D(@73eVqRsnd1vL=fPa<&PK(fvl5Lz8*{|qJ z0eXf*wTY|St~?UA{Q|az_p1VT5w*z3&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf-l*qh delta 299 zcmV+`0o4BU1I7Z7B!3M_L_t(|ob8xF62l+}0I}2l|G_=9hs;g-rP&!moi>QxeVZ-sRyYo4l6kMeE7Yq( z0dq;E^~+J=eeD0;#e?uU6N`TAUfDQqKXp12&y!f^oGDtr7JrrIXV#leoHKD~l^O1P zo~{OetVJX`0s0J1$Rt5*A>In{6|_VSq}0rq7sw=;E7Sn#pMzqX;cxAuZkQ$XXy19- zdJXejgH7n@jO|?8P$vKY0NPokDyUBp6JovzOWfP!WMrBKbYYTD7kXTroEW;G!H|H# xkbuD~QiONvZ6t2e6axSN00000004l$>i%k{V{nE5yl z@7iHmwt45izq9H#gr~(%S-DT`+20$-=S6w53q`A)Fm~VNe<|;UvxQ2%RB}m!p6cu% zmD^Pzx$z6rqSwx4Ja?17mTUjfWy)T@nr`X7lX;dg28L#yT`XSD5WRmEqutGZzx74i zZf5@s5}w-hb;iQV4WARVWhHLx(OAnCt7{`yM8e&_ICZAesglKNc&PvY delta 474 zcmV<00VV#g0`miqBYy$9NklH2m#<3l*OiL?N`Uy1>t1pO)`;a(i8k<&>IQes|ZwRvad*nfbQ0Zxn1j*@Mh7TK@p zO96U@L$!&k+patkxBUXPhWD!icM-M7$j?^N?*nv5QP{6AhoVfDQ0oxB2kbqybM>)W zumOrPybob^Haszppnd@sX)<~l*4@<@HaMlViilzUK4a340-V&&A%f=hU0N6)DfGY*?;x{WpGj^P|E`o!#$_OoXVb8r%P5W`?YYD)-j zOAd@;=h+@3#Y}X4{Me|Nn;;r?wz z4tBD576MufzZYu1vZyAup~uS+r92QV2PnZ!u2XKBf0cUkJ8N!PQuCJ3XIDrMJTUn> z{k2dYk1Hv(bYyH^Wr=3irulgVbKU$cY^7x;6o$^TMcm%U6TPr~)B*v6DwXd}Rd zjIy9oQtv+6fOD?bOL7L816f~>rEPAnSR#|$LJKqXTxF&F6b#ySzgQC2+^H*zs;X08guTjmJZZ<-4d8Y3vxo!)K@j|3 Y-r76Op(T;lvj6}907*qoM6N<$f>`>sr~m)} delta 277 zcmbQjyq;--ay`R0PZ!6KiaBp@c=9zH@Hhmnc=4D2Op~5cWSLr%hs>>i%k{V{nE5yl z@7iHmwt45izq9H#gr~(%S-DT`+20$-=S6w53q`A)Fm~VNe<|;UvxQ2%RB}m!p6cu% zmD^Pzx$z6rqSwx4Ja?17mTUjfWy)T@nr`X7lX;dg28L#yT`XSD5WRmEqutGZzx74i zZf5@s5}w-hb;iQV4WARVWhHLx(OAnCt7{`yM8e&_ICZAesglKvY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000ch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDekz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf+Vkz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf+Vch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDe-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@kz&N>^-$}^|4y8 z0g5ub4`FsTJTZ@;egPI~GI|---PIU2IHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#D zc8FERAKjhK{eNv90`J8!y-HHh&#|TfFf8wXRv#8N0F)yCZS~hvJ@_OCm_o`w9}<(h z;sOqEA2!xv<w*&ZXsOmuzx*r=G~>{)$SjEwgIiVwwNv9TgV^inP6npab0pBFMNN9a54yj8D; zGDgsMenUxLAK&^}(7oXZlXMRthLq8L8`^CcyE`_gA3UolilQirqVVtl&;4CqHG#m< P00000NkvXXu0mjf1%&5& diff --git a/tests/integration/nano/snapshots/nanos/test_sign_with_small_packet/00012.png b/tests/integration/nano/snapshots/nanos/test_sign_with_small_packet/00012.png index 6f75a6599218fd6ca395e5f014ad540381528c05..7e0e238204773a5ce6d51d5a1ce25147473482ed 100644 GIT binary patch delta 377 zcmV-<0fzqD0+a)gB!62;L_t(|ob8y+j>8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfmqE4D delta 320 zcmV-G0l)r~1KR?SB!41FL_t(|ob8xF4ul{KMRDTX|G+MsMU$p2En<`^lmFsEv9$Ps zf-EJCeN&IiH!t*y`8Z`pse5@)_kA1tX*~_7SRJEGjbxiRF13MP@lB_VG?2CUk*m1T zjoW)6&)Th?0m-E7W7X3bU4q`0pLj*`N!Pz zzJ7-MQ=HS#xjAT@vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000ch5b_4r=TffAhlv9nLvz0u5t!Q{}@!u44<`+nvpz0kJg>1 zwYOj=4PHWfXKdwq4YdORU=pTHJ0YZ?!7TM5*2ukQZTv%-VVUSNMxk>ONI`=k0D~a_ vgHitj>{IwRAR-*X00000000000FdDe!&8;_I0d)2q`?7A|fax=BVeRn? z@q_X$+5x^|v|gWA0~;sU6bo61#OHNO<}v&!hm+-ty%UmroX%f%krxsNEq z*M*`L_4I&VHGcygaF7%M!-l6LMI%!hm2MEImsvEpg)CgzUl#|NE$Imi1U6EMNlA+M>_Hfw<(Z>cl zpbVI9v}8lmS1@e1?Q+Fxs8X?YKj<3&`R#9n(rxp>yjuma&t1-0iy!tfYZ3RWiuiCF z%#9aOPy?uLB~PockwW{V%04Y2>|gLX<$&V39e5Cjp;>%*0*?r9&ffzbgb#q@IL`m_ Y0Td}Six)ANkpKVy07*qoM6N<$g7!`8qyPW_ diff --git a/tests/integration/nano/snapshots/nanos/test_too_complex_transaction/00010.png b/tests/integration/nano/snapshots/nanos/test_too_complex_transaction/00010.png index fda55f50120668ceacffb79c3b669070627c9ad5..f76bfbc5219d369a14cd7324fcc9bb0b880a671f 100644 GIT binary patch delta 463 zcmV;=0Wkic0_X#fBYy#}NklB*UY|p$O&zVyJv%-(BLq1Al~jinnkrUs9oT)MXs= zr27PL-%8nlW0A4wYLV&5=oHk0Ux+&~bOLByR}<0I3k>fi&Sz?YGE*>@H4nlR*ob~t zD&dXjJ5UUAMBj~=gOQwroE785TV;NQNDX&5V|Q44m>j!nXPN98DrzqSp(4TUjJkK` zB@_H64BbYZi+^P@y-^W^@LdR>s|N5An;2GXcVmGMCJAUW7e;P2yokYKmfo17EOYV3 zBznQ;k^u?D4yv{k`0`CV3vB!09HUP z&?-QxwIIL>Q12xULVy8CsSLaTAXZhP|9C*yFAMEQLi_PBgMN52WU&6`Eb+_p1ak^% zTkQpB@CS^l00000 LNkvXXu0mjfy~}=>5DQpQi^%4^FN?^G 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 delta 720 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 gY#Rv%9NFVdQ&MBb@0HU~<-v9sr delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@038sSIsgCw diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00011.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_added_at_the_end/00011.png index 393a15fb76753fbec14215b680629fedbfa392f5..551255b148faa8786f2789e7ed57e18fcddafe45 100644 GIT binary patch delta 457 zcmV;)0XF{n1LFgbB!8+&L_t(|obB0Ba)clZfMMI|O}PJ&xJw^)%Fqx3E(xyA|2?&e zp(P3uj{^Vz00000000000EGC83!QVWe@!WsgYC~Vp?WRn>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>z*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000c9Y)!NVy9SkwQxtY-3U#>-(Od zQYGiN;--xN00000Ahp(7YwheRK6O32fIlh_eYa!-M*7>fom8QwRV600000 e0001hB5q2vdJ%F-?YF)F0000@as@f}T8+_Qi8fxL+)qT516n{?5GoqPsZA!_ASx(i7 zwEu=)gEo|}@C5YkrXl;1obwwoKTvoA+|_qtF9(hbZ1h@vjEaO@;djDmRU6LTq-^%vti47 z=JJ_}i@)8>5?Ov>^Xqe`FDf6CWXs>U_Vb%lU)BDyE!ce0DxuFml3}v-ypZ?nCqA&q zSfA~yxzp`+=hgj77T?l4G;czF!IWEe{`*d=RbKse|Bz4IVzZZbTy(29%yI1b$|kb& zv*Y$zTMQi8cO)PEIPdcVwci52?V0y79<6owx;)fy@mW#HtutB}8L)x_HFp1^1fEUr RmFWS=d%F6$taD0e0suoivgH5( delta 516 zcmV+f0{i`v1D*tsB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000jEaO@;djDmRU6LTq-^%vti47 z=JJ_}i@)8>5?Ov>^Xqe`FDf6CWXs>U_Vb%lU)BDyE!ce0DxuFml3}v-ypZ?nCqA&q zSfA~yxzp`+=hgj77T?l4G;czF!IWEe{`*d=RbKse|Bz4IVzZZbTy(29%yI1b$|kb& zv*Y$zTMQi8cO)PEIPdcVwci52?V0y79<6owx;)fy@mW#HtutB}8L)x_HFp1^1fEUr RmFWS=d%F6$taD0e0szR0vp@g< diff --git a/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_removed_inside/00009.png b/tests/integration/nano/snapshots/nanosp/test_parsing_errors/one_byte_removed_inside/00009.png index 393a15fb76753fbec14215b680629fedbfa392f5..551255b148faa8786f2789e7ed57e18fcddafe45 100644 GIT binary patch delta 457 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 delta 720 zcmV;>0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L40000?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E)>ESNq3 delta 433 zcmV;i0Z#tz0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf*2U0Q diff --git a/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00016.png b/tests/integration/nano/snapshots/nanosp/test_regression_continue_after_reject/reject_signing/00016.png deleted file mode 100644 index 137ca9e4946dcd461fab8ca146124917077d946d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#B;O$e9@oI; z8=l|ytGsXJ_s%?d!PDvE>UTex1eaXV4~{klY65{3J9h8B|J!u!_cweo*Vb-Idf6Pr zaC*~`_EmSDW@jq6XfnJ`Rfw%Mu0H$jfb82Q<*3@pvl$m^ZO{AaYto=Tktbmbr}ic8 zgx#@%_&)K@;U~L{E3ACNW|0C&t;uc GLK6TUIGRfU diff --git a/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00007.png b/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00007.png index 59fce75cd1321a13bc8840b9bc6f48f87485d7c2..85234247e808c9a4eed986210646699a8fad3053 100644 GIT binary patch delta 330 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 delta 720 zcmV;>0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L40000?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E)>ESNq3 delta 433 zcmV;i0Z#tz0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf*2U0Q diff --git a/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00016.png b/tests/integration/nano/snapshots/nanosp/test_reject_transaction/00016.png deleted file mode 100644 index 137ca9e4946dcd461fab8ca146124917077d946d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#B;O$e9@oI; z8=l|ytGsXJ_s%?d!PDvE>UTex1eaXV4~{klY65{3J9h8B|J!u!_cweo*Vb-Idf6Pr zaC*~`_EmSDW@jq6XfnJ`Rfw%Mu0H$jfb82Q<*3@pvl$m^ZO{AaYto=Tktbmbr}ic8 zgx#@%_&)K@;U~L{E3ACNW|0C&t;uc GLK6TUIGRfU diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00007.png b/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00007.png index 59fce75cd1321a13bc8840b9bc6f48f87485d7c2..dd996e27318e3c2417178f9a8a22fafeca662e43 100644 GIT binary patch delta 329 zcmV-P0k;001mpscB!4SOL_t(|obB05l7k==06>$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!TwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!Tz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_transaction/00011.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!TwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!Tz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_another_seed/00011.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6y~}=>5DQpQi^%4^FN?^G zpg?_0S9!nR@i>HVS=>B_UeRkUd+N8%*0fw%t&yhDi!DF$N{t?n{OOxx#k7{k%aWu# zwh$Z4uUb|pUQ!wT_}#9^yZ8D1bc+m@_nAbD$03BZew=^i!+)7%p7ixvGMmwVD<9_9 zS~iUw3$g2}Vs~G2cQxW`J^y?rCpu+S>n5FeM)D|pOhH48!L+rRDNZ0a8M%!$U}`@G zo7;>yYwt~?xProB#j-07*qoM6N<$fwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzty~}=>5DQpQi^%4^FN?^G zpg?_0S9!nR@i>HVS=>B_UeRkUd+N8%*0fw%t&yhDi!DF$N{t?n{OOxx#k7{k%aWu# zwh$Z4uUb|pUQ!wT_}#9^yZ8D1bc+m@_nAbD$03BZew=^i!+)7%p7ixvGMmwVD<9_9 zS~iUw3$g2}Vs~G2cQxW`J^y?rCpu+S>n5FeM)D|pOhH48!L+rRDNZ0a8M%!$U}`@G zo7;>yYwt~?xProB#j-07*qoM6N<$f83B7%7z!WUV)^{^@uv@6 z4}8p)Qe7G{|J-MrH80D*-Hqd#X?4A|(qFT*c8juXhW@=<3np5w`W<{}w1#ePdpxC;IJqQL5>()gPmE7(T?u{;Phzxc6t}h1;j@ t2e=tAh#N!Eo&)I`3=FCa$lya{9Yev{Q*-$}9x;N%Jzf1=);T3K0RTUqjv)X5 delta 516 zcmV+f0{i{P0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjfl+MsF delta 300 zcmX@je4J^5N83B7%7z!WUV)^{^@uv@6 z4}8p)Qe7G{|J-MrH80D*-Hqd#X?4A|(qFT*c8juXhW@=<3np5w`W<{}w1#ePdpxC;IJqQL5>()gPmE7(T?u{;Phzxc6t}h1;j@ t2e=tAh#N!Eo&)I`3=FCa$lya{9Yev{Q*-$}9x;N%Jzf1=);T3K0RVF^j!ggn diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_long_hash/00011.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!TwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!Tz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00011.png b/tests/integration/nano/snapshots/nanosp/test_sign_with_small_packet/00011.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!TI4g0DDIL6aN1s{xXM17Ba?h$gm`;IwdsV z1%rwE^8o+=000000000000000fFb-$lazCo=akYkxwQ_fq%S7tT&}^*ZiARFefAD0 zqc7*2QWAs9=dwk$%M3DMJ*wHf01Q{hN#11dWtA9MFlv;i~UhCyl{!+ef zDRU})G~YR5gg(PAjWXS>e7z5|cfd{dbmAQzwg3nIWyU-}wq3c!IiN;P?W?yDGlgEg zcXmtvPgcqfPK(9cvU&maO;@vj9GSuXlpS!;RP{kNJRR0xCCbUV6rpl} z`4!roB!a_tD1X~sC2pGPqm%G?qL{_FdcdljVP0^IQiN%?IoPR@IgL)Ymfq4WQah_> zt}A*UD`v}XN>;6jX^3x~X=eY2m?&!2$o#@tsa(tZ5~u!WZL0>S%5b&sOwkf&b-u+z}3{im4t>8%_MRF%@tY%olp+K=XI7*?Jy4x=g)3*nMr7wqOqHlvQD$pTrtfvuk{p$v?Zb z=0wZoi_>S$R8RMJcpI%ReZ?h3Y1_FIcTPPLDPflvEKhvOa$=X9+M>ncGj>h4n!ohu zl$%X^-99TgHLCvFZp5K~alV83372}QGY7pwCX^cb)rM{h?u#Q~cyv5xiCWeD zg>$VkKdjiV_I^I&;il=8t)gwA29>Y#>pyFJn>t@JZ?#Frs$1L7lc9Y)!NVy9SkwQxtY-3U#>-(Od zQYGiN;--xN00000Ahp(7YwheRK6O32fIlh_eYa!-M*7>fom8QwRV600000 e0001hB5q2vdJ%F-?YF)F0000cde=(wj{$Z7DJRiyqrG z@oSvtGG4JI zzHfeHcKH0Q^wkUX7N&ondv$5_8Dri!rRelG=e{ngU|F#Fs8vF*dnAMQj@qYN*yp5Q zl-tQ>Fg5>EYK;HGeG#<}C)+QoV+;AbLi*4uUv(7y6Bye-;ryKlyA2rioI@v|{ zuJTOZT;lNR?b*lGNgLTWKA)My;u62C&*ko3{l_Z~UY%3_{Nv^Bqaw-+oZ8=SukESi gOZdUefDJ_45P$5-XH?84!U2-@boFyt=akR{09R(YIsgCw delta 516 zcmV+f0{i`-1D*tsB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztcde=(wj{$Z7DJRiyqrG z@oSvtGG4JI zzHfeHcKH0Q^wkUX7N&ondv$5_8Dri!rRelG=e{ngU|F#Fs8vF*dnAMQj@qYN*yp5Q zl-tQ>Fg5>EYK;HGeG#<}C)+QoV+;AbLi*4uUv(7y6Bye-;ryKlyA2rioI@v|{ zuJTOZT;lNR?b*lGNgLTWKA)My;u62C&*ko3{l_Z~UY%3_{Nv^Bqaw-+oZ8=SukESi gOZdUefDJ_45P$5-XH?84!U2-@boFyt=akR{09R(YIsgCw diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00009.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00009.png index 59fce75cd1321a13bc8840b9bc6f48f87485d7c2..afb2b86184b57eab884c6bcbae24ec9baa8aa51d 100644 GIT binary patch delta 947 zcmV;k15Es$1jq-FBYy*rNklJbr0^g`YfBe02Q&#)Htwt@YVWaUiam?wHi<~Hk!UhY+_+Sep`a%1bHHR#{HtR z2OMk1pgh;zg~)noCP|VcNz&#cq!lb1RPFJ30JlSPU}**#_nkvp zy|moBfoftoa(}kNnX0=x+}fa5KDZb+gO=uX%z2Kg^WzZdH2pY9ebcaF0I;fKy=~Jn zQWfK9J9+_znMFN10RzzW%%P^yc;NuuwHEv2DM|bcs0Jd+U2DtkwS`rjry^9|h*=4j zkJ$SYrMT8w-+X~{SG2NX4>&@feUogiT%fEE_`J7fPJhDJ7UeNi@6xt1d%zNOF=Gt2 zjancvned({)AA%q?xVg0RmB7P5tnGpu&M>l81%$q@&UKsEiuIe*w~QUASj74ruvMu z(aUqK)}*oN!qmI8VT7H60*MuqH{X6yBBoUBl|oQg&xy*F=BY#7<>21vQCH~MExuAZ!4Xc}h#-rQolaP|%jKZV$Nq6yaE27T_5GjdUeTT2y5(W7Ns=TFMwvjJ1b1tt9gQWkSN1sQ-ko3>Yk{EFbtzD2iyDcrKj~Rz ztWvjJhX`u47IP^?XdAiNStvzmr3Br5z)h0!$PB1D9G;^rm7~K2HPFRVSULa;1hxAY z1S9)q!d3JybDl!*43L`p8bR&&`Dbr;>nsiw+IHE5G5nkF delta 517 zcmV+g0{Z>P2c86wBYy$qNkl5xVz)Zm*Sx(;7EA8YU$lXVmb5JTKcVlPZgBz zPq>GpTrJ_pVfG!cx@za@YqiM)ILhT*guAsth?bysfv%ZV8ArK{`%q%K#wn?FL?ZR4 z%)A36%2IRuGJidqk5=C@m{hZ>M=(QOWqmlD>D*`YEwFN&zDknOzvGz%l*{mbX7tO0 z2`EmGKQ{W$Lk|9uH>g6+KcC7bcf~9+nT8`ks2#jML3Ezm3&4 zHpIs1j%gnv`c<>fI^Ugj>BA`ZH)0xbMYex>Y;|DttbTId`vkX^*$GVQFjW`FApasgtBTV5Rii2eUN zV9)H6?v2rk_p+-CL(!I5IuB$Y{Aw50bzgsL(Vzt)gY-2c6ALoQA0dcukSF3h=lw$G z3@Cfopx)QrK;%teS}k%u*A`J`DfS<+i9{liNF;Rp3~OrjdRw5@M&tCia|5H?b$K-@ zV^bYnYpWn;Z+~KuIh^OY7y_iso~)C@84F6rt%k;b73nU+t<~~{&~xC;?%HIr2ws5h z7;J`zb8298DvU}AXI2(bq*Dvf9b`9jP9nq_$UpO40v>WU)`lR_tubZ|x4#V`y$eso zaJ+-uxJGdo5gEJ#kjRUVlUUbofi$m_cMACT=uNkZ}Q`HCgp&24k(+25}!E7obb>h{P`#sb}24 z*=DXawtxFIE$+iwGVXC?(SC2I$hh0_f@&O1LyL4flNK?)a}_RA%m_P{h7K6iylusH zq@jsKB9TZWc0kC2Tv^0G?g27-#Y{Ykl7nfEAuV{`B_=bPKfZ#Tvuxa=Mo58AC~a;I z!;H@p>bHmEJ+ zQr80c!Lc;m4m3VO#*r;~un&oB|Lh`mf1RSyQ+qraSpXNAWtYTbIF|im!}95;i)jE4 zJc5`vn+a delta 946 zcmV;j15Nzc2gnDIB!7=dL_t(|ob8)kcElhEh0~tyWcI(L?4=JmwG8ML5RGa1o-z(9 z!T7_?%*U~c^E~Ot*Xy;c>z(Dng;kuVB2?apSqYbq z*!vTuxYkw6J}9hTBBwu zJZh6sYJZk)uf~5**8<-ih`<4FtvLX)PKY4o3lLk!**<)iS4yyl+8HoU4%EQr_yUnK zimr!-C8+u?>43|<6s>%l#E4fCjaNR;!I2uflq5-#B*}7|?*j&N;1m9kqMCw~Yn)Ll zQ+JR|X`>{4L9wtwiQeBmVj163M>Z_71%irq(VnsRIE zDyJqOYygybN=xFWmgRR3_?EDK&<#g*kW4?hkZw4}z&QXwPy;0`G?rk1l~k3)+wlxQ zxS(e0R2I%q(3Y`o54iml;aFZ4;28jobR|n#RAn#a8-kD%QTLQgoorS4Q)phX4z|1x zJAb|tzL>OJY&ZrBgD19>=5 Ub0ZxBUaqb9FqzVZwL zl1N~#?N`}_^E}%>kK@>8`px*IheV|2;=#C|=ecxgj01Y`TMO-sQR`E+d--tPsu!e8 zE6~oWf7U6`x==fFsejxMYCm?s=ICEOT_~U75TUVT+NiZ^Ykvf_fKa71uTB6$|KA<3 zC;Gy?vs(BrhfFvVeVL_k5c}ZUy0OlDy|%JJ3r2>qbw_3{M36sHklr9a5$}xqh0Zsi z?0p9Hz3wKWXaUpC65r=K0%ewB|0gz)NF)-8gpDsa3cLT}_MCdI#R`xkT9vQa67y|2 z%9+)Lmd2JqR)1M`4MM`eX)K|(;U1MS7n9Umf3wu7QYT88+sq)jmy<`#h+pj8YLmX`j3SB9BF zY94cdndQjfZvYHv%gaYyj855)bwrJ?nJPnJ^$CB6s(*7~PAt8e&#!UeCqb_bI$-&u zUD6i2tBY3Qi9{liNF-hWmW;DLugvaeQ zZ23sS%Qx!x!2T_!-DO;bVqMKVa3}moxjM@zuV>vdt-Y%)#>lwgb`d6uSrc`0bO*z( z3ixra7=LF&tKPO%hJytyhUpJsYPKk;DO`fKXsu`#Vq_eo3bYubZEPiT=|2)nZQ%z% zK5D;si2A*b4!en^PaQmfYp?mKPy`G9b|F%eqs=nv5L(-RNl^n4bNmU-8pExF zS*=^sOJLnYT!1YC@5#*${B_X#6kh1p#Cq$QZRE>qL%wy!G&5@q^N%J%beSx&p&c__ z2%ck%2)R$6YFZ(q8_ls3c_bc;ewnfZ>g#!`Uj-a5 zLx1!-&$wBHIZ4&E)PHo=^B68e8J+x;pM@PM=--RlMBrm7uR{C$-m=*fiNqYp6r{iG z&WIj#PRhfY!6`PZ8cB>>?sX6KL*Jr$pjXkAVleG{wCv%9Euv9Vk^?T?SsLS&r3A`s zYQ#by-~G+7Ofz1^4rY;Ck6~AYd7%gPJA2XS&+4JZx~e5ykZxkfj-FZRHPkRit&lpq z$6kt&F?f)R8l)l?Wdo5b+i1e^bzlx-IbQJ|zJ(3FVC5nvN9~8@Rmel|AGZqaOmftj wSC42tWWIL5*d6ojCeijfo-UC{BoZ&gZyM=r**D`9UH||907*qoM6N<$f`DWE+W-In delta 962 zcmV;z13mnh2-pXZB!8btL_t(|ob6m&mZcyJr04Wb-2al?%Y1l-;pRmJ0$x3-uiKb} z01}c?`={)}d7kZ`$8l`y`kV2GH<6i&#f|fRp6Ak`ArA1yUoNzBj#{5;zn2f!rTPPu zX$4xX`e#)UdnaZihx*SAV)kPPY@YqgrwiqCI>^*$GVQFjW`FApasgtBTV5Rii2eUN zV9)H6?v2rk_p+-CL(!I5IuB$Y{Aw50bzgsL(Vzt)gY-2c6ALoQA0dcukSF3h=lw$G z3@Cfopx)QrK;%teS}k%u*A`J`DfS<+i9{liNF;Rp3~OrjdRw5@M&tCia|5H?b$K-@ zV^bYnYpWn;Z+~KuIh^OY7y_iso~)C@84F6rt%k;b73nU+t<~~{&~xC;?%HIr2ws5h z7;J`zb8298DvU}AXI2(bq*Dvf9b`9jP9nq_$UpO40v>WU)`lR_tubZ|x4#V`y$eso zaJ+-uxJGdo5gEJ#kjRUVlUUbofi$m_cMACT=uNkZ}Q`HCgp&24k(+25}!E7obb>h{P`#sb}24 z*=DXawtxFIE$+iwGVXC?(SC2I$hh0_f@&O1LyL4flNK?)a}_RA%m_P{h7K6iylusH zq@jsKB9TZWc0kC2Tv^0G?g27-#Y{Ykl7nfEAuV{`B_=bPKfZ#Tvuxa=Mo58AC~a;I z!;H@p>bHmEJ+ zQr80c!Lc;m4m3VO#*r;~un&oB|Lh`mf1RSyQ+qraSpXNAWtYTbIF|im!}95;i)jE4 zJc5`v)GJ|oIH-u#lXgkA3)e~wE1VIo417O5BL{W`WCjCwg3x(0C`swQsRtJQ!(H)5r ztrT`OZ6eeN4NKS2EHNk*N&byz8usBC=GDa27`=O{RigB(8H;^t+X;JN+_*Ukv}_ub zG7^mB_{*{mje1>0hgEo{AeaY^`rlmkWG$HYdY;7jEBzM1h?;07`P(J?U?tsMGEE&FxMj zz(~I$G?N#0z+Swt1NPDZckO^Y3ESUUTa$&p4=4ha&SxWWWY-ZOvC;G!1VKuF2FED8 TpV*qk00000NkvXXu0mjfLFclA delta 1026 zcmV+d1pWJz2bc(uB!AyYL_t(|ob6muw%s5I^!2=*WdBRbUiy(!>xBUaqb9FqzVZwL zl1N~#?N`}_^E}%>kK@>8`px*IheV|2;=#C|=ecxgj01Y`TMO-sQR`E+d--tPsu!e8 zE6~oWf7U6`x==fFsejxMYCm?s=ICEOT_~U75TUVT+NiZ^Ykvf_fKa71uTB6$|KA<3 zC;Gy?vs(BrhfFvVeVL_k5c}ZUy0OlDy|%JJ3r2>qbw_3{M36sHklr9a5$}xqh0Zsi z?0p9Hz3wKWXaUpC65r=K0%ewB|0gz)NF)-8gpDsa3cLT}_MCdI#R`xkT9vQa67y|2 z%9+)Lmd2JqR)1M`4MM`eX)K|(;U1MS7n9Umf3wu7QYT88+sq)jmy<`#h+pj8YLmX`j3SB9BF zY94cdndQjfZvYHv%gaYyj855)bwrJ?nJPnJ^$CB6s(*7~PAt8e&#!UeCqb_bI$-&u zUD6i2tBY3Qi9{liNF-hWmW;DLugvaeQ zZ23sS%Qx!x!2T_!-DO;bVqMKVa3}moxjM@zuV>vdt-Y%)#>lwgb`d6uSrc`0bO*z( z3ixra7=LF&tKPO%hJytyhUpJsYPKk;DO`fKXsu`#Vq_eo3bYubZEPiT=|2)nZQ%z% zK5D;si2A*b4!en^PaQmfYp?mKPy`G9b|F%eqs=nv5L(-RNl^n4bNmU-8pExF zS*=^sOJLnYT!1YC@5#*${B_X#6kh1p#Cq$QZRE>qL%wy!G&5@q^N%J%beSx&p&c__ z2%ck%2)R$6YFZ(q8_ls3c_bc;ewnfZ>g#!`Uj-a5 zLx1!-&$wBHIZ4&E)PHo=^B68e8J+x;pM@PM=--RlMBrm7uR{C$-m=*fiNqYp6r{iG z&WIj#PRhfY!6`PZ8cB>>?sX6KL*Jr$pjXkAVleG{wCv%9Euv9Vk^?T?SsLS&r3A`s zYQ#by-~G+7Ofz1^4rY;Ck6~AYd7%gPJA2XS&+4JZx~e5ykZxkfj-FZRHPkRit&lpq z$6kt&F?f)R8l)l?Wdo5b+i1e^bzlx-IbQJ|zJ(3FVC5nvN9~8@Rmel|AGZqaOmftj wSC42tWWIL5*d6ojCeijfo-UC{BoZ&gZyM=r**D`9UH||907*qoM6N<$f^W?HmjD0& diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00013.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00013.png index 6fb484ac58ed68718402bc8e263925e7f3a54d85..2f514b48f9d2027a0122623319ece3284253cff7 100644 GIT binary patch delta 433 zcmV;i0Z#su2g(DGBYy#rNkl%@}sb+Wc}Tl)H-;VK3K20A-EnV z%cwzqY(e<~@iusDR>C$*wrHFIVbU{5Q#JicF*p56{Yt=|^6*?PJ)_@TUekZ$?ok@z z6V&_W)N|uK;D6t0PS5@GcihP<0KjsuWi4$<&*gpignfL(`UBwbBS$CW7L$3gO1dpr zIf0F(o2j}y)Te2td}X1TDJsqAQiW!adZD+?D?sYMXLBO|QD?n~^`wUGIurkg z+3Tza&~JU-(8)ntQ0UuF>W61|KATcXuJeB}0000004e|g00000000000000000000 bfU|r9InYp>n=yH200000NkvXXu0mjf@etEL delta 894 zcmV-^1A+X?1C$4lBYy*1Nklo4 zB1nM0wm)eW=Xt`9$8k)ndS!m;Db!NFJlO8%c@DibO91rbhZ@anBN$Vz_ln`Vln;zH z&;XXoA9E45cI4LcR=;5&x3>{6x%ID@F4Da@P}4{@u+^a3+<$`90J)-`M<)Q}|9=F` zX?;|^a<}ZWTvdfqP`4S{4rm;FqzmJ!&&N_WfLLrSb@kZzf*Sdjg6II*ku}@>qA&-f zxqXnI>tZ6RUBJLnXnxLTSev2DpJIa`2!bGx`Jt!KMx0dwps}>Hm&z&|edw*IE_C{5 zEql%=QPF!5xqnP0Re&0^mdZX;zr@y6>qLs#9&Ou!60mZK*#}64sV~P>t(P~+$+By3 ztcJ3%*}!-|meE($I&2zg@K04wiw?@#DA}@jU*!&{62*`WTefQ3srOB@U5d1E7P$RvvYnMn1vbbkOEeVz9sc^fe+tk(L;(gF5# zW=Vw=3o?Uol{bWC4rn{WM%5E)5ClOG1Os5iI7Cs6QYQUQ4GV?Qsru>b5LO3-vC$og z60H<=HEkl)2n|cu(JV126-oY$XBzh58Rpf*)fl~ds#T)&s~L-ZYTF5WVcfVm3bbq* zlrj>Gm`ufk^(~xNc2kfhwU*rXZLHj{4tR_GB%X_j;bh`78Y=R07*qoM6N<$g6Q0`vj6}9 diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00014.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00014.png index 2f514b48f9d2027a0122623319ece3284253cff7..4c6054eae8aa93a4b1db94ce6fa78c923c951244 100644 GIT binary patch delta 684 zcmV;d0#p6U1H%Q7BYy&lNkl$n>2^|8y=7+p57*rqa^dU0L#5kVx0S^>VLJvzedA5oN~m%5BXvF z8fe}h)&GocLl7sQjvz67R>7U+bYFAB3*aIC^8D!<#3ZRD;dI`zWwy|ITb_iMA20v_ z001ZusvrYWlay(l)FGudkfa)hJnw`LRQ{w@M@gE9)-aiq@-+A2xeAnb%lv^q)cPEI z+c0_~SKsKkc7I!AzJ3HTPU~?}4a*~xl52q!pitw@;4-2)#C(%`T`KX z;y#_dHt9qi=meSr?2-7uL_=+pRLQ%Per%gN8QY<}0Dt1K#dBk|_qK$VBAGTt)~|XP z@^QtGGRkYwhGswf7pA5tyYp}k0As1-fX6etJOcoj1jM*%N!md8ny%ZE*m)ufWaL-T zfNIgwV|F_;1hq-(Si^83WvxfxBlIR=aa-77mCUFyO6>A$=oaD`)ChLxzMsA={0f?1 z6yrLYy?@Wzc7QG0@oqJfocda5PpmIPN50BXPWe(P;eQkLl~nU%b*DO6zW@Z|6_vla zpU#2AQ!ca;18%~{p+8ol8l_+lvC5cWzny^{pk>!iY_X54V`UPy?b**-v?lOrBQ{KM z*}eMl7y5Y%@}sb+Wc}Tl)H-;VK3K20A-EnV z%cwzqY(e<~@iusDR>C$*wrHFIVbU{5Q#JicF*p56{Yt=|^6*?PJ)_@TUekZ$?ok@z z6V&_W)N|uK;D6t0PS5@GcihP<0KjsuWi4$<&*gpignfL(`UBwbBS$CW7L$3gO1dpr zIf0F(o2j}y)Te2td}X1TDJsqAQiW!adZD+?D?sYMXLBO|QD?n~^`wUGIurkg z+3Tza&~JU-(8)ntQ0UuF>W61|KATcXuJeB}0000004e|g00000000000000000000 bfU|r9InYp>n=yH200000NkvXXu0mjfJwDTH diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00015.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00015.png index 4c6054eae8aa93a4b1db94ce6fa78c923c951244..db7c22e31883fd4aaee39ca17765700fb05d0318 100644 GIT binary patch delta 314 zcmX@idWC6%ay_H8r;B4q#hkY{9fg_|cv=(Reo?#g-{a0w?z9Xw7f10Q8UOQDA6O^` zcwerKc06~}EZEE6)u?&)+NL?16GFmUgDbY1uido&O-RN)eWAy;Bao8U$L9n)%)QA|CtvZcZ&{pt>Mx;sc&5$b}gaGV|uHm*!k*< zc^_+^EIYn4e8O9uX+MO-d~_HX>UAtw&x*?xy$O)DwR*CH*)6v%)aL2rOUyYRA7s2( z^88-$F8|rb#2;S^t#{?i%bFOx^B2<=*0xYDzUC|92lj5wzw+2g>2`hb)&)za&gq-7 zxn$G+zn7RE*nNNAxjS$6-C|?E?Ui3-7;u10`7gh39MKltSOrqx>FVdQ&MBb@04ctT AU;qFB delta 684 zcmV;d0#p6e0>cH6BYy&lNkl$n>2^|8y=7+p57*rqa^dU0L#5kVx0S^>VLJvzedA5oN~m%5BXvF z8fe}h)&GocLl7sQjvz67R>7U+bYFAB3*aIC^8D!<#3ZRD;dI`zWwy|ITb_iMA20v_ z001ZusvrYWlay(l)FGudkfa)hJnw`LRQ{w@M@gE9)-aiq@-+A2xeAnb%lv^q)cPEI z+c0_~SKsKkc7I!AzJ3HTPU~?}4a*~xl52q!pitw@;4-2)#C(%`T`KX z;y#_dHt9qi=meSr?2-7uL_=+pRLQ%Per%gN8QY<}0Dt1K#dBk|_qK$VBAGTt)~|XP z@^QtGGRkYwhGswf7pA5tyYp}k0As1-fX6etJOcoj1jM*%N!md8ny%ZE*m)ufWaL-T zfNIgwV|F_;1hq-(Si^83WvxfxBlIR=aa-77mCUFyO6>A$=oaD`)ChLxzMsA={0f?1 z6yrLYy?@Wzc7QG0@oqJfocda5PpmIPN50BXPWe(P;eQkLl~nU%b*DO6zW@Z|6_vla zpU#2AQ!ca;18%~{p+8ol8l_+lvC5cWzny^{pk>!iY_X54V`UPy?b**-v?lOrBQ{KM z*}eMl7y5Y7bt-bq>L+D6-(ague*S+kdpS)!cjsKRJv|qCM zW@_fEOrLK&KmR)}YJIeAD$AzJCnHa)?f36e6O5Y_fArOFq2m&@_1YV@PPRH#@%xmW z&&5s6rzLM4J<<2^q`acE_6^n*5q}T0ovnNET5cbE{l-~k?b}`z%|0Qu=UJT0d^OuQ z-I}wj-mN{8!GAXQq}%^Y$I|Nwefk%!O}eRdf6twyht>)qQOvh_FV$>Y&2oKrEsNy* z-uL^>{9ideO}S?MxT#oE(^20yVZV<*gPz$Izl7O4e`_?@m0oMo`R^^ATT(0jNbHIP ycSG{7clLJ||I)Qx{L6nw8(ZEY2JGO0e+|Q-1jZRb{)=CLRCv1jxvXpmT72D0%ZrcB*ChJV%@{TD%>U%fs){)+JJXZd$ z!co_)w;8wU22WjZIJeHP*v;(f{qTVQ%!`h@MTfiAaOs`Yw+^enmQdv}y;W1}eD%e= zkF`&h9p4!~;jPZJA3|b2It&c;Iu@*F#pR0L1jyQ2J=wwRmfIF;^K|kh=A4fYGF~is zey@0!|LkMpkFSN+yYl5_O$^@oi)jmMTc{Ub^A+&}d$;CadF-TgyS{kqf~8aE^iA1Z zvT6U{OH2>!zCZ8Woj3b#v7gcQ$}chuI6$WSm)|#zXp3&F0x9rx^>bP0l+XkK)U}En diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00017.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00017.png index 914563b11cce944c340e4df681a2a8b4a884142f..fb4e7918681a183322082ef74706bcf71cccf1c7 100644 GIT binary patch delta 347 zcmZo-{>C&xrQX)l#WAE}&fA-gLWdN194@}7n0)8I$IkBVJ`YX~D?f(6`AZX2)pQfI zH?bKTZ@wAmQ}EUIW2c958?WusdshWdGtHQ}s_n?-!j{=asr*0LSLqg=TW@dkzDuWh z)vt$stTQJ4Ra&OB(A~yv!{g+Y+pS&dDyr75I=KJ(^#_p+JD>lnkKXw~@_xo&jjV#) zQkLKIU3XYq^bZcG;k{JwQ}jab!FcWNHPNwkvoysYYF>A=)7)R`u}?@vxj56x=F{v%c`B zeOMBg6232X!Y!X79_)fF0a8AnTFE?%(3DDh;H-)78&qol`;+0MZwm=Kufz delta 359 zcmeyy)WkeNrQXxi#WAE}&fDv;o0=7P+7jQCsK2TAe798GXYLp7NAg`azV9s3Qh&nY z@lxQNVc+8~GRZcX)4tAJBJ<|+ul>7bt-bq>L+D6-(ague*S+kdpS)!cjsKRJv|qCM zW@_fEOrLK&KmR)}YJIeAD$AzJCnHa)?f36e6O5Y_fArOFq2m&@_1YV@PPRH#@%xmW z&&5s6rzLM4J<<2^q`acE_6^n*5q}T0ovnNET5cbE{l-~k?b}`z%|0Qu=UJT0d^OuQ z-I}wj-mN{8!GAXQq}%^Y$I|Nwefk%!O}eRdf6twyht>)qQOvh_FV$>Y&2oKrEsNy* z-uL^>{9ideO}S?MxT#oE(^20yVZV<*gPz$Izl7O4e`_?@m0oMo`R^^ATT(0jNbHIP ycSG{7clLJ||I)Qx{L6nw8(ZEY2JGO0e+|Q-1jZRb{)=CLRCv1jxvX*40Rm|DLFx62pU-G5lzwV^f0%bUPI#eB^iu8FL#` zftQ#f+<=#8<#ldNq4wq<=X<}_YIfXRNWoBv77^w3kD|63Q-4H^sH2<$AJ?1z74XR1 zH&^A#9zC?xXyXH&AlAWK{9&taGa5c;dE+O75v%Gu5o7$Z1sxj$r-M#*pLVp{b>|Ey z+s1(IA$&)sa&b-KmfWoCrDg1hn5V@iPHyr50002!@e<$sq^94kgqprQ=v;#MtG;D9 zYAy72!puNu*MBXwRxn+)c&ag)*l^ycqU8P*&v&PmSv}&{6pZ`zWg~U9Sx~&?k$=i} z02y^>qG^zO&lRtP(O`nI!MgDmk~35qnGG%3?**NG44Rpn;W|O7V~-|d1*AWQ;|=b* zrheI)HK9oK7Qg7UpNh!xw2%0{v`G32Fjtj50A+Rz&VTfaPS~yZ9jZG$HCua{aRvxy z@rfXo?a&O;XF#?7+r>30Jkzh}sg|r+*Ka~(3`~Q$o&f*=0Kgt(GHwF@q1#PY={#3a z*Pd>!&G%(qhn(gFvv@&;y$oH*Mw48A#jaVfmZKBD@=rfRymx@_hOWb6&T@NyB3z%@ zX;UpB!GGJU8;QAP&s$BA?^*%oRBcT<{=-Zjm&P@{*>_zJt%hbQA`wa+ zOs`Wj{ji809`Vdh^yM(N1x4`BWNyQ!&+Z1B{d@GZY>+v4%rl^sf}h|!=RN=c00000 t00000000000000000000006+3^9vq+5vG^LKREyZ002ovPDHLkV1h?aRFMDx delta 332 zcmV-S0ki(z1@;1vBYy!sNkl3-* zCM{qqvIa9Vv)NHhaP>{`iAW=c4Lzma)e*}An3<}E#M5zvn=)k&`3I^ka?Yw0BczUg>!N1qn;8}pV=YRfNx$qg^X#FT^aBX!2 z`=3R)IMGj2P<##2aQPL`jlo|li>zB+ewry4;VIWaJ}JL-NWKyzBXemwJo3k`v%vuX z03w&!0f;m0000000000GrafSd+k=txobDzH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|D zrlT*m5)eZigKjgVo>74`SYX#hrE9#IzY@`D{rjEKAO6`Jghqx8uhvwT`%TFKC%buIrt__>Wv@K905|BC6`I>HPc(qGNvOXRXe1o zvj(&(Eif{z2Y=rz!s(l3c}jMeV3sm*q_B4#{bNV~V8wNFy5efV6r}9YuX2s*wNKcn zmD|L@^KG?$+>*||c@4D@;9lfC3gu>biKhO%gl{4q=i||Ms)A?sS?we#tCjqhVk97azfh*!)V$JmB$L~L72m$~A00000 c004A60Tiq>(_r(*v;Y7A07*qoM6N<$g2Ow|O8@`> delta 711 zcmV;&0yzE41KtIYBYy&=Nkl*40Rm|DLFx62pU-G5lzwV^f0%bUPI#eB^iu8FL#` zftQ#f+<=#8<#ldNq4wq<=X<}_YIfXRNWoBv77^w3kD|63Q-4H^sH2<$AJ?1z74XR1 zH&^A#9zC?xXyXH&AlAWK{9&taGa5c;dE+O75v%Gu5o7$Z1sxj$r-M#*pLVp{b>|Ey z+s1(IA$&)sa&b-KmfWoCrDg1hn5V@iPHyr50002!@e<$sq^94kgqprQ=v;#MtG;D9 zYAy72!puNu*MBXwRxn+)c&ag)*l^ycqU8P*&v&PmSv}&{6pZ`zWg~U9Sx~&?k$=i} z02y^>qG^zO&lRtP(O`nI!MgDmk~35qnGG%3?**NG44Rpn;W|O7V~-|d1*AWQ;|=b* zrheI)HK9oK7Qg7UpNh!xw2%0{v`G32Fjtj50A+Rz&VTfaPS~yZ9jZG$HCua{aRvxy z@rfXo?a&O;XF#?7+r>30Jkzh}sg|r+*Ka~(3`~Q$o&f*=0Kgt(GHwF@q1#PY={#3a z*Pd>!&G%(qhn(gFvv@&;y$oH*Mw48A#jaVfmZKBD@=rfRymx@_hOWb6&T@NyB3z%@ zX;UpB!GGJU8;QAP&s$BA?^*%oRBcT<{=-Zjm&P@{*>_zJt%hbQA`wa+ zOs`Wj{ji809`Vdh^yM(N1x4`BWNyQ!&+Z1B{d@GZY>+v4%rl^sf}h|!=RN=c00000 t00000000000000000000006+3^9vq+5vG^LKREyZ002ovPDHLkV1m+_RA&GH diff --git a/tests/integration/nano/snapshots/nanox/regression_batched_ops/00020.png b/tests/integration/nano/snapshots/nanox/regression_batched_ops/00020.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 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 delta 720 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 gY#Rv%9NFVdQ&MBb@0HU~<-v9sr delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@038sSIsgCw diff --git a/tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_added_at_the_end/00011.png b/tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_added_at_the_end/00011.png index 393a15fb76753fbec14215b680629fedbfa392f5..551255b148faa8786f2789e7ed57e18fcddafe45 100644 GIT binary patch delta 457 zcmV;)0XF{n1LFgbB!8+&L_t(|obB0Ba)clZfMMI|O}PJ&xJw^)%Fqx3E(xyA|2?&e zp(P3uj{^Vz00000000000EGC83!QVWe@!WsgYC~Vp?WRn>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>z*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000c9Y)!NVy9SkwQxtY-3U#>-(Od zQYGiN;--xN00000Ahp(7YwheRK6O32fIlh_eYa!-M*7>fom8QwRV600000 e0001hB5q2vdJ%F-?YF)F0000@as@f}T8+_Qi8fxL+)qT516n{?5GoqPsZA!_ASx(i7 zwEu=)gEo|}@C5YkrXl;1obwwoKTvoA+|_qtF9(hbZ1h@v9lcFm`nhbJ{xd~4eLv+BqFsM9rvX2&;IAN>34hv5A^+A1-(64{q{ z)yvr_Keae!b!y&g`R!-QRSWYSR((mH9%Y{X-R!KYoXU5>E8p{1$^DsrrrWA#!C#)U zX?!1Z*UT)Im-Bc0S-qiN=+B>NXM#DvJ^&F7N_k$JtBO3|Zr=yudb;|#taD0e0su+c Bhid=; diff --git a/tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_removed_inside/00007.png b/tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_removed_inside/00007.png index 59fce75cd1321a13bc8840b9bc6f48f87485d7c2..ff518831ae81679c8510e8cb4bff506d46ea4c52 100644 GIT binary patch delta 375 zcmbQoGKqPDN`0iKi(^Q|oVPav`I;4Y8WOix2*0aWdB2H$a@*E~)qE{a|IeGjjEaO@;djDmRU6LTq-^%vti47 z=JJ_}i@)8>5?Ov>^Xqe`FDf6CWXs>U_Vb%lU)BDyE!ce0DxuFml3}v-ypZ?nCqA&q zSfA~yxzp`+=hgj77T?l4G;czF!IWEe{`*d=RbKse|Bz4IVzZZbTy(29%yI1b$|kb& zv*Y$zTMQi8cO)PEIPdcVwci52?V0y79<6owx;)fy@mW#HtutB}8L)x_HFp1^1fEUr RmFWS=d%F6$taD0e0suoivgH5( delta 516 zcmV+f0{i`v1D*tsB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000jEaO@;djDmRU6LTq-^%vti47 z=JJ_}i@)8>5?Ov>^Xqe`FDf6CWXs>U_Vb%lU)BDyE!ce0DxuFml3}v-ypZ?nCqA&q zSfA~yxzp`+=hgj77T?l4G;czF!IWEe{`*d=RbKse|Bz4IVzZZbTy(29%yI1b$|kb& zv*Y$zTMQi8cO)PEIPdcVwci52?V0y79<6owx;)fy@mW#HtutB}8L)x_HFp1^1fEUr RmFWS=d%F6$taD0e0szR0vp@g< diff --git a/tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_removed_inside/00009.png b/tests/integration/nano/snapshots/nanox/test_parsing_errors/one_byte_removed_inside/00009.png index 393a15fb76753fbec14215b680629fedbfa392f5..551255b148faa8786f2789e7ed57e18fcddafe45 100644 GIT binary patch delta 457 zcmV;)0XF{n1LFgbB!8+&L_t(|obB0Ba)clZfMMI|O}PJ&xJw^)%Fqx3E(xyA|2?&e zp(P3uj{^Vz00000000000EGC83!QVWe@!WsgYC~Vp?WRn>PSuID z|Atl7h&V=JJe%#wgz?f4=hKQE{zhKx}{Pp zLZZE0JL}c*)H3++!q69!9mP1K#3sg~EwPmbVwBsk>CbWI1xAg(^Hag@QiM7q4>z*^Px&#W)Y()|3!D3~MXLLn4e7O%(%1C9+p%|BY0?jt;d6*bxO|)2I`RpS zl~n~v}p|;mZ>+ulJAVy=;5U?ZGIGD1XCT==Q#itAg5mYVvHL zZn8r@0mFO0@FQ(nwq}1aQFpsRqvuI>%cwzBwt0`f7!oNTN4J%mTt1~fnesK;Y8Fwy z>tzVC56F6Lv#xtqTRZ)Y6xh2;Pr}2W1KI4`tLskGHSDzM#;s{no-(`l|2%b3KmPbO zaMl4>>GtUadVdXEbpu$gaR`d`3}i`EXq%Ed1ghM=Imi0000c9Y)!NVy9SkwQxtY-3U#>-(Od zQYGiN;--xN00000Ahp(7YwheRK6O32fIlh_eYa!-M*7>fom8QwRV600000 e0001hB5q2vdJ%F-?YF)F0000@as@f}T8+_Qi8fxL+)qT516n{?5GoqPsZA!_ASx(i7 zwEu=)gEo|}@C5YkrXl;1obwwoKTvoA+|_qtF9(hbZ1h@v9lcFm`nhbJ{xd~4eLv+BqFsM9rvX2&;IAN>34hv5A^+A1-(64{q{ z)yvr_Keae!b!y&g`R!-QRSWYSR((mH9%Y{X-R!KYoXU5>E8p{1$^DsrrrWA#!C#)U zX?!1Z*UT)Im-Bc0S-qiN=+B>NXM#DvJ^&F7N_k$JtBO3|Zr=yudb;|#taD0e0su+c Bhid=; diff --git a/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00007.png b/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00007.png index 59fce75cd1321a13bc8840b9bc6f48f87485d7c2..85234247e808c9a4eed986210646699a8fad3053 100644 GIT binary patch delta 330 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 delta 720 zcmV;>0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L40000?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E)>ESNq3 delta 433 zcmV;i0Z#tz0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf*2U0Q diff --git a/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00016.png b/tests/integration/nano/snapshots/nanox/test_regression_continue_after_reject/reject_signing/00016.png deleted file mode 100644 index 137ca9e4946dcd461fab8ca146124917077d946d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#B;O$e9@oI; z8=l|ytGsXJ_s%?d!PDvE>UTex1eaXV4~{klY65{3J9h8B|J!u!_cweo*Vb-Idf6Pr zaC*~`_EmSDW@jq6XfnJ`Rfw%Mu0H$jfb82Q<*3@pvl$m^ZO{AaYto=Tktbmbr}ic8 zgx#@%_&)K@;U~L{E3ACNW|0C&t;uc GLK6TUIGRfU diff --git a/tests/integration/nano/snapshots/nanox/test_reject_transaction/00007.png b/tests/integration/nano/snapshots/nanox/test_reject_transaction/00007.png index 59fce75cd1321a13bc8840b9bc6f48f87485d7c2..85234247e808c9a4eed986210646699a8fad3053 100644 GIT binary patch delta 330 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 delta 720 zcmV;>0x$i`1Lp;hBYy&}Nkl-?y3TmHEz3fk??RG43G*)uy#nAV2w&8(GFEtyA>-)Zw`l4;pP! zgY>TWGu~444vLj*>R&ZLv9A$e9Q~(G57#>!AT*dw8nv|87=OXs02Gy%tepTr`Trxp zCi=iV(c0p(+~tC}k+xBd0~iNC*abcJ@fgbnDJ?cFzBo3rfFQq8P(DC*WX-rgROW!o zwh!WST}?#23z+mSFh9pLMH^M@r&z~v9LI4~8Qv%n21OfLMkb%sb=70s(;}C<4qmS1XIw6$EvE;RMUc#Bl`AsM;s(aK#_sOjcJ^+j)swSRCpmH zPLzCCb2O|C2)4+g0~`Ww3IZZ_ak}f((TXpm#2wKUFmNP>&AX%{9bKM+j$+ew$O?`e z$KlhcvhlZ+W-8lJDX2>i*us$r!eZQEDjVNX6)i2OSbtG$QMOs^B;?72_}l+GF|k zT(6fdWPdhdPs8Fns;fQi9o)wI01-KCr?vKK2+CnZ3Mv|i zXCbU&e5_Lt@rq-hs5m~VGB^j-!Y9lD_Ftc^%t`!7c$oYB-$3;`Rkd(kF-}Ad8*rLW z@0#c2PYiuyNI$&*2y5-jz6uNF1L40000?wI z-!>^n)lQzxxKL|*-dA6f2K9+N30pX|FL5XAe%*J@)#*q*Q^t9lSCSg623Cb$=?g?0 zUd*dp!tcaj;JwaW@OJE%g2?`3{4syk=c%4D{%dc0$N$H<2f?-F-{&N+nk#da=f$~s zbEmU=>U~ykcyjgrwc7oTF&@z`LYDGpGgPj!m%6q1>f+l9w}Xr~u?aYaAr(D}CNQ|3B5`xr9}r+?MRW=j5tOh1YEpnA-Bmt76$6$M=bM4nNr? iY}c8}0`)wEGWf!J*nH32<4-IEKmwkwelF{r5}E)>ESNq3 delta 433 zcmV;i0Z#tz0?PxCB!7}gL_t(|obA|K62c%1K+)*96ZXF(_TmR4gFFgoONid{38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf*2U0Q diff --git a/tests/integration/nano/snapshots/nanox/test_reject_transaction/00016.png b/tests/integration/nano/snapshots/nanox/test_reject_transaction/00016.png deleted file mode 100644 index 137ca9e4946dcd461fab8ca146124917077d946d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#B;O$e9@oI; z8=l|ytGsXJ_s%?d!PDvE>UTex1eaXV4~{klY65{3J9h8B|J!u!_cweo*Vb-Idf6Pr zaC*~`_EmSDW@jq6XfnJ`Rfw%Mu0H$jfb82Q<*3@pvl$m^ZO{AaYto=Tktbmbr}ic8 zgx#@%_&)K@;U~L{E3ACNW|0C&t;uc GLK6TUIGRfU diff --git a/tests/integration/nano/snapshots/nanox/test_sign_transaction/00007.png b/tests/integration/nano/snapshots/nanox/test_sign_transaction/00007.png index 59fce75cd1321a13bc8840b9bc6f48f87485d7c2..dd996e27318e3c2417178f9a8a22fafeca662e43 100644 GIT binary patch delta 329 zcmV-P0k;001mpscB!4SOL_t(|obB05l7k==06>$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!TwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!Tz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB diff --git a/tests/integration/nano/snapshots/nanox/test_sign_transaction/00011.png b/tests/integration/nano/snapshots/nanox/test_sign_transaction/00011.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!TwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!Tz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_another_seed/00011.png b/tests/integration/nano/snapshots/nanox/test_sign_with_another_seed/00011.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6y~}=>5DQpQi^%4^FN?^G zpg?_0S9!nR@i>HVS=>B_UeRkUd+N8%*0fw%t&yhDi!DF$N{t?n{OOxx#k7{k%aWu# zwh$Z4uUb|pUQ!wT_}#9^yZ8D1bc+m@_nAbD$03BZew=^i!+)7%p7ixvGMmwVD<9_9 zS~iUw3$g2}Vs~G2cQxW`J^y?rCpu+S>n5FeM)D|pOhH48!L+rRDNZ0a8M%!$U}`@G zo7;>yYwt~?xProB#j-07*qoM6N<$fwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzty~}=>5DQpQi^%4^FN?^G zpg?_0S9!nR@i>HVS=>B_UeRkUd+N8%*0fw%t&yhDi!DF$N{t?n{OOxx#k7{k%aWu# zwh$Z4uUb|pUQ!wT_}#9^yZ8D1bc+m@_nAbD$03BZew=^i!+)7%p7ixvGMmwVD<9_9 zS~iUw3$g2}Vs~G2cQxW`J^y?rCpu+S>n5FeM)D|pOhH48!L+rRDNZ0a8M%!$U}`@G zo7;>yYwt~?xProB#j-07*qoM6N<$f83B7%7z!WUV)^{^@uv@6 z4}8p)Qe7G{|J-MrH80D*-Hqd#X?4A|(qFT*c8juXhW@=<3np5w`W<{}w1#ePdpxC;IJqQL5>()gPmE7(T?u{;Phzxc6t}h1;j@ t2e=tAh#N!Eo&)I`3=FCa$lya{9Yev{Q*-$}9x;N%Jzf1=);T3K0RTUqjv)X5 delta 516 zcmV+f0{i{P0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjfl+MsF delta 300 zcmX@je4J^5N83B7%7z!WUV)^{^@uv@6 z4}8p)Qe7G{|J-MrH80D*-Hqd#X?4A|(qFT*c8juXhW@=<3np5w`W<{}w1#ePdpxC;IJqQL5>()gPmE7(T?u{;Phzxc6t}h1;j@ t2e=tAh#N!Eo&)I`3=FCa$lya{9Yev{Q*-$}9x;N%Jzf1=);T3K0RVF^j!ggn diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_long_hash/00011.png b/tests/integration/nano/snapshots/nanox/test_sign_with_long_hash/00011.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!TwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbztwpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt$O~Ux-adO%C@tXICTM*5l7-wxd(8YF%UykH{{Ck16ODIT+R+W+o?)i)3zP4H(+z zVD&L0&e~hMF}Z|peeT>Hy~cH>!9&W?>HFk*P<{t+vYRE~9)D$lf8f3gZ|Y`i!0&mj zSGkzEHw|OK`a;}R_9Aa#<6W47I+K9TB%rhWi`exod>tDs!Tz6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0HU~<-v9sr delta 516 zcmV+f0{i{*0-gkrB!A^eL_t(|ob8!Wa)dAlhSN@O;{A{0UHae*gGoSQh~4de-&0ib zhXutAmI43(000000000000000089AtFYo()47P2P!(*JnsD9TV-K*fbDg2}>wpiY` z=a&X?hINib6R_{Q6~TjT+w|?MFKJ^D5d(eRvMELg+EprtTYqt_R!y&bupApz_LKMR zT=NkRv|E*pT&>31t?Im^ZyER=UaH-=yW`52;-M$tNO-$y>D@$PIrG?B`mKRa6_oBz zxQC-$E#b#u_8qXgYUk=}waElH%H>>yyR|`xmY{Zlu9;OCN4bpqP-42qDXDctBK4=t zyaOc4Qgi$=J%5^yR^Kw1RI{o_FhgBseK?%y+-LJGuyUNfN|MpP{p(LYa1Y_}J)y|^p@I^cNo_f`c)6F%%jny_b z#K!54X&)l`RkP1J-<@^o!zlMRVj6KpwtsqTbzt38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjf-#XA- delta 344 zcmX@j{F!NjO1+h*i(^Q|oVPa}g_;$390K1|2*0mad3T95Sc=(EhUMtb{G}3%%?q}6 zOCPP)FW;UkeeKKS+Dl4PS7zUxQU1R6y7%gr4pBRnIVu;c{1&;*Tg%b@$St*pXF~eX zyA@vBN<-gHo&M`}+p02iX0~+uFPa6vOIBQoFf_{EbZf>z6Nk|Hsn_mQGX{M9pMGG* zo7K;_!)NcE?r$1su~Fu-DSwvSnrn@9XOHJ*n@-3|%DR=+xpSJ=r#wzC^%FhwW`2M0 zK=Q${KF2-l`NbD));IX1^R=c=_2!Iq$Ly0B85(kT?q=S)NnR!9Q&wW@!p^VDB)Hb* zO9cN}cCv=IcG>oO=PvUwybB48sK2sJoUL?S??3wlz1IAhn|Th%Y%1Sk%Djm&W9c=q gY#Rv%9NFVdQ&MBb@0NvS{3jhEB diff --git a/tests/integration/nano/snapshots/nanox/test_sign_with_small_packet/00011.png b/tests/integration/nano/snapshots/nanox/test_sign_with_small_packet/00011.png deleted file mode 100644 index 471324463647c42b2de74c282e34caf0e801955d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 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 literal 0 HcmV?d00001 diff --git a/tests/integration/stax/test_blindsign_valid.py b/tests/integration/stax/test_blindsign_valid.py index de2465e03..585ff9f8c 100755 --- a/tests/integration/stax/test_blindsign_valid.py +++ b/tests/integration/stax/test_blindsign_valid.py @@ -49,15 +49,15 @@ app.review.tap() app.assert_screen("tst_review_002") - app.review.tap() - app.expert_mode_splash() - app.review.tap() app.assert_screen("tst_review_003") + app.review.tap() - app.assert_screen("expert_mode_splash") + app.expert_mode_splash() + app.review.tap() app.assert_screen("tst_review_004") + app.review.tap() app.assert_screen("operation_sign") diff --git a/tests/integration/stax/test_expert_mode_rejections.py b/tests/integration/stax/test_expert_mode_rejections.py index 09c4693aa..ee58efac2 100644 --- a/tests/integration/stax/test_expert_mode_rejections.py +++ b/tests/integration/stax/test_expert_mode_rejections.py @@ -31,6 +31,8 @@ def sign_transfer_initialize(app): app.assert_screen(f"tst_review_001") app.review.tap() app.assert_screen("tst_review_002") + app.review.tap() + app.assert_screen("tst_review_003") diff --git a/tests/integration/stax/test_parsing_errors.py b/tests/integration/stax/test_parsing_errors.py index 36d7d4fa6..d528192ee 100755 --- a/tests/integration/stax/test_parsing_errors.py +++ b/tests/integration/stax/test_parsing_errors.py @@ -43,8 +43,6 @@ app.review.tap() app.assert_screen("tpe_review_0_02_partial") app.review.tap() - app.expert_mode_splash() - app.review.tap() app.assert_screen("tpe_review_0_03") app.review.tap() verify_err_reject_response(app, "invalid_tag") @@ -57,11 +55,9 @@ app.review.tap() app.assert_screen("tpe_review_0_02_full") app.review.tap() - app.assert_screen("expert_mode_splash") - app.review.tap() app.assert_screen("tpe_review_0_03_full") app.review.tap() - app.assert_screen("expert_mode_splash") + app.expert_mode_splash() app.review.tap() app.assert_screen("tpe_review_0_04_full") app.review.tap() diff --git a/tests/integration/stax/test_sign_transfer.py b/tests/integration/stax/test_sign_transfer.py index c1bcc73bd..11c666555 100755 --- a/tests/integration/stax/test_sign_transfer.py +++ b/tests/integration/stax/test_sign_transfer.py @@ -39,13 +39,10 @@ app.assert_screen("tst_review_002") app.review.tap() - app.enable_expert_mode() - - app.review.tap() - app.assert_screen("tst_expert_splash") + app.assert_screen("tst_review_003") app.review.tap() - app.assert_screen("tst_review_003") + app.enable_expert_mode() app.review.tap() app.assert_screen("tst_expert_splash") @@ -75,9 +72,6 @@ app.review.tap() app.assert_screen("tst_review_002") - app.review.tap() - app.assert_screen("tst_expert_splash") - app.review.tap() app.assert_screen("tst_review_003") diff --git a/tests/integration/stax/test_sign_transfer_without_hash.py b/tests/integration/stax/test_sign_transfer_without_hash.py index 41840b07c..277011488 100755 --- a/tests/integration/stax/test_sign_transfer_without_hash.py +++ b/tests/integration/stax/test_sign_transfer_without_hash.py @@ -38,14 +38,11 @@ app.review.tap() app.assert_screen("review_1") - app.review.tap() - app.expert_mode_splash() - app.review.tap() app.assert_screen("review_2") app.review.tap() - app.assert_screen("expert_mode_splash") + app.expert_mode_splash() app.review.tap() app.assert_screen("review_3") diff --git a/tests/unit/ctest/tests_parser.c b/tests/unit/ctest/tests_parser.c index 21f1a65ec..282ccc024 100644 --- a/tests/unit/ctest/tests_parser.c +++ b/tests/unit/ctest/tests_parser.c @@ -253,7 +253,7 @@ CTEST2(operation_parser, check_transaction_complexity) {"Destination", false, 5}, // {"Option", _, 6}, // {"Tuple", _, 7}, - {"Entrypoint", true, 8}, + {"Entrypoint", false, 8}, {"Parameter", true, 9}, }; check_field_complexity(data, str, fields_check, sizeof(fields_check)); @@ -281,7 +281,7 @@ CTEST2(operation_parser, check_double_transaction_complexity) {"Destination", false, 11}, // {"Option", _, 12}, // {"Tuple", _, 13}, - {"Entrypoint", true, 14}, + {"Entrypoint", false, 14}, {"Parameter", true, 15}, }; check_field_complexity(data, str, fields_check, sizeof(fields_check)); From b7ebd979300b5cf44d5ac39d595182d1f25061f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 19 Dec 2023 09:57:12 +0100 Subject: [PATCH 25/78] Tests: rename specific device tests Otherwise, it will make tests conflict between them with pytest --- ...ps.py => test_nanos_regression_batched_ops.py} | 0 ...t_nanosp_regression_potential_empty_screen.py} | 0 ...ion_press_right_works_across_apdu_recieves.py} | 0 ...ps.py => test_nanox_regression_batched_ops.py} | 0 .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00008.png | Bin .../00009.png | Bin .../00010.png | Bin .../00011.png | Bin .../00012.png | Bin .../00013.png | Bin .../00014.png | Bin .../00015.png | Bin .../00016.png | Bin .../00017.png | Bin .../00018.png | Bin .../00019.png | Bin .../00020.png | Bin .../00021.png | Bin .../00022.png | Bin .../00023.png | Bin .../00024.png | Bin .../00025.png | Bin .../00026.png | Bin .../00027.png | Bin .../00028.png | Bin .../00029.png | Bin .../00030.png | Bin .../00031.png | Bin .../00032.png | Bin .../00033.png | Bin .../00034.png | Bin .../00035.png | Bin .../test_nanos_regression_batched_ops/00036.png | Bin 0 -> 404 bytes .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00008.png | Bin .../00009.png | Bin .../00010.png | Bin .../00011.png | Bin .../00012.png | Bin .../00013.png | Bin .../00014.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 .../00008.png | Bin .../00009.png | Bin .../00010.png | Bin .../00011.png | Bin .../00012.png | Bin .../00013.png | Bin .../00014.png | Bin .../00015.png | Bin .../00016.png | Bin .../00017.png | Bin .../00018.png | Bin .../00019.png | Bin .../test_nanox_regression_batched_ops/00020.png | Bin 0 -> 459 bytes 85 files changed, 0 insertions(+), 0 deletions(-) rename tests/integration/nano/nanos/{regression_batched_ops.py => test_nanos_regression_batched_ops.py} (100%) rename tests/integration/nano/nanosp/{regression_potential_empty_screen.py => test_nanosp_regression_potential_empty_screen.py} (100%) rename tests/integration/nano/nanosp/{regression_press_right_works_across_apdu_recieves.py => test_nanosp_regression_press_right_works_across_apdu_recieves.py} (100%) rename tests/integration/nano/nanox/{regression_batched_ops.py => test_nanox_regression_batched_ops.py} (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00000.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00001.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00002.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00003.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00004.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00005.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00006.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00007.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00008.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00009.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00010.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00011.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00012.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00013.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00014.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00015.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00016.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00017.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00018.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00019.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00020.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00021.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00022.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00023.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00024.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00025.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00026.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00027.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00028.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00029.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00030.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00031.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00032.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00033.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00034.png (100%) rename tests/integration/nano/snapshots/nanos/{regression_batched_ops => test_nanos_regression_batched_ops}/00035.png (100%) create mode 100644 tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00036.png rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00000.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00001.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00002.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00003.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00004.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00005.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00006.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00007.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00008.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00009.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00010.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00011.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00012.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00013.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_potential_empty_screen => test_nanosp_regression_potential_empty_screen}/00014.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_press_right_works_across_apdu_recieves => test_nanosp_regression_press_right_works_across_apdu_recieves}/00000.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_press_right_works_across_apdu_recieves => test_nanosp_regression_press_right_works_across_apdu_recieves}/00001.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_press_right_works_across_apdu_recieves => test_nanosp_regression_press_right_works_across_apdu_recieves}/00002.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_press_right_works_across_apdu_recieves => test_nanosp_regression_press_right_works_across_apdu_recieves}/00003.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_press_right_works_across_apdu_recieves => test_nanosp_regression_press_right_works_across_apdu_recieves}/00004.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_press_right_works_across_apdu_recieves => test_nanosp_regression_press_right_works_across_apdu_recieves}/00005.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_press_right_works_across_apdu_recieves => test_nanosp_regression_press_right_works_across_apdu_recieves}/00006.png (100%) rename tests/integration/nano/snapshots/nanosp/{regression_press_right_works_across_apdu_recieves => test_nanosp_regression_press_right_works_across_apdu_recieves}/00007.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00000.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00001.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00002.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00003.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00004.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00005.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00006.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00007.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00008.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00009.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00010.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00011.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00012.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00013.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00014.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00015.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00016.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00017.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00018.png (100%) rename tests/integration/nano/snapshots/nanox/{regression_batched_ops => test_nanox_regression_batched_ops}/00019.png (100%) create mode 100644 tests/integration/nano/snapshots/nanox/test_nanox_regression_batched_ops/00020.png diff --git a/tests/integration/nano/nanos/regression_batched_ops.py b/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py similarity index 100% rename from tests/integration/nano/nanos/regression_batched_ops.py rename to tests/integration/nano/nanos/test_nanos_regression_batched_ops.py diff --git a/tests/integration/nano/nanosp/regression_potential_empty_screen.py b/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py similarity index 100% rename from tests/integration/nano/nanosp/regression_potential_empty_screen.py rename to tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py diff --git a/tests/integration/nano/nanosp/regression_press_right_works_across_apdu_recieves.py b/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py similarity index 100% rename from tests/integration/nano/nanosp/regression_press_right_works_across_apdu_recieves.py rename to tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py diff --git a/tests/integration/nano/nanox/regression_batched_ops.py b/tests/integration/nano/nanox/test_nanox_regression_batched_ops.py similarity index 100% rename from tests/integration/nano/nanox/regression_batched_ops.py rename to tests/integration/nano/nanox/test_nanox_regression_batched_ops.py diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00000.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00000.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00000.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00000.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00001.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00001.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00001.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00001.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00002.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00002.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00002.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00002.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00003.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00003.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00003.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00003.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00004.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00004.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00004.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00004.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00005.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00005.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00005.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00005.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00006.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00006.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00006.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00006.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00007.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00007.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00007.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00007.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00008.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00008.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00008.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00008.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00009.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00009.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00009.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00009.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00010.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00010.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00010.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00010.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00011.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00011.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00011.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00011.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00012.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00012.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00012.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00012.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00013.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00013.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00013.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00013.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00014.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00014.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00014.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00014.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00015.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00015.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00015.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00015.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00016.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00016.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00016.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00016.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00017.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00017.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00017.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00017.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00018.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00018.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00018.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00018.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00019.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00019.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00019.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00019.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00020.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00020.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00020.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00020.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00021.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00021.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00021.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00021.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00022.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00022.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00022.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00022.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00023.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00023.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00023.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00023.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00024.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00024.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00024.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00024.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00025.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00025.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00025.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00025.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00026.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00026.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00026.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00026.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00027.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00027.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00027.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00027.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00028.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00028.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00028.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00028.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00029.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00029.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00029.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00029.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00030.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00030.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00030.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00030.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00031.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00031.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00031.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00031.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00032.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00032.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00032.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00032.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00033.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00033.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00033.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00033.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00034.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00034.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00034.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00034.png diff --git a/tests/integration/nano/snapshots/nanos/regression_batched_ops/00035.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00035.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/regression_batched_ops/00035.png rename to tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00035.png diff --git a/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00036.png b/tests/integration/nano/snapshots/nanos/test_nanos_regression_batched_ops/00036.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0e238204773a5ce6d51d5a1ce25147473482ed GIT binary patch literal 404 zcmV;F0c-w=P)vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S00000000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6 Date: Thu, 21 Dec 2023 12:20:53 +0100 Subject: [PATCH 26/78] Tests: add a display argument --- README.md | 1 - tests/integration/nano/utils/app.py | 16 ++++++++++++++-- tests/integration/test_runtime.sh | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 70b5233fd..3ef7db652 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,6 @@ You can run an individual test from the test container. You should see the app p ./tests/integration/nano/.py \ --device $DEVICE \ --port $PORT \ - --display headless \ --vnc-port 41000 \ --app app/bin/app.elf ``` diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index b8c5d9aad..8571516d3 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -421,6 +421,11 @@ def nano_app(seed: str = DEFAULT_SEED) -> Generator[TezosAppScreen, None, None]: type=int, default=5000, help="Port") + parser.add_argument("--display", + action="store_const", + const=True, + default=False, + help="Emulate the app") parser.add_argument("--golden-run", action='store_const', const=True, @@ -433,10 +438,17 @@ def nano_app(seed: str = DEFAULT_SEED) -> Generator[TezosAppScreen, None, None]: args, unknown_args = parser.parse_known_args() firmware = next(fw for fw in FIRMWARES if fw.device == args.device) - speculos_args = [ + + speculos_args = unknown_args + + if args.display: + speculos_args += ["--display", "qt"] + + speculos_args += [ "--api-port", f"{args.port}", "--seed", seed - ] + unknown_args + ] + backend = SpeculosTezosBackend(args.app, firmware, port=args.port, diff --git a/tests/integration/test_runtime.sh b/tests/integration/test_runtime.sh index fc263b295..7cc2f03bd 100644 --- a/tests/integration/test_runtime.sh +++ b/tests/integration/test_runtime.sh @@ -390,7 +390,6 @@ run_a_test() { python3 $CMD \ --device $TARGET \ --port $PORT \ - --display headless \ --apdu-port 0 \ --app $app_dir/app.elf fi From fd6c70577aad47b5c430e0bd444101b9993ebe4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 21 Dec 2023 12:54:37 +0100 Subject: [PATCH 27/78] Tests: enforce apdu-port=0 --- tests/integration/nano/utils/app.py | 1 + tests/integration/test_runtime.sh | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index 8571516d3..97f9065fb 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -446,6 +446,7 @@ def nano_app(seed: str = DEFAULT_SEED) -> Generator[TezosAppScreen, None, None]: speculos_args += [ "--api-port", f"{args.port}", + "--apdu-port", "0", "--seed", seed ] diff --git a/tests/integration/test_runtime.sh b/tests/integration/test_runtime.sh index 7cc2f03bd..fe3562d0a 100644 --- a/tests/integration/test_runtime.sh +++ b/tests/integration/test_runtime.sh @@ -390,7 +390,6 @@ run_a_test() { python3 $CMD \ --device $TARGET \ --port $PORT \ - --apdu-port 0 \ --app $app_dir/app.elf fi ;; From eb92119133aec98702e21223b4a55b2620e406c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 21 Dec 2023 12:16:28 +0100 Subject: [PATCH 28/78] Tests: add a conftest.py file and run tests with pytest --- tests/integration/nano/conftest.py | 96 ++++++++++++++ .../test_nanos_regression_batched_ops.py | 29 ++--- ...anosp_regression_potential_empty_screen.py | 29 ++--- ..._press_right_works_across_apdu_recieves.py | 29 ++--- .../test_nanox_regression_batched_ops.py | 29 ++--- tests/integration/nano/test_basic.py | 123 +++++++++--------- .../integration/nano/test_blindsign_reject.py | 43 +++--- .../nano/test_blindsign_too_deep.py | 83 ++++++------ .../nano/test_blindsign_too_large.py | 29 ++--- .../nano/test_change_sign_instruction.py | 35 +++-- .../nano/test_ensure_always_clearsign.py | 29 ++--- tests/integration/nano/test_get_pk.py | 43 +++--- tests/integration/nano/test_git.py | 13 +- tests/integration/nano/test_mixing_command.py | 55 ++++---- tests/integration/nano/test_parsing_errors.py | 82 ++++++------ tests/integration/nano/test_provide_pk.py | 77 ++++++----- .../test_regression_continue_after_reject.py | 28 ++-- tests/integration/nano/test_reject_pk.py | 11 +- .../nano/test_reject_transaction.py | 19 ++- tests/integration/nano/test_sign_ballot.py | 29 ++--- .../integration/nano/test_sign_delegation.py | 29 ++--- .../nano/test_sign_failing_noop.py | 29 ++--- .../nano/test_sign_increase_paid_storage.py | 29 ++--- .../nano/test_sign_micheline_without_hash.py | 29 ++--- .../integration/nano/test_sign_origination.py | 29 ++--- tests/integration/nano/test_sign_proposals.py | 29 ++--- .../test_sign_register_global_constant.py | 29 ++--- tests/integration/nano/test_sign_reveal.py | 29 ++--- .../nano/test_sign_sc_rollup_add_messages.py | 29 ++--- ...t_sign_sc_rollup_execute_outbox_message.py | 29 ++--- .../nano/test_sign_sc_rollup_originate.py | 29 ++--- .../nano/test_sign_set_consensus_key.py | 29 ++--- .../nano/test_sign_set_deposit_limit.py | 29 ++--- .../nano/test_sign_simple_transaction.py | 29 ++--- .../integration/nano/test_sign_transaction.py | 29 ++--- .../nano/test_sign_transfer_ticket.py | 29 ++--- .../nano/test_sign_with_another_seed.py | 39 +++--- .../nano/test_sign_with_long_hash.py | 29 ++--- .../nano/test_sign_with_small_packet.py | 45 +++---- .../nano/test_too_complex_transaction.py | 23 ++-- tests/integration/nano/test_too_deep.py | 51 ++++---- tests/integration/nano/test_too_large.py | 19 ++- .../test_tz1_bip25519_sign_micheline_basic.py | 35 +++-- .../test_tz1_ed25519_sign_micheline_basic.py | 35 +++-- .../nano/test_tz2_sign_micheline_basic.py | 32 +++-- .../nano/test_tz3_sign_micheline_basic.py | 32 +++-- .../nano/test_unimplemented_commands.py | 37 +++--- tests/integration/nano/test_version.py | 13 +- .../nano/test_wrong_apdu_length.py | 45 ++++--- tests/integration/nano/test_wrong_class.py | 43 +++--- .../nano/test_wrong_derivation_path.py | 27 ++-- .../nano/test_wrong_derivation_type.py | 21 ++- tests/integration/nano/test_wrong_index.py | 27 ++-- tests/integration/nano/utils/app.py | 55 -------- tests/integration/test_runtime.sh | 10 +- 55 files changed, 989 insertions(+), 1004 deletions(-) create mode 100644 tests/integration/nano/conftest.py diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py new file mode 100644 index 000000000..80f767078 --- /dev/null +++ b/tests/integration/nano/conftest.py @@ -0,0 +1,96 @@ +import pytest + +from pathlib import Path +from ragger.firmware import Firmware +from typing import Callable, Generator, List, Optional, Tuple, Union + +from utils.app import TezosAppScreen, SpeculosTezosBackend, DEFAULT_SEED +from utils.backend import TezosBackend, APP_KIND + +FIRMWARES: List[Firmware] = [ + Firmware.NANOS, + Firmware.NANOSP, + Firmware.NANOX, +] + +DEVICES: List[str] = list(map(lambda fw: fw.device, FIRMWARES)) + +def pytest_addoption(parser): + parser.addoption("-D", "--device", + type=str, + choices=DEVICES, + help="Device type: nanos | nanosp | nanox", + required=True) + parser.addoption("-P", "--port", + type=int, + default=5000, + help="Port") + parser.addoption("--display", + action="store_const", + const=True, + default=False, + help="Emulate the app") + parser.addoption("--golden-run", + action="store_const", + const=True, + default=False, + help="Golden run") + parser.addoption("--app", + type=str, + help="App", + required=True) + +@pytest.fixture(scope="session") +def firmware(pytestconfig) -> Firmware : + device = pytestconfig.getoption("device") + return next(fw for fw in FIRMWARES if fw.device == device) + +@pytest.fixture(scope="session") +def port(pytestconfig) -> int : + return pytestconfig.getoption("port") + +@pytest.fixture(scope="session") +def display(pytestconfig) -> bool : + return pytestconfig.getoption("display") + +@pytest.fixture(scope="session") +def golden_run(pytestconfig) -> bool: + return pytestconfig.getoption("golden_run") + +@pytest.fixture(scope="session") +def app_path(pytestconfig) -> Path: + return Path(pytestconfig.getoption("app")) + +@pytest.fixture(scope="function") +def seed(request) -> str: + param = getattr(request, "param", None) + return param.get("seed", DEFAULT_SEED) if param else DEFAULT_SEED + +@pytest.fixture(scope="function") +def backend(app_path: Path, + firmware: Firmware, + port: int, + display: bool, + seed: str, + speculos_args: List[str] = []) -> Generator[SpeculosTezosBackend, None, None]: + + if display: + speculos_args += ["--display", "qt"] + + speculos_args += [ + "--api-port", f"{ port }", + "--apdu-port", "0", + "--seed", seed + ] + + backend = SpeculosTezosBackend(app_path, + firmware, + port=port, + args=speculos_args) + + with backend as b: + yield b + +@pytest.fixture(scope="function") +def app(backend: SpeculosTezosBackend, golden_run: bool): + return TezosAppScreen(backend, APP_KIND.WALLET, golden_run) diff --git a/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py b/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py index e41d24344..791079ee3 100755 --- a/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py +++ b/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py @@ -23,7 +23,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Transaction @@ -39,23 +39,22 @@ # Amount: 0.06 XTZ # Destination: KT1CYT8oACUcCSNTu2qfgB4fj5bD7szYrpti -if __name__ == "__main__": +def test_nanos_regression_batched_ops(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c001597c45b11b421bb806a0c56c5da5638bf4b1adbf0e617090006a09c010000bac799dfc7f6af2ff0b95f83d023e68c895020baffff086a65616e5f626f620000009a020000009507070200000000050800c6bab5ccc8d891cd8de4b6f7070707020000004b0704030b070702000000040505030b070705050a0000001503f01167865dc63dfee0e31251329ceab660d9460607070a000000150107b21fca96c5763f67b286752c7aaefc5931d15a030b050800a9df9fc1e7eaa7a9c1f7bd87a9ba9cadf5b5b2cd829deea2b7fef9070707020000000005050509030b6c01ee572f02e5be5d097ba17369789582882e8abb8790d627063202e0d403012b704944f5b5fd30eed2ab4385478488e09fe04a0000") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c001597c45b11b421bb806a0c56c5da5638bf4b1adbf0e617090006a09c010000bac799dfc7f6af2ff0b95f83d023e68c895020baffff086a65616e5f626f620000009a020000009507070200000000050800c6bab5ccc8d891cd8de4b6f7070707020000004b0704030b070702000000040505030b070705050a0000001503f01167865dc63dfee0e31251329ceab660d9460607070a000000150107b21fca96c5763f67b286752c7aaefc5931d15a030b050800a9df9fc1e7eaa7a9c1f7bd87a9ba9cadf5b5b2cd829deea2b7fef9070707020000000005050509030b6c01ee572f02e5be5d097ba17369789582882e8abb8790d627063202e0d403012b704944f5b5fd30eed2ab4385478488e09fe04a0000") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py b/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py index 11bbf540f..52b152821 100755 --- a/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py +++ b/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py @@ -23,7 +23,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Transfer ticket @@ -40,23 +40,22 @@ # S # S -if __name__ == "__main__": +def test_nanosp_regression_potential_empty_screen(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000009e00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000002037a0000000a076501000000013100020000ffdd6102321bc251e4a5190ad5b12b251069d9b4010100000000000000000000000000000000000000000000000008530a0a530a530a53") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000009e00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000002037a0000000a076501000000013100020000ffdd6102321bc251e4a5190ad5b12b251069d9b4010100000000000000000000000000000000000000000000000008530a0a530a530a53") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py b/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py index 59c251305..e3b05ca5a 100755 --- a/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py +++ b/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py @@ -23,28 +23,27 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Expression: {IF_NONE {{SWAP;IF {DIP {{DROP 1;PUSH unit Unit;PUSH bool True;PUSH string ";L\\S?p$-Fq)VDg\n]te\no4v0_8)\""}}} {{DROP 2;PUSH unit Unit;PUSH bool False;PUSH string "Li-%*edF6~?E[5Kmu?dyviwJ^2\"\\d$FyQ>>!>D$g(Qg";PUSH string "*Tx bytes: - with app.expect_apdu_failure(StatusCode.REJECT): - app.backend.sign(DEFAULT_ACCOUNT, expression, with_hash=False) - return b'' + def expected_failure_send() -> bytes: + with app.expect_apdu_failure(StatusCode.REJECT): + app.backend.sign(DEFAULT_ACCOUNT, expression, with_hash=False) + return b'' - def navigate() -> None: - app.navigate_until_text(Screen_text.Blind_switch, Path(test_name) / "reject_from_blind" / "clear") - app.navigate_until_text(Screen_text.Sign_reject, Path(test_name) / "reject_from_blind" / "blind") + def navigate() -> None: + app.navigate_until_text(Screen_text.Blind_switch, Path(test_name) / "reject_from_blind" / "clear") + app.navigate_until_text(Screen_text.Sign_reject, Path(test_name) / "reject_from_blind" / "blind") - send_and_navigate( - send=expected_failure_send, - navigate=navigate) + send_and_navigate( + send=expected_failure_send, + navigate=navigate) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_blindsign_too_deep.py b/tests/integration/nano/test_blindsign_too_deep.py index f2622f137..47d31defa 100755 --- a/tests/integration/nano/test_blindsign_too_deep.py +++ b/tests/integration/nano/test_blindsign_too_deep.py @@ -16,65 +16,64 @@ from multiprocessing import Process, Queue from pathlib import Path -from utils.app import nano_app, Screen, Screen_text, DEFAULT_ACCOUNT +from utils.app import Screen, Screen_text, DEFAULT_ACCOUNT from utils.message import Message # Expression: {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{42}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} -if __name__ == "__main__": +def test_blindsign_too_deep(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - expression = Message.from_bytes("0502000000f702000000f202000000ed02000000e802000000e302000000de02000000d902000000d402000000cf02000000ca02000000c502000000c002000000bb02000000b602000000b102000000ac02000000a702000000a2020000009d02000000980200000093020000008e02000000890200000084020000007f020000007a02000000750200000070020000006b02000000660200000061020000005c02000000570200000052020000004d02000000480200000043020000003e02000000390200000034020000002f020000002a02000000250200000020020000001b02000000160200000011020000000c02000000070200000002002a") + expression = Message.from_bytes("0502000000f702000000f202000000ed02000000e802000000e302000000de02000000d902000000d402000000cf02000000ca02000000c502000000c002000000bb02000000b602000000b102000000ac02000000a702000000a2020000009d02000000980200000093020000008e02000000890200000084020000007f020000007a02000000750200000070020000006b02000000660200000061020000005c02000000570200000052020000004d02000000480200000043020000003e02000000390200000034020000002f020000002a02000000250200000020020000001b02000000160200000011020000000c02000000070200000002002a") - if app.backend.firmware.device == "nanos": - app.setup_blind_signing() + if app.backend.firmware.device == "nanos": + app.setup_blind_signing() - def send(result_queue: Queue) -> None: - res = app.backend.sign(DEFAULT_ACCOUNT, expression, with_hash=True) - result_queue.put(res) - def assert_screen_i(i): - app.assert_screen(f"{str(i).zfill(5)}", path=(Path(test_name) / "clear")) + def send(result_queue: Queue) -> None: + res = app.backend.sign(DEFAULT_ACCOUNT, expression, with_hash=True) + result_queue.put(res) + def assert_screen_i(i): + app.assert_screen(f"{str(i).zfill(5)}", path=(Path(test_name) / "clear")) - result_queue: Queue = Queue() - send_process = Process(target=send, args=(result_queue,)) - send_process.start() + result_queue: Queue = Queue() + send_process = Process(target=send, args=(result_queue,)) + send_process.start() - app.backend.wait_for_text_not_on_screen(Screen_text.Home) + app.backend.wait_for_text_not_on_screen(Screen_text.Home) - for i in range(4): - assert_screen_i(i) - app.backend.right_click() + for i in range(4): + assert_screen_i(i) + app.backend.right_click() - # 'Switch to blindsigning' screen - assert_screen_i(i+1) + # 'Switch to blindsigning' screen + assert_screen_i(i+1) - def blind_navigate() -> None: - app.navigate_until_text(Screen_text.Sign_accept, Path(test_name) / "blind") - navigate_process = Process(target=blind_navigate) - navigate_process.start() + def blind_navigate() -> None: + app.navigate_until_text(Screen_text.Sign_accept, Path(test_name) / "blind") + navigate_process = Process(target=blind_navigate) + navigate_process.start() - app.backend.both_click() + app.backend.both_click() - navigate_process.join() - assert navigate_process.exitcode == 0, "Should have terminate successfully" + navigate_process.join() + assert navigate_process.exitcode == 0, "Should have terminate successfully" - send_process.join() - assert send_process.exitcode == 0, "Should have terminate successfully" + send_process.join() + assert send_process.exitcode == 0, "Should have terminate successfully" - data = result_queue.get() - else: - data = app.blind_sign(DEFAULT_ACCOUNT, - expression, - with_hash=True, - path=test_name) + data = result_queue.get() + else: + data = app.blind_sign(DEFAULT_ACCOUNT, + expression, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=expression, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=expression, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_blindsign_too_large.py b/tests/integration/nano/test_blindsign_too_large.py index 0d205aacb..97c59565a 100755 --- a/tests/integration/nano/test_blindsign_too_large.py +++ b/tests/integration/nano/test_blindsign_too_large.py @@ -15,28 +15,27 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Expression: 12345678901234567890123456789012345678901234567890123456789012345678901234567890 -if __name__ == "__main__": +def test_blindsign_too_large(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("050092abf8e3d9e5f8cfd9ae8a9fe5f28ea1d5b5abf1af82dae8a4b68df3d1889eb6f988f5e8d31a") + message = Message.from_bytes("050092abf8e3d9e5f8cfd9ae8a9fe5f28ea1d5b5abf1af82dae8a4b68df3d1889eb6f988f5e8d31a") - data = app.blind_sign(DEFAULT_ACCOUNT, - message=message, - with_hash=True, - path=test_name) + data = app.blind_sign(DEFAULT_ACCOUNT, + message=message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_change_sign_instruction.py b/tests/integration/nano/test_change_sign_instruction.py index 8a124b819..ffd2102e7 100755 --- a/tests/integration/nano/test_change_sign_instruction.py +++ b/tests/integration/nano/test_change_sign_instruction.py @@ -13,32 +13,31 @@ # See the License for the specific language governing permissions and # limitations under the License. -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.backend import INS, StatusCode from utils.message import Message -if __name__ == "__main__": - with nano_app() as app: +def test_change_sign_instruction(app): - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") - payload=message.bytes + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") + payload=message.bytes - app.backend._ask_sign(INS.SIGN_WITH_HASH, DEFAULT_ACCOUNT) + app.backend._ask_sign(INS.SIGN_WITH_HASH, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.INVALID_INS): - app.backend._continue_sign(INS.SIGN, - payload, - last=True) + with app.expect_apdu_failure(StatusCode.INVALID_INS): + app.backend._continue_sign(INS.SIGN, + payload, + last=True) - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.INVALID_INS): - app.backend._continue_sign(INS.SIGN_WITH_HASH, - payload, - last=True) + with app.expect_apdu_failure(StatusCode.INVALID_INS): + app.backend._continue_sign(INS.SIGN_WITH_HASH, + payload, + last=True) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_ensure_always_clearsign.py b/tests/integration/nano/test_ensure_always_clearsign.py index 5e193cd09..5bdca4697 100755 --- a/tests/integration/nano/test_ensure_always_clearsign.py +++ b/tests/integration/nano/test_ensure_always_clearsign.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, DEFAULT_ACCOUNT +from utils.app import DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Transaction @@ -26,23 +26,22 @@ # Entrypoint: root # Data: {pair "[" (pair "Z" (pair "Y" (pair "X" (pair "W" (pair "V" (pair "U" (pair "T" (pair "S" (pair "R" (pair "Q" (pair "P" (pair "O" (pair "N" (pair "M" (pair "L" (pair "K" (pair "J" (pair "I" (pair "H" (pair "G" (pair "F" (pair "E" (pair "D" (pair "C" (pair "B" {})))))))))))))))))))))))));pair 10 (pair 9 (pair 8 (pair 7 (pair 6 (pair 5 (pair 4 (pair 3 (pair 2 (pair 1 {})))))))))} -if __name__ == "__main__": +def test_ensure_always_clearsign(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040001000000000000000000000000000000000000000000ff01000001070200000102076501000000015b076501000000015a0765010000000159076501000000015807650100000001570765010000000156076501000000015507650100000001540765010000000153076501000000015207650100000001510765010000000150076501000000014f076501000000014e076501000000014d076501000000014c076501000000014b076501000000014a0765010000000149076501000000014807650100000001470765010000000146076501000000014507650100000001440765010000000143076501000000014202000000000765000a0765000907650008076500070765000607650005076500040765000307650002076500010200000000") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040001000000000000000000000000000000000000000000ff01000001070200000102076501000000015b076501000000015a0765010000000159076501000000015807650100000001570765010000000156076501000000015507650100000001540765010000000153076501000000015207650100000001510765010000000150076501000000014f076501000000014e076501000000014d076501000000014c076501000000014b076501000000014a0765010000000149076501000000014807650100000001470765010000000146076501000000014507650100000001440765010000000143076501000000014202000000000765000a0765000907650008076500070765000607650005076500040765000307650002076500010200000000") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_get_pk.py b/tests/integration/nano/test_get_pk.py index 4b8796788..0593b7c53 100755 --- a/tests/integration/nano/test_get_pk.py +++ b/tests/integration/nano/test_get_pk.py @@ -14,32 +14,31 @@ # limitations under the License. from utils.account import Account, SIGNATURE_TYPE -from utils.app import nano_app, Screen +from utils.app import Screen -if __name__ == "__main__": - with nano_app() as app: +def test_get_pk(app): - accounts = [ - Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.ED25519, - "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY"), - Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.SECP256K1, - "sppk7bVy617DmGvXsMqcwsiLtnedTN2trUi5ugXcNig7en4rHJyunK1"), - Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.SECP256R1, - "p2pk67fq5pzuMMABZ9RDrooYbLrgmnQbLt8z7PTGM9mskf7LXS5tdBG"), - Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.BIP32_ED25519, - "edpkumJgSsSxkpiB5hmTq6eZcrmc6BsJtLAhYceFTiziFqje4mongz") - ] + accounts = [ + Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.ED25519, + "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY"), + Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.SECP256K1, + "sppk7bVy617DmGvXsMqcwsiLtnedTN2trUi5ugXcNig7en4rHJyunK1"), + Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.SECP256R1, + "p2pk67fq5pzuMMABZ9RDrooYbLrgmnQbLt8z7PTGM9mskf7LXS5tdBG"), + Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.BIP32_ED25519, + "edpkumJgSsSxkpiB5hmTq6eZcrmc6BsJtLAhYceFTiziFqje4mongz") + ] - for account in accounts: + for account in accounts: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - data = app.backend.get_public_key(account, with_prompt=False) + data = app.backend.get_public_key(account, with_prompt=False) - app.checker.check_public_key(account, data) + app.checker.check_public_key(account, data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_git.py b/tests/integration/nano/test_git.py index be59c08d5..2781b17f0 100755 --- a/tests/integration/nano/test_git.py +++ b/tests/integration/nano/test_git.py @@ -13,15 +13,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -from utils.app import nano_app, Screen +from utils.app import Screen -if __name__ == "__main__": - with nano_app() as app: +def test_git(app): - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - data = app.backend.git() + data = app.backend.git() - app.checker.check_commit(data) + app.checker.check_commit(data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_mixing_command.py b/tests/integration/nano/test_mixing_command.py index 1b38efa1b..b49af6e4b 100755 --- a/tests/integration/nano/test_mixing_command.py +++ b/tests/integration/nano/test_mixing_command.py @@ -13,46 +13,45 @@ # See the License for the specific language governing permissions and # limitations under the License. -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.backend import INS, StatusCode -if __name__ == "__main__": - with nano_app() as app: +def test_mixing_command(app): - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): - app.backend.version() + app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) + with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + app.backend.version() - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - app.backend._ask_sign(INS.SIGN_WITH_HASH, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): - app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) + app.backend._ask_sign(INS.SIGN_WITH_HASH, DEFAULT_ACCOUNT) + with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): - app.backend._ask_sign(INS.SIGN_WITH_HASH, DEFAULT_ACCOUNT) + app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) + with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + app.backend._ask_sign(INS.SIGN_WITH_HASH, DEFAULT_ACCOUNT) - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): - app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=True) + app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) + with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=True) - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): - app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) + app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) + with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) - with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): - app.backend.git() + app.backend._ask_sign(INS.SIGN, DEFAULT_ACCOUNT) + with app.expect_apdu_failure(StatusCode.UNEXPECTED_STATE): + app.backend.git() - app.quit() + app.quit() diff --git a/tests/integration/nano/test_parsing_errors.py b/tests/integration/nano/test_parsing_errors.py index 7d449b087..4a01f9609 100755 --- a/tests/integration/nano/test_parsing_errors.py +++ b/tests/integration/nano/test_parsing_errors.py @@ -15,73 +15,71 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.backend import StatusCode from utils.message import Message # original bytes : 0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316 -if __name__ == "__main__": +def test_parsing_errors(app): test_name = Path(__file__).stem def make_path(name: str) -> Path: return Path(test_name) / name - with nano_app() as app: + app.setup_expert_mode() - app.setup_expert_mode() + unknown_magic_bytes_message = Message.from_bytes("0100000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") - unknown_magic_bytes_message = Message.from_bytes("0100000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") + app.parsing_error_signing(DEFAULT_ACCOUNT, + unknown_magic_bytes_message, + with_hash=True, + path=make_path("unknown_magic_bytes")) - app.parsing_error_signing(DEFAULT_ACCOUNT, - unknown_magic_bytes_message, - with_hash=True, - path=make_path("unknown_magic_bytes")) + app.assert_screen(Screen.Home) - app.assert_screen(Screen.Home) + unknown_operation_message = Message.from_bytes("03000000000000000000000000000000000000000000000000000000000000000001016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") - unknown_operation_message = Message.from_bytes("03000000000000000000000000000000000000000000000000000000000000000001016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") + app.parsing_error_signing(DEFAULT_ACCOUNT, + unknown_operation_message, + with_hash=True, + path=make_path("unknown_operation")) - app.parsing_error_signing(DEFAULT_ACCOUNT, - unknown_operation_message, - with_hash=True, - path=make_path("unknown_operation")) + app.assert_screen(Screen.Home) - app.assert_screen(Screen.Home) + one_byte_removed_inside_message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e010000000000000000000000000000000000000000ff02000000020316") - one_byte_removed_inside_message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e010000000000000000000000000000000000000000ff02000000020316") + app.parsing_error_signing(DEFAULT_ACCOUNT, + one_byte_removed_inside_message, + with_hash=True, + path=make_path("one_byte_removed_inside")) - app.parsing_error_signing(DEFAULT_ACCOUNT, - one_byte_removed_inside_message, - with_hash=True, - path=make_path("one_byte_removed_inside")) + app.assert_screen(Screen.Home) - app.assert_screen(Screen.Home) + one_byte_added_at_the_end_message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff0200000002031645") - one_byte_added_at_the_end_message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff0200000002031645") + app.parsing_error_signing(DEFAULT_ACCOUNT, + one_byte_added_at_the_end_message, + with_hash=True, + path=make_path("one_byte_added_at_the_end")) - app.parsing_error_signing(DEFAULT_ACCOUNT, - one_byte_added_at_the_end_message, - with_hash=True, - path=make_path("one_byte_added_at_the_end")) + app.assert_screen(Screen.Home) - app.assert_screen(Screen.Home) + one_byte_added_inside_message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e0100000000000000000000000000000000000000000000ff02000000020316") - one_byte_added_inside_message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e0100000000000000000000000000000000000000000000ff02000000020316") + app.parsing_error_signing(DEFAULT_ACCOUNT, + one_byte_added_inside_message, + with_hash=True, + path=make_path("one_byte_added_inside")) - app.parsing_error_signing(DEFAULT_ACCOUNT, - one_byte_added_inside_message, - with_hash=True, - path=make_path("one_byte_added_inside")) + app.assert_screen(Screen.Home) - app.assert_screen(Screen.Home) + wrong_last_packet_message = Message.from_bytes("030000000000000000000000000000000000000000000000000000000000000000ce00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c63966303966323935326433343532386337333366393436313563666333396263353535363139666335353064643461363762613232303863653865383637616133643133613665663939646662653332633639373461613961323135306432316563613239633333343965353963313362393038316631") - wrong_last_packet_message = Message.from_bytes("030000000000000000000000000000000000000000000000000000000000000000ce00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c63966303966323935326433343532386337333366393436313563666333396263353535363139666335353064643461363762613232303863653865383637616133643133613665663939646662653332633639373461613961323135306432316563613239633333343965353963313362393038316631") + app.hard_failing_signing(DEFAULT_ACCOUNT, + wrong_last_packet_message, + with_hash=True, + status_code=StatusCode.UNEXPECTED_SIGN_STATE, + path=make_path("wrong_last_packet")) - app.hard_failing_signing(DEFAULT_ACCOUNT, - wrong_last_packet_message, - with_hash=True, - status_code=StatusCode.UNEXPECTED_SIGN_STATE, - path=make_path("wrong_last_packet")) - - app.quit() + app.quit() diff --git a/tests/integration/nano/test_provide_pk.py b/tests/integration/nano/test_provide_pk.py index 0c1c0aa9f..3a79ef895 100755 --- a/tests/integration/nano/test_provide_pk.py +++ b/tests/integration/nano/test_provide_pk.py @@ -16,47 +16,46 @@ from pathlib import Path from utils.account import Account, SIGNATURE_TYPE -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT -if __name__ == "__main__": +def test_provide_pk(app): test_name = Path(__file__).stem - with nano_app() as app: + + app.assert_screen(Screen.Home) + + accounts = [ + ( + Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.ED25519, + "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY"), + "ed25519" + ), + ( + Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.SECP256K1, + "sppk7bVy617DmGvXsMqcwsiLtnedTN2trUi5ugXcNig7en4rHJyunK1"), + "secp256k1" + ), + ( + Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.SECP256R1, + "p2pk67fq5pzuMMABZ9RDrooYbLrgmnQbLt8z7PTGM9mskf7LXS5tdBG"), + "secp256r1" + ), + ( + Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.BIP32_ED25519, + "edpkumJgSsSxkpiB5hmTq6eZcrmc6BsJtLAhYceFTiziFqje4mongz"), + "bip32_ed25519" + ) + ] + + for (account, kind) in accounts: app.assert_screen(Screen.Home) - accounts = [ - ( - Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.ED25519, - "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY"), - "ed25519" - ), - ( - Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.SECP256K1, - "sppk7bVy617DmGvXsMqcwsiLtnedTN2trUi5ugXcNig7en4rHJyunK1"), - "secp256k1" - ), - ( - Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.SECP256R1, - "p2pk67fq5pzuMMABZ9RDrooYbLrgmnQbLt8z7PTGM9mskf7LXS5tdBG"), - "secp256r1" - ), - ( - Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.BIP32_ED25519, - "edpkumJgSsSxkpiB5hmTq6eZcrmc6BsJtLAhYceFTiziFqje4mongz"), - "bip32_ed25519" - ) - ] - - for (account, kind) in accounts: - - app.assert_screen(Screen.Home) - - data = app.provide_public_key(account, test_name + "/" + kind) - - app.checker.check_public_key(account, data) - - app.quit() + data = app.provide_public_key(account, test_name + "/" + kind) + + app.checker.check_public_key(account, data) + + app.quit() diff --git a/tests/integration/nano/test_regression_continue_after_reject.py b/tests/integration/nano/test_regression_continue_after_reject.py index 5c4d11f11..70b587716 100755 --- a/tests/integration/nano/test_regression_continue_after_reject.py +++ b/tests/integration/nano/test_regression_continue_after_reject.py @@ -15,32 +15,30 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message -if __name__ == "__main__": +def test_regression_continue_after_reject(app): test_name = Path(__file__).stem def make_path(name: str) -> Path: return Path(test_name) / name - with nano_app() as app: + app.setup_expert_mode() - app.setup_expert_mode() + app.reject_public_key(DEFAULT_ACCOUNT, make_path("reject_public_key")) - app.reject_public_key(DEFAULT_ACCOUNT, make_path("reject_public_key")) + app.assert_screen(Screen.Home) - app.assert_screen(Screen.Home) + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040001000000000000000000000000000000000000000000ff01000001070200000102076501000000015b076501000000015a0765010000000159076501000000015807650100000001570765010000000156076501000000015507650100000001540765010000000153076501000000015207650100000001510765010000000150076501000000014f076501000000014e076501000000014d076501000000014c076501000000014b076501000000014a0765010000000149076501000000014807650100000001470765010000000146076501000000014507650100000001440765010000000143076501000000014202000000000765000a0765000907650008076500070765000607650005076500040765000307650002076500010200000000") - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040001000000000000000000000000000000000000000000ff01000001070200000102076501000000015b076501000000015a0765010000000159076501000000015807650100000001570765010000000156076501000000015507650100000001540765010000000153076501000000015207650100000001510765010000000150076501000000014f076501000000014e076501000000014d076501000000014c076501000000014b076501000000014a0765010000000149076501000000014807650100000001470765010000000146076501000000014507650100000001440765010000000143076501000000014202000000000765000a0765000907650008076500070765000607650005076500040765000307650002076500010200000000") + app.reject_signing(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=make_path("reject_signing")) - app.reject_signing(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=make_path("reject_signing")) + data = app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) - data = app.backend.get_public_key(DEFAULT_ACCOUNT, with_prompt=False) + app.checker.check_public_key(DEFAULT_ACCOUNT, data) - app.checker.check_public_key(DEFAULT_ACCOUNT, data) - - app.quit() + app.quit() diff --git a/tests/integration/nano/test_reject_pk.py b/tests/integration/nano/test_reject_pk.py index 9d832e666..20f1b1740 100755 --- a/tests/integration/nano/test_reject_pk.py +++ b/tests/integration/nano/test_reject_pk.py @@ -15,14 +15,13 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT -if __name__ == "__main__": +def test_reject_pk(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - app.reject_public_key(DEFAULT_ACCOUNT, test_name) + app.reject_public_key(DEFAULT_ACCOUNT, test_name) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_reject_transaction.py b/tests/integration/nano/test_reject_transaction.py index 4d9467567..d56bf2f9d 100755 --- a/tests/integration/nano/test_reject_transaction.py +++ b/tests/integration/nano/test_reject_transaction.py @@ -15,20 +15,19 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message -if __name__ == "__main__": +def test_reject_transaction(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040001000000000000000000000000000000000000000000ff01000001070200000102076501000000015b076501000000015a0765010000000159076501000000015807650100000001570765010000000156076501000000015507650100000001540765010000000153076501000000015207650100000001510765010000000150076501000000014f076501000000014e076501000000014d076501000000014c076501000000014b076501000000014a0765010000000149076501000000014807650100000001470765010000000146076501000000014507650100000001440765010000000143076501000000014202000000000765000a0765000907650008076500070765000607650005076500040765000307650002076500010200000000") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040001000000000000000000000000000000000000000000ff01000001070200000102076501000000015b076501000000015a0765010000000159076501000000015807650100000001570765010000000156076501000000015507650100000001540765010000000153076501000000015207650100000001510765010000000150076501000000014f076501000000014e076501000000014d076501000000014c076501000000014b076501000000014a0765010000000149076501000000014807650100000001470765010000000146076501000000014507650100000001440765010000000143076501000000014202000000000765000a0765000907650008076500070765000607650005076500040765000307650002076500010200000000") - app.reject_signing(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + app.reject_signing(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_ballot.py b/tests/integration/nano/test_sign_ballot.py index ffd2265e7..8ea933d43 100755 --- a/tests/integration/nano/test_sign_ballot.py +++ b/tests/integration/nano/test_sign_ballot.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Ballot @@ -24,23 +24,22 @@ # Proposal: ProtoALphaALphaALphaALphaALphaALphaALpha61322gcLUGH # Ballot: yay -if __name__ == "__main__": +def test_sign_ballot(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000000600ffdd6102321bc251e4a5190ad5b12b251069d9b4000000200bcd7b2cadcd87ecb0d5c50330fb59feed7432bffecede8a09a2b86cfb33847b00") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000000600ffdd6102321bc251e4a5190ad5b12b251069d9b4000000200bcd7b2cadcd87ecb0d5c50330fb59feed7432bffecede8a09a2b86cfb33847b00") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_delegation.py b/tests/integration/nano/test_sign_delegation.py index 29690cafd..1e6b26788 100755 --- a/tests/integration/nano/test_sign_delegation.py +++ b/tests/integration/nano/test_sign_delegation.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Delegation @@ -23,23 +23,22 @@ # Storage limit: 889 # Delegate: tz1TmFPVZsGQ8MnrBJtnECJgkFUwLa6EWYDm -if __name__ == "__main__": +def test_sign_delegation(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006e01774d99da021b92d8c3dfc2e814c7658440319be2c09a0cf40509f906ff00591e842444265757d6a65e3670ca18b5e662f9c0") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006e01774d99da021b92d8c3dfc2e814c7658440319be2c09a0cf40509f906ff00591e842444265757d6a65e3670ca18b5e662f9c0") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_failing_noop.py b/tests/integration/nano/test_sign_failing_noop.py index 194dc7ff7..4f4ec271a 100755 --- a/tests/integration/nano/test_sign_failing_noop.py +++ b/tests/integration/nano/test_sign_failing_noop.py @@ -15,29 +15,28 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Failing noop # Message: 396630396632393532643334353238633733336639343631356366633339626335353536313966633535306464346136376261323230386365386538363761613364313361366566393964666265333263363937346161396132313530643231656361323963333334396535396331336239303831663163313162343430616334643334353564656462653465653064653135613861663632306434633836323437643964313332646531626236646132336435666639643864666664613232626139613834 -if __name__ == "__main__": +def test_sign_failing_noop(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("03000000000000000000000000000000000000000000000000000000000000000011000000c6396630396632393532643334353238633733336639343631356366633339626335353536313966633535306464346136376261323230386365386538363761613364313361366566393964666265333263363937346161396132313530643231656361323963333334396535396331336239303831663163313162343430616334643334353564656462653465653064653135613861663632306434633836323437643964313332646531626236646132336435666639643864666664613232626139613834") + message = Message.from_bytes("03000000000000000000000000000000000000000000000000000000000000000011000000c6396630396632393532643334353238633733336639343631356366633339626335353536313966633535306464346136376261323230386365386538363761613364313361366566393964666265333263363937346161396132313530643231656361323963333334396535396331336239303831663163313162343430616334643334353564656462653465653064653135613861663632306434633836323437643964313332646531626236646132336435666639643864666664613232626139613834") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_increase_paid_storage.py b/tests/integration/nano/test_sign_increase_paid_storage.py index cbd29f6ae..2ffe79c74 100755 --- a/tests/integration/nano/test_sign_increase_paid_storage.py +++ b/tests/integration/nano/test_sign_increase_paid_storage.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Increase paid storage @@ -24,23 +24,22 @@ # Amount: 5 # Destination: KT18amZmM5W7qDWVt2pH6uj7sCEd3kbzLrHT -if __name__ == "__main__": +def test_sign_increase_paid_storage(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000007100ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040501000000000000000000000000000000000000000000") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000007100ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040501000000000000000000000000000000000000000000") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_micheline_without_hash.py b/tests/integration/nano/test_sign_micheline_without_hash.py index dfb75f1f6..de8fb0c5c 100755 --- a/tests/integration/nano/test_sign_micheline_without_hash.py +++ b/tests/integration/nano/test_sign_micheline_without_hash.py @@ -15,28 +15,27 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Expression: {"CACA";"POPO";"BOUDIN"} -if __name__ == "__main__": +def test_sign_micheline_without_hash(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") + message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=False, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=False, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=False, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=False, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_origination.py b/tests/integration/nano/test_sign_origination.py index dbf9c6ab8..3f559a398 100755 --- a/tests/integration/nano/test_sign_origination.py +++ b/tests/integration/nano/test_sign_origination.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Origination @@ -26,23 +26,22 @@ # Code: UNPAIR # Storage: pair "1" 2 -if __name__ == "__main__": +def test_sign_origination(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006d00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e020304a0c21e0000000002037a0000000a07650100000001310002") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006d00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e020304a0c21e0000000002037a0000000a07650100000001310002") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_proposals.py b/tests/integration/nano/test_sign_proposals.py index 105773466..816ebdcfb 100755 --- a/tests/integration/nano/test_sign_proposals.py +++ b/tests/integration/nano/test_sign_proposals.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Proposals @@ -24,23 +24,22 @@ # Proposal (0): ProtoALphaALphaALphaALphaALphaALphaALpha61322gcLUGH # Proposal (1): ProtoALphaALphaALphaALphaALphaALphaALphabc2a7ebx6WB -if __name__ == "__main__": +def test_sign_proposals(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000000500ffdd6102321bc251e4a5190ad5b12b251069d9b400000020000000400bcd7b2cadcd87ecb0d5c50330fb59feed7432bffecede8a09a2b86cfb33847b0bcd7b2cadcd87ecb0d5c50330fb59feed7432bffecede8a09a2b86dac301a2d") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000000500ffdd6102321bc251e4a5190ad5b12b251069d9b400000020000000400bcd7b2cadcd87ecb0d5c50330fb59feed7432bffecede8a09a2b86cfb33847b0bcd7b2cadcd87ecb0d5c50330fb59feed7432bffecede8a09a2b86dac301a2d") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_register_global_constant.py b/tests/integration/nano/test_sign_register_global_constant.py index ba60de590..c9294f607 100755 --- a/tests/integration/nano/test_sign_register_global_constant.py +++ b/tests/integration/nano/test_sign_register_global_constant.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Register global constant @@ -23,23 +23,22 @@ # Storage limit: 4 # Value: Pair "1" 2 -if __name__ == "__main__": +def test_sign_register_global_constant(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006f00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040000000a07070100000001310002") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006f00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e0203040000000a07070100000001310002") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_reveal.py b/tests/integration/nano/test_sign_reveal.py index 793b9f892..19796786a 100755 --- a/tests/integration/nano/test_sign_reveal.py +++ b/tests/integration/nano/test_sign_reveal.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Reveal @@ -23,23 +23,22 @@ # Storage limit: 4 # Public key: edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY -if __name__ == "__main__": +def test_sign_reveal(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006b00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400747884d9abdf16b3ab745158925f567e222f71225501826fa83347f6cbe9c393") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006b00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400747884d9abdf16b3ab745158925f567e222f71225501826fa83347f6cbe9c393") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_sc_rollup_add_messages.py b/tests/integration/nano/test_sign_sc_rollup_add_messages.py index a08212db9..e84c4ec36 100755 --- a/tests/integration/nano/test_sign_sc_rollup_add_messages.py +++ b/tests/integration/nano/test_sign_sc_rollup_add_messages.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): SR: send messages @@ -25,23 +25,22 @@ # Message (1): 67 # Message (2): 89abcdef -if __name__ == "__main__": +def test_sign_sc_rollup_add_messages(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("030000000000000000000000000000000000000000000000000000000000000000c900ffdd6102321bc251e4a5190ad5b12b251069d9b4904e020304000000140000000301234500000001670000000489abcdef") + message = Message.from_bytes("030000000000000000000000000000000000000000000000000000000000000000c900ffdd6102321bc251e4a5190ad5b12b251069d9b4904e020304000000140000000301234500000001670000000489abcdef") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_sc_rollup_execute_outbox_message.py b/tests/integration/nano/test_sign_sc_rollup_execute_outbox_message.py index d02d6bfa1..0e61d14e9 100755 --- a/tests/integration/nano/test_sign_sc_rollup_execute_outbox_message.py +++ b/tests/integration/nano/test_sign_sc_rollup_execute_outbox_message.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): SR: execute outbox message @@ -25,23 +25,22 @@ # Commitment: src12UJzB8mg7yU6nWPzicH7ofJbFjyJEbHvwtZdfRXi8DQHNp1LY8 # Output proof: 396630396632393532643334353238633733336639343631356366633339626335353536313966633535306464346136376261323230386365386538363761613364313361366566393964666265333263363937346161396132313530643231656361323963333334396535396331336239303831663163313162343430616334643334353564656462653465653064653135613861663632306434633836323437643964313332646531626236646132336435666639643864666664613232626139613834 -if __name__ == "__main__": +def test_sign_sc_rollup_execute_outbox_message(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("030000000000000000000000000000000000000000000000000000000000000000ce00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6396630396632393532643334353238633733336639343631356366633339626335353536313966633535306464346136376261323230386365386538363761613364313361366566393964666265333263363937346161396132313530643231656361323963333334396535396331336239303831663163313162343430616334643334353564656462653465653064653135613861663632306434633836323437643964313332646531626236646132336435666639643864666664613232626139613834") + message = Message.from_bytes("030000000000000000000000000000000000000000000000000000000000000000ce00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6396630396632393532643334353238633733336639343631356366633339626335353536313966633535306464346136376261323230386365386538363761613364313361366566393964666265333263363937346161396132313530643231656361323963333334396535396331336239303831663163313162343430616334643334353564656462653465653064653135613861663632306434633836323437643964313332646531626236646132336435666639643864666664613232626139613834") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_sc_rollup_originate.py b/tests/integration/nano/test_sign_sc_rollup_originate.py index 949f0671d..01026c319 100755 --- a/tests/integration/nano/test_sign_sc_rollup_originate.py +++ b/tests/integration/nano/test_sign_sc_rollup_originate.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): SR: originate @@ -26,23 +26,22 @@ # Proof: 030002104135165622d08b0c6eac951c9d4fd65109585907bc30ef0617f6c26853c6ba724af04dd3e4b5861efae3166ebc12ef5781df9715c20943e8d0b7bc06068a6f8106737461747573c87a31b1c8e3af61756b336bcfc3b0c292c89b40cc8a5080ba99c45463d110ce8b # Parameters: Pair "1" 2 -if __name__ == "__main__": +def test_sign_sc_rollup_originate(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("030000000000000000000000000000000000000000000000000000000000000000c800ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000000c63966303966323935326433343532386337333366393436313563666333396263353535363139666335353064643461363762613232303863653865383637616133643133613665663939646662653332633639373461613961323135306432316563613239633333343965353963313362393038316631633131623434306163346433343535646564626534656530646531356138616636323064346338363234376439643133326465316262366461323364356666396438646666646132326261396138340000006c030002104135165622d08b0c6eac951c9d4fd65109585907bc30ef0617f6c26853c6ba724af04dd3e4b5861efae3166ebc12ef5781df9715c20943e8d0b7bc06068a6f8106737461747573c87a31b1c8e3af61756b336bcfc3b0c292c89b40cc8a5080ba99c45463d110ce8b0000000a07070100000001310002") + message = Message.from_bytes("030000000000000000000000000000000000000000000000000000000000000000c800ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000000c63966303966323935326433343532386337333366393436313563666333396263353535363139666335353064643461363762613232303863653865383637616133643133613665663939646662653332633639373461613961323135306432316563613239633333343965353963313362393038316631633131623434306163346433343535646564626534656530646531356138616636323064346338363234376439643133326465316262366461323364356666396438646666646132326261396138340000006c030002104135165622d08b0c6eac951c9d4fd65109585907bc30ef0617f6c26853c6ba724af04dd3e4b5861efae3166ebc12ef5781df9715c20943e8d0b7bc06068a6f8106737461747573c87a31b1c8e3af61756b336bcfc3b0c292c89b40cc8a5080ba99c45463d110ce8b0000000a07070100000001310002") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_set_consensus_key.py b/tests/integration/nano/test_sign_set_consensus_key.py index 82efbd61b..684e8f036 100755 --- a/tests/integration/nano/test_sign_set_consensus_key.py +++ b/tests/integration/nano/test_sign_set_consensus_key.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Set consensus key @@ -23,23 +23,22 @@ # Storage limit: 4 # Public key: edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY -if __name__ == "__main__": +def test_sign_set_consensus_key(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000007200c921d4487c90b4472da6cc566a58d79f0d991dbf904e02030400747884d9abdf16b3ab745158925f567e222f71225501826fa83347f6cbe9c393") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000007200c921d4487c90b4472da6cc566a58d79f0d991dbf904e02030400747884d9abdf16b3ab745158925f567e222f71225501826fa83347f6cbe9c393") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_set_deposit_limit.py b/tests/integration/nano/test_sign_set_deposit_limit.py index a5a04c9fd..97ca4ddae 100755 --- a/tests/integration/nano/test_sign_set_deposit_limit.py +++ b/tests/integration/nano/test_sign_set_deposit_limit.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Set deposit limit @@ -23,23 +23,22 @@ # Storage limit: 4 # Staking limit: 0.02 XTZ -if __name__ == "__main__": +def test_sign_set_deposit_limit(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("03000000000000000000000000000000000000000000000000000000000000000070027c252d3806e6519ed064026bdb98edf866117331e0d40304f80204ffa09c01") + message = Message.from_bytes("03000000000000000000000000000000000000000000000000000000000000000070027c252d3806e6519ed064026bdb98edf866117331e0d40304f80204ffa09c01") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_simple_transaction.py b/tests/integration/nano/test_sign_simple_transaction.py index 74d820701..dcbbae6c3 100644 --- a/tests/integration/nano/test_sign_simple_transaction.py +++ b/tests/integration/nano/test_sign_simple_transaction.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Transaction @@ -24,23 +24,22 @@ # Amount: 0.01 XTZ # Destination: KT18amZmM5W7qDWVt2pH6uj7sCEd3kbzLrHT -if __name__ == "__main__": +def test_sign_simple_transaction(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4a0c21e020304904e0100000000000000000000000000000000000000000000") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4a0c21e020304904e0100000000000000000000000000000000000000000000") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_transaction.py b/tests/integration/nano/test_sign_transaction.py index c593449fa..a1b702dc5 100755 --- a/tests/integration/nano/test_sign_transaction.py +++ b/tests/integration/nano/test_sign_transaction.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Transaction @@ -26,23 +26,22 @@ # Entrypoint: do # Parameter: CAR -if __name__ == "__main__": +def test_sign_transaction(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_transfer_ticket.py b/tests/integration/nano/test_sign_transfer_ticket.py index 6283895b6..547bc29c9 100755 --- a/tests/integration/nano/test_sign_transfer_ticket.py +++ b/tests/integration/nano/test_sign_transfer_ticket.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Transfer ticket @@ -28,23 +28,22 @@ # Destination: KT18amZmM5W7qDWVt2pH6uj7sCEd3kbzLrHT # Entrypoint: default -if __name__ == "__main__": +def test_sign_transfer_ticket(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000009e00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000002037a0000000a076501000000013100020000ffdd6102321bc251e4a5190ad5b12b251069d9b401010000000000000000000000000000000000000000000000000764656661756c74") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000009e00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e02030400000002037a0000000a076501000000013100020000ffdd6102321bc251e4a5190ad5b12b251069d9b401010000000000000000000000000000000000000000000000000764656661756c74") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_with_another_seed.py b/tests/integration/nano/test_sign_with_another_seed.py index 959e5794f..793b0a0cb 100755 --- a/tests/integration/nano/test_sign_with_another_seed.py +++ b/tests/integration/nano/test_sign_with_another_seed.py @@ -13,10 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. +import pytest + from pathlib import Path from utils.account import Account, SIGNATURE_TYPE -from utils.app import nano_app, Screen +from utils.app import Screen from utils.message import Message # Operation (0): Transaction @@ -27,28 +29,27 @@ # Entrypoint: do # Parameter: CAR -if __name__ == "__main__": +@pytest.mark.parametrize("seed", ["around dignity equal spread between young lawsuit interest climb wide that panther rather mom snake scene ecology reunion ice illegal brush"]) +def test_sign_with_another_seed(app): test_name = Path(__file__).stem - seed = "around dignity equal spread between young lawsuit interest climb wide that panther rather mom snake scene ecology reunion ice illegal brush" - with nano_app(seed) as app: - app.setup_expert_mode() + app.setup_expert_mode() - account = Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.ED25519, - "edpkupntwMyERpYniuK1GDWquPaPU1wYsQgMirJPLGmC4Y5dMUsQNo") + account = Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.ED25519, + "edpkupntwMyERpYniuK1GDWquPaPU1wYsQgMirJPLGmC4Y5dMUsQNo") - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") - data = app.sign(account, - message, - with_hash=True, - path=test_name) + data = app.sign(account, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=account, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=account, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_with_long_hash.py b/tests/integration/nano/test_sign_with_long_hash.py index dd85e6dde..b5cfb84f7 100755 --- a/tests/integration/nano/test_sign_with_long_hash.py +++ b/tests/integration/nano/test_sign_with_long_hash.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Operation (0): Transaction @@ -26,23 +26,22 @@ # Entrypoint: root # Parameter: 0 -if __name__ == "__main__": +def test_sign_with_long_hash(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e020304000156dcfb211fa76c525fd7c4566c09a5e3e4d5b81000ff01000000020000") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c00ffdd6102321bc251e4a5190ad5b12b251069d9b4904e020304000156dcfb211fa76c525fd7c4566c09a5e3e4d5b81000ff01000000020000") - data = app.sign(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + data = app.sign(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=DEFAULT_ACCOUNT, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=DEFAULT_ACCOUNT, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_sign_with_small_packet.py b/tests/integration/nano/test_sign_with_small_packet.py index cb34ed1bb..eacd9e713 100755 --- a/tests/integration/nano/test_sign_with_small_packet.py +++ b/tests/integration/nano/test_sign_with_small_packet.py @@ -16,37 +16,34 @@ from pathlib import Path from utils.account import Account -from utils.app import nano_app, send_and_navigate, Screen, Screen_text, DEFAULT_ACCOUNT +from utils.app import send_and_navigate, Screen, Screen_text, DEFAULT_ACCOUNT from utils.message import Message -if __name__ == "__main__": +def test_sign_with_small_packet(app): test_name = Path(__file__).stem - with nano_app() as app: - app.setup_expert_mode() + app.setup_expert_mode() - def check_sign_with_small_packet( - account: Account, - message: Message, - path: str) -> None: + def check_sign_with_small_packet( + account: Account, + message: Message, + path: str) -> None: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - data = send_and_navigate( - send=(lambda: app.backend.sign(account, message, apdu_size=10)), - navigate=(lambda: app.navigate_until_text(Screen_text.Sign_accept, path))) + data = send_and_navigate( + send=(lambda: app.backend.sign(account, message, apdu_size=10)), + navigate=(lambda: app.navigate_until_text(Screen_text.Sign_accept, path))) - app.checker.check_signature( - account, - message, - with_hash=False, - data=data) + app.checker.check_signature( + account, + message, + with_hash=False, + data=data) - app.assert_screen(Screen.Home) + check_sign_with_small_packet( + account=DEFAULT_ACCOUNT, + message=Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316"), + path=test_name) - check_sign_with_small_packet( - account=DEFAULT_ACCOUNT, - message=Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316"), - path=test_name) - - app.quit() + app.quit() diff --git a/tests/integration/nano/test_too_complex_transaction.py b/tests/integration/nano/test_too_complex_transaction.py index c5de6b583..342a4cd64 100644 --- a/tests/integration/nano/test_too_complex_transaction.py +++ b/tests/integration/nano/test_too_complex_transaction.py @@ -15,7 +15,7 @@ from pathlib import Path -from utils.app import nano_app, Screen, Screen_text, DEFAULT_ACCOUNT +from utils.app import Screen, Screen_text, DEFAULT_ACCOUNT from utils.backend import StatusCode from utils.message import Message @@ -27,19 +27,18 @@ # Entrypoint: do # Parameter: CAR -if __name__ == "__main__": +def test_too_complex_transaction(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") + message = Message.from_bytes("0300000000000000000000000000000000000000000000000000000000000000006c016e8874874d31c3fbd636e924d5a036a43ec8faa7d0860308362d80d30e01000000000000000000000000000000000000000000ff02000000020316") - app._failing_signing(DEFAULT_ACCOUNT, - message, - with_hash=True, - text=Screen_text.Back_home, - status_code=StatusCode.REJECT, - path=test_name) + app._failing_signing(DEFAULT_ACCOUNT, + message, + with_hash=True, + text=Screen_text.Back_home, + status_code=StatusCode.REJECT, + path=test_name) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_too_deep.py b/tests/integration/nano/test_too_deep.py index a33678a6f..77f4048bc 100755 --- a/tests/integration/nano/test_too_deep.py +++ b/tests/integration/nano/test_too_deep.py @@ -16,43 +16,42 @@ from multiprocessing import Process from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.backend import StatusCode from utils.message import Message # Expression: {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{42}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} -if __name__ == "__main__": +def test_too_deep(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - expression = Message.from_bytes("0502000000f702000000f202000000ed02000000e802000000e302000000de02000000d902000000d402000000cf02000000ca02000000c502000000c002000000bb02000000b602000000b102000000ac02000000a702000000a2020000009d02000000980200000093020000008e02000000890200000084020000007f020000007a02000000750200000070020000006b02000000660200000061020000005c02000000570200000052020000004d02000000480200000043020000003e02000000390200000034020000002f020000002a02000000250200000020020000001b02000000160200000011020000000c02000000070200000002002a") + expression = Message.from_bytes("0502000000f702000000f202000000ed02000000e802000000e302000000de02000000d902000000d402000000cf02000000ca02000000c502000000c002000000bb02000000b602000000b102000000ac02000000a702000000a2020000009d02000000980200000093020000008e02000000890200000084020000007f020000007a02000000750200000070020000006b02000000660200000061020000005c02000000570200000052020000004d02000000480200000043020000003e02000000390200000034020000002f020000002a02000000250200000020020000001b02000000160200000011020000000c02000000070200000002002a") - if app.backend.firmware.device == "nanos": - def send() -> None: - with app.expect_apdu_failure(StatusCode.PARSE_ERROR): - app.backend.sign(DEFAULT_ACCOUNT, expression, with_hash=True) - def assert_screen_i(i): - app.assert_screen(f"{str(i).zfill(5)}", path=test_name) + if app.backend.firmware.device == "nanos": + def send() -> None: + with app.expect_apdu_failure(StatusCode.PARSE_ERROR): + app.backend.sign(DEFAULT_ACCOUNT, expression, with_hash=True) + def assert_screen_i(i): + app.assert_screen(f"{str(i).zfill(5)}", path=test_name) - send_process = Process(target=send) - send_process.start() + send_process = Process(target=send) + send_process.start() - for i in range(5): - assert_screen_i(i) - app.backend.right_click() + for i in range(5): + assert_screen_i(i) + app.backend.right_click() - assert_screen_i(i+1) - app.backend.both_click() + assert_screen_i(i+1) + app.backend.both_click() - send_process.join() - assert send_process.exitcode == 0, "Should have terminate successfully" - else: - app.parsing_error_signing(DEFAULT_ACCOUNT, - expression, - with_hash=True, - path=test_name) + send_process.join() + assert send_process.exitcode == 0, "Should have terminate successfully" + else: + app.parsing_error_signing(DEFAULT_ACCOUNT, + expression, + with_hash=True, + path=test_name) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_too_large.py b/tests/integration/nano/test_too_large.py index adc82fdb9..94639593e 100755 --- a/tests/integration/nano/test_too_large.py +++ b/tests/integration/nano/test_too_large.py @@ -15,22 +15,21 @@ from pathlib import Path -from utils.app import nano_app, Screen, DEFAULT_ACCOUNT +from utils.app import Screen, DEFAULT_ACCOUNT from utils.message import Message # Expression: 12345678901234567890123456789012345678901234567890123456789012345678901234567890 -if __name__ == "__main__": +def test_too_large(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - message = Message.from_bytes("050092abf8e3d9e5f8cfd9ae8a9fe5f28ea1d5b5abf1af82dae8a4b68df3d1889eb6f988f5e8d31a") + message = Message.from_bytes("050092abf8e3d9e5f8cfd9ae8a9fe5f28ea1d5b5abf1af82dae8a4b68df3d1889eb6f988f5e8d31a") - app.parsing_error_signing(DEFAULT_ACCOUNT, - message, - with_hash=True, - path=test_name) + app.parsing_error_signing(DEFAULT_ACCOUNT, + message, + with_hash=True, + path=test_name) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_tz1_bip25519_sign_micheline_basic.py b/tests/integration/nano/test_tz1_bip25519_sign_micheline_basic.py index d3bdbe4f7..f3b59c7c6 100755 --- a/tests/integration/nano/test_tz1_bip25519_sign_micheline_basic.py +++ b/tests/integration/nano/test_tz1_bip25519_sign_micheline_basic.py @@ -16,32 +16,31 @@ from pathlib import Path from utils.account import Account, SIGNATURE_TYPE -from utils.app import nano_app, Screen +from utils.app import Screen from utils.message import Message # Expression: {"CACA";"POPO";"BOUDIN"} -if __name__ == "__main__": +def test_tz1_bip25519_sign_micheline_basic(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - account = Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.BIP32_ED25519, - "edpkumJgSsSxkpiB5hmTq6eZcrmc6BsJtLAhYceFTiziFqje4mongz") + account = Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.BIP32_ED25519, + "edpkumJgSsSxkpiB5hmTq6eZcrmc6BsJtLAhYceFTiziFqje4mongz") - message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") + message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") - data = app.sign(account, - message, - with_hash=True, - path=test_name) + data = app.sign(account, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=account, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=account, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_tz1_ed25519_sign_micheline_basic.py b/tests/integration/nano/test_tz1_ed25519_sign_micheline_basic.py index 20a9bf521..c377f660d 100755 --- a/tests/integration/nano/test_tz1_ed25519_sign_micheline_basic.py +++ b/tests/integration/nano/test_tz1_ed25519_sign_micheline_basic.py @@ -16,32 +16,31 @@ from pathlib import Path from utils.account import Account, SIGNATURE_TYPE -from utils.app import nano_app, Screen +from utils.app import Screen from utils.message import Message # Expression: {"CACA";"POPO";"BOUDIN"} -if __name__ == "__main__": +def test_tz1_ed25519_sign_micheline_basic(app): test_name = Path(__file__).stem - with nano_app() as app: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - account = Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.ED25519, - "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY") + account = Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.ED25519, + "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY") - message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") + message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") - data = app.sign(account, - message, - with_hash=True, - path=test_name) + data = app.sign(account, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=account, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=account, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_tz2_sign_micheline_basic.py b/tests/integration/nano/test_tz2_sign_micheline_basic.py index 173565ec0..4d05c0b31 100755 --- a/tests/integration/nano/test_tz2_sign_micheline_basic.py +++ b/tests/integration/nano/test_tz2_sign_micheline_basic.py @@ -16,30 +16,28 @@ from pathlib import Path from utils.account import Account, SIGNATURE_TYPE -from utils.app import nano_app from utils.message import Message # Expression: {"CACA";"POPO";"BOUDIN"} -if __name__ == "__main__": +def test_tz2_sign_micheline_basic(app): test_name = Path(__file__).stem - with nano_app() as app: - account = Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.SECP256K1, - "sppk7bVy617DmGvXsMqcwsiLtnedTN2trUi5ugXcNig7en4rHJyunK1") + account = Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.SECP256K1, + "sppk7bVy617DmGvXsMqcwsiLtnedTN2trUi5ugXcNig7en4rHJyunK1") - message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") + message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") - data = app.sign(account, - message, - with_hash=True, - path=test_name) + data = app.sign(account, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=account, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=account, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_tz3_sign_micheline_basic.py b/tests/integration/nano/test_tz3_sign_micheline_basic.py index e855c9f43..c488d93ce 100755 --- a/tests/integration/nano/test_tz3_sign_micheline_basic.py +++ b/tests/integration/nano/test_tz3_sign_micheline_basic.py @@ -16,30 +16,28 @@ from pathlib import Path from utils.account import Account, SIGNATURE_TYPE -from utils.app import nano_app from utils.message import Message # Expression: {"CACA";"POPO";"BOUDIN"} -if __name__ == "__main__": +def test_tz3_sign_micheline_basic(app): test_name = Path(__file__).stem - with nano_app() as app: - account = Account("m/44'/1729'/0'/0'", - SIGNATURE_TYPE.SECP256R1, - "p2pk67fq5pzuMMABZ9RDrooYbLrgmnQbLt8z7PTGM9mskf7LXS5tdBG") + account = Account("m/44'/1729'/0'/0'", + SIGNATURE_TYPE.SECP256R1, + "p2pk67fq5pzuMMABZ9RDrooYbLrgmnQbLt8z7PTGM9mskf7LXS5tdBG") - message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") + message = Message.from_bytes("05020000001d0100000004434143410100000004504f504f0100000006424f5544494e") - data = app.sign(account, - message, - with_hash=True, - path=test_name) + data = app.sign(account, + message, + with_hash=True, + path=test_name) - app.checker.check_signature( - account=account, - message=message, - with_hash=True, - data=data) + app.checker.check_signature( + account=account, + message=message, + with_hash=True, + data=data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_unimplemented_commands.py b/tests/integration/nano/test_unimplemented_commands.py index 0598109c3..aae16d49a 100755 --- a/tests/integration/nano/test_unimplemented_commands.py +++ b/tests/integration/nano/test_unimplemented_commands.py @@ -13,28 +13,27 @@ # See the License for the specific language governing permissions and # limitations under the License. -from utils.app import nano_app, Screen +from utils.app import Screen from utils.backend import INS, StatusCode -if __name__ == "__main__": - with nano_app() as app: +def test_unimplemented_commands(app): - for ins in \ - [INS.AUTHORIZE_BAKING, \ - INS.SIGN_UNSAFE, \ - INS.RESET, \ - INS.QUERY_AUTH_KEY, \ - INS.QUERY_MAIN_HWM, \ - INS.SETUP, \ - INS.QUERY_ALL_HWM, \ - INS.DEAUTHORIZE, \ - INS.QUERY_AUTH_KEY_WITH_CURVE, \ - INS.HMAC, \ - 0xff]: + for ins in \ + [INS.AUTHORIZE_BAKING, \ + INS.SIGN_UNSAFE, \ + INS.RESET, \ + INS.QUERY_AUTH_KEY, \ + INS.QUERY_MAIN_HWM, \ + INS.SETUP, \ + INS.QUERY_ALL_HWM, \ + INS.DEAUTHORIZE, \ + INS.QUERY_AUTH_KEY_WITH_CURVE, \ + INS.HMAC, \ + 0xff]: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - with app.expect_apdu_failure(StatusCode.INVALID_INS): - app.backend._exchange(ins) + with app.expect_apdu_failure(StatusCode.INVALID_INS): + app.backend._exchange(ins) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_version.py b/tests/integration/nano/test_version.py index fa015cf9d..588a170da 100755 --- a/tests/integration/nano/test_version.py +++ b/tests/integration/nano/test_version.py @@ -13,15 +13,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -from utils.app import nano_app, Screen +from utils.app import Screen -if __name__ == "__main__": - with nano_app() as app: +def test_version(app): - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - data = app.backend.version() + data = app.backend.version() - app.checker.check_version(data) + app.checker.check_version(data) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_wrong_apdu_length.py b/tests/integration/nano/test_wrong_apdu_length.py index 78262b868..170965a45 100755 --- a/tests/integration/nano/test_wrong_apdu_length.py +++ b/tests/integration/nano/test_wrong_apdu_length.py @@ -14,35 +14,34 @@ # limitations under the License. from utils.account import SIGNATURE_TYPE -from utils.app import nano_app, Screen +from utils.app import Screen from utils.backend import CLA, INDEX, INS, StatusCode -if __name__ == "__main__": - with nano_app() as app: +def test_wrong_apdu_length(app): - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - raw = \ - int(CLA.DEFAULT).to_bytes(1, 'big') + \ - int(INS.VERSION).to_bytes(1, 'big') + \ - int(INDEX.FIRST).to_bytes(1, 'big') + \ - int(SIGNATURE_TYPE.ED25519).to_bytes(1, 'big') + \ - int(0x00).to_bytes(1, 'big') + \ - int(0x00).to_bytes(1, 'big') # right size = 0x01 + raw = \ + int(CLA.DEFAULT).to_bytes(1, 'big') + \ + int(INS.VERSION).to_bytes(1, 'big') + \ + int(INDEX.FIRST).to_bytes(1, 'big') + \ + int(SIGNATURE_TYPE.ED25519).to_bytes(1, 'big') + \ + int(0x00).to_bytes(1, 'big') + \ + int(0x00).to_bytes(1, 'big') # right size = 0x01 - with app.expect_apdu_failure(StatusCode.WRONG_LENGTH_FOR_INS): - app.backend.exchange_raw(raw) + with app.expect_apdu_failure(StatusCode.WRONG_LENGTH_FOR_INS): + app.backend.exchange_raw(raw) - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - raw = \ - int(CLA.DEFAULT).to_bytes(1, 'big') + \ - int(INS.VERSION).to_bytes(1, 'big') + \ - int(INDEX.FIRST).to_bytes(1, 'big') + \ - int(SIGNATURE_TYPE.ED25519).to_bytes(1, 'big') + \ - int(0x01).to_bytes(1, 'big') # right size = 0x00 + raw = \ + int(CLA.DEFAULT).to_bytes(1, 'big') + \ + int(INS.VERSION).to_bytes(1, 'big') + \ + int(INDEX.FIRST).to_bytes(1, 'big') + \ + int(SIGNATURE_TYPE.ED25519).to_bytes(1, 'big') + \ + int(0x01).to_bytes(1, 'big') # right size = 0x00 - with app.expect_apdu_failure(StatusCode.WRONG_LENGTH_FOR_INS): - app.backend.exchange_raw(raw) + with app.expect_apdu_failure(StatusCode.WRONG_LENGTH_FOR_INS): + app.backend.exchange_raw(raw) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_wrong_class.py b/tests/integration/nano/test_wrong_class.py index e8a5a9b3c..f7d5978bb 100755 --- a/tests/integration/nano/test_wrong_class.py +++ b/tests/integration/nano/test_wrong_class.py @@ -14,34 +14,33 @@ # limitations under the License. from utils.account import SIGNATURE_TYPE -from utils.app import nano_app, Screen +from utils.app import Screen from utils.backend import INDEX, INS, StatusCode -if __name__ == "__main__": - with nano_app() as app: +def test_wrong_class(app): - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - raw = \ - int(0x00).to_bytes(1, 'big') + \ - int(INS.VERSION).to_bytes(1, 'big') + \ - int(INDEX.FIRST).to_bytes(1, 'big') + \ - int(SIGNATURE_TYPE.ED25519).to_bytes(1, 'big') + \ - int(0x00).to_bytes(1, 'big') + raw = \ + int(0x00).to_bytes(1, 'big') + \ + int(INS.VERSION).to_bytes(1, 'big') + \ + int(INDEX.FIRST).to_bytes(1, 'big') + \ + int(SIGNATURE_TYPE.ED25519).to_bytes(1, 'big') + \ + int(0x00).to_bytes(1, 'big') - with app.expect_apdu_failure(StatusCode.CLASS): - app.backend.exchange_raw(raw) + with app.expect_apdu_failure(StatusCode.CLASS): + app.backend.exchange_raw(raw) - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - raw = \ - int(0x81).to_bytes(1, 'big') + \ - int(INS.VERSION).to_bytes(1, 'big') + \ - int(INDEX.FIRST).to_bytes(1, 'big') + \ - int(SIGNATURE_TYPE.ED25519).to_bytes(1, 'big') + \ - int(0x00).to_bytes(1, 'big') + raw = \ + int(0x81).to_bytes(1, 'big') + \ + int(INS.VERSION).to_bytes(1, 'big') + \ + int(INDEX.FIRST).to_bytes(1, 'big') + \ + int(SIGNATURE_TYPE.ED25519).to_bytes(1, 'big') + \ + int(0x00).to_bytes(1, 'big') - with app.expect_apdu_failure(StatusCode.CLASS): - app.backend.exchange_raw(raw) + with app.expect_apdu_failure(StatusCode.CLASS): + app.backend.exchange_raw(raw) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_wrong_derivation_path.py b/tests/integration/nano/test_wrong_derivation_path.py index 271485c55..b601cf286 100755 --- a/tests/integration/nano/test_wrong_derivation_path.py +++ b/tests/integration/nano/test_wrong_derivation_path.py @@ -14,10 +14,10 @@ # limitations under the License. from utils.account import Account, SIGNATURE_TYPE -from utils.app import nano_app, Screen +from utils.app import Screen from utils.backend import INS, StatusCode -if __name__ == "__main__": +def test_wrong_derivation_path(app): wrong_number_index_account = Account( bytes.fromhex("058000002c800006c18000000080000000"), SIGNATURE_TYPE.ED25519, @@ -30,19 +30,18 @@ bytes.fromhex("0b8000002c800006c1800000008000000080000000800000008000000080000000800000008000000080000000"), SIGNATURE_TYPE.ED25519, "__unused__") - with nano_app() as app: - for account in [wrong_number_index_account, - wrong_length_account, - too_much_index_account]: - for sender in [lambda account: app.backend.get_public_key(account, with_prompt=False), - lambda account: app.backend.get_public_key(account, with_prompt=True), - lambda account: app.backend._ask_sign(INS.SIGN, account), - lambda account: app.backend._ask_sign(INS.SIGN_WITH_HASH, account)]: + for account in [wrong_number_index_account, + wrong_length_account, + too_much_index_account]: + for sender in [lambda account: app.backend.get_public_key(account, with_prompt=False), + lambda account: app.backend.get_public_key(account, with_prompt=True), + lambda account: app.backend._ask_sign(INS.SIGN, account), + lambda account: app.backend._ask_sign(INS.SIGN_WITH_HASH, account)]: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - with app.expect_apdu_failure(StatusCode.WRONG_LENGTH_FOR_INS): - sender(account) + with app.expect_apdu_failure(StatusCode.WRONG_LENGTH_FOR_INS): + sender(account) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_wrong_derivation_type.py b/tests/integration/nano/test_wrong_derivation_type.py index 6f7bbab1a..d105ca8b1 100755 --- a/tests/integration/nano/test_wrong_derivation_type.py +++ b/tests/integration/nano/test_wrong_derivation_type.py @@ -14,21 +14,20 @@ # limitations under the License. from utils.account import Account -from utils.app import nano_app, Screen +from utils.app import Screen from utils.backend import INS, StatusCode -if __name__ == "__main__": +def test_wrong_derivation_type(app): account = Account("m/44'/1729'/0'/0'", 0x04, "__unused__") - with nano_app() as app: - for sender in [lambda account: app.backend.get_public_key(account, with_prompt=False), - lambda account: app.backend.get_public_key(account, with_prompt=True), - lambda account: app.backend._ask_sign(INS.SIGN, account), - lambda account: app.backend._ask_sign(INS.SIGN_WITH_HASH, account)]: + for sender in [lambda account: app.backend.get_public_key(account, with_prompt=False), + lambda account: app.backend.get_public_key(account, with_prompt=True), + lambda account: app.backend._ask_sign(INS.SIGN, account), + lambda account: app.backend._ask_sign(INS.SIGN_WITH_HASH, account)]: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - with app.expect_apdu_failure(StatusCode.WRONG_PARAM): - sender(account) + with app.expect_apdu_failure(StatusCode.WRONG_PARAM): + sender(account) - app.quit() + app.quit() diff --git a/tests/integration/nano/test_wrong_index.py b/tests/integration/nano/test_wrong_index.py index 62aa315a4..a3b47ede8 100755 --- a/tests/integration/nano/test_wrong_index.py +++ b/tests/integration/nano/test_wrong_index.py @@ -13,22 +13,21 @@ # See the License for the specific language governing permissions and # limitations under the License. -from utils.app import nano_app, DEFAULT_ACCOUNT, Screen +from utils.app import DEFAULT_ACCOUNT, Screen from utils.backend import INDEX, INS, StatusCode -if __name__ == "__main__": - with nano_app() as app: - for ins in [INS.GET_PUBLIC_KEY, - INS.PROMPT_PUBLIC_KEY]: - for index in [INDEX.OTHER, - INDEX.LAST]: +def test_wrong_index(app): + for ins in [INS.GET_PUBLIC_KEY, + INS.PROMPT_PUBLIC_KEY]: + for index in [INDEX.OTHER, + INDEX.LAST]: - app.assert_screen(Screen.Home) + app.assert_screen(Screen.Home) - with app.expect_apdu_failure(StatusCode.WRONG_PARAM): - app.backend._exchange(ins, - index=index, - sig_type=DEFAULT_ACCOUNT.sig_type, - payload=DEFAULT_ACCOUNT.path) + with app.expect_apdu_failure(StatusCode.WRONG_PARAM): + app.backend._exchange(ins, + index=index, + sig_type=DEFAULT_ACCOUNT.sig_type, + payload=DEFAULT_ACCOUNT.path) - app.quit() + app.quit() diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index 97f9065fb..aba881693 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -23,7 +23,6 @@ from requests.exceptions import ConnectionError from ragger.backend import SpeculosBackend from ragger.error import ExceptionRAPDU -from ragger.firmware import Firmware from ragger.navigator import NavInsID, NanoNavigator from typing import Callable, Generator, List, Optional, Tuple, Union @@ -397,62 +396,8 @@ def parsing_error_signing(self, StatusCode.PARSE_ERROR, path) -FIRMWARES = [ - Firmware.NANOS, - Firmware.NANOSP, - Firmware.NANOX -] - DEFAULT_SEED = ('zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra zebra') DEFAULT_ACCOUNT = Account("m/44'/1729'/0'/0'", SIGNATURE_TYPE.ED25519, "edpkuXX2VdkdXzkN11oLCb8Aurdo1BTAtQiK8ZY9UPj2YMt3AHEpcY") - -@contextmanager -def nano_app(seed: str = DEFAULT_SEED) -> Generator[TezosAppScreen, None, None]: - parser = argparse.ArgumentParser(description="Launch a nano speculos backend for the tezos app") - parser.add_argument("-d", "--device", - type=str, - choices=list(map(lambda fw: fw.device, FIRMWARES)), - help="Device type: nanos | nanosp | nanox ", - required=True) - parser.add_argument("-p", "--port", - type=int, - default=5000, - help="Port") - parser.add_argument("--display", - action="store_const", - const=True, - default=False, - help="Emulate the app") - parser.add_argument("--golden-run", - action='store_const', - const=True, - default=False, - help="Golden run") - parser.add_argument("--app", - type=str, - help="App", - required=True) - args, unknown_args = parser.parse_known_args() - - firmware = next(fw for fw in FIRMWARES if fw.device == args.device) - - speculos_args = unknown_args - - if args.display: - speculos_args += ["--display", "qt"] - - speculos_args += [ - "--api-port", f"{args.port}", - "--apdu-port", "0", - "--seed", seed - ] - - backend = SpeculosTezosBackend(args.app, - firmware, - port=args.port, - args=speculos_args) - with TezosAppScreen(backend, APP_KIND.WALLET, args.golden_run) as app: - yield app diff --git a/tests/integration/test_runtime.sh b/tests/integration/test_runtime.sh index fe3562d0a..6df3dd53d 100644 --- a/tests/integration/test_runtime.sh +++ b/tests/integration/test_runtime.sh @@ -379,7 +379,7 @@ run_a_test() { COMMIT_BYTES=$COMMIT_BYTES\ VERSION_BYTES=$VERSION_BYTES\ python3 $CMD - else + elif [[ "$CMD" != *"conftest.py" ]]; then if [ "$DBG" = "DEBUG" ]; then tgz=$DTGZ else @@ -387,10 +387,10 @@ run_a_test() { fi app_dir="$(mktemp -d $DATA_DIR/appdir-XXXXXX)" tar xfz "$tgz" -C $app_dir - python3 $CMD \ - --device $TARGET \ - --port $PORT \ - --app $app_dir/app.elf + pytest $CMD -v \ + --device $TARGET \ + --port $PORT \ + --app $app_dir/app.elf fi ;; *.hex) From 1def2ec9b1ddbb7c92dcef0e50654929dcb96256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 19 Dec 2023 10:29:35 +0100 Subject: [PATCH 29/78] Tests: skip specific devices tests if the given device is not right --- tests/integration/nano/conftest.py | 6 ++++++ .../nano/nanos/test_nanos_regression_batched_ops.py | 3 +++ .../nanosp/test_nanosp_regression_potential_empty_screen.py | 3 +++ ...osp_regression_press_right_works_across_apdu_recieves.py | 3 +++ .../nano/nanox/test_nanox_regression_batched_ops.py | 3 +++ 5 files changed, 18 insertions(+) diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py index 80f767078..25977a65b 100644 --- a/tests/integration/nano/conftest.py +++ b/tests/integration/nano/conftest.py @@ -94,3 +94,9 @@ def backend(app_path: Path, @pytest.fixture(scope="function") def app(backend: SpeculosTezosBackend, golden_run: bool): return TezosAppScreen(backend, APP_KIND.WALLET, golden_run) + +def requires_device(device): + return pytest.mark.skipif( + f"config.getvalue('device') != '{ device }'", + reason=f"Test requires device to be { device }." + ) diff --git a/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py b/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py index 791079ee3..1fe7796c4 100755 --- a/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py +++ b/tests/integration/nano/nanos/test_nanos_regression_batched_ops.py @@ -21,6 +21,8 @@ root_path=os.path.dirname(dir_path) sys.path.append(root_path) +from conftest import requires_device + from pathlib import Path from utils.app import Screen, DEFAULT_ACCOUNT @@ -39,6 +41,7 @@ # Amount: 0.06 XTZ # Destination: KT1CYT8oACUcCSNTu2qfgB4fj5bD7szYrpti +@requires_device("nanos") def test_nanos_regression_batched_ops(app): test_name = Path(__file__).stem diff --git a/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py b/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py index 52b152821..1e0c7e8cf 100755 --- a/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py +++ b/tests/integration/nano/nanosp/test_nanosp_regression_potential_empty_screen.py @@ -21,6 +21,8 @@ root_path=os.path.dirname(dir_path) sys.path.append(root_path) +from conftest import requires_device + from pathlib import Path from utils.app import Screen, DEFAULT_ACCOUNT @@ -40,6 +42,7 @@ # S # S +@requires_device("nanosp") def test_nanosp_regression_potential_empty_screen(app): test_name = Path(__file__).stem diff --git a/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py b/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py index e3b05ca5a..0d2a1918a 100755 --- a/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py +++ b/tests/integration/nano/nanosp/test_nanosp_regression_press_right_works_across_apdu_recieves.py @@ -21,6 +21,8 @@ root_path=os.path.dirname(dir_path) sys.path.append(root_path) +from conftest import requires_device + from pathlib import Path from utils.app import Screen, DEFAULT_ACCOUNT @@ -28,6 +30,7 @@ # Expression: {IF_NONE {{SWAP;IF {DIP {{DROP 1;PUSH unit Unit;PUSH bool True;PUSH string ";L\\S?p$-Fq)VDg\n]te\no4v0_8)\""}}} {{DROP 2;PUSH unit Unit;PUSH bool False;PUSH string "Li-%*edF6~?E[5Kmu?dyviwJ^2\"\\d$FyQ>>!>D$g(Qg";PUSH string "*Tx Date: Fri, 22 Dec 2023 11:50:30 +0100 Subject: [PATCH 30/78] Tests: allow tests to be run in parallel --- docker/Dockerfile.integration-tests | 2 +- tests/integration/nano/conftest.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile.integration-tests b/docker/Dockerfile.integration-tests index 3b9238654..eaf6ebc23 100644 --- a/docker/Dockerfile.integration-tests +++ b/docker/Dockerfile.integration-tests @@ -3,7 +3,7 @@ FROM ghcr.io/ledgerhq/speculos:sha-f9dfe87 RUN apt update && \ apt install -y curl jq build-essential libsodium-dev git xxd && \ pip install wheel setuptools pkginfo cryptography && \ - pip install jsonschema==4.3.2 base58 pytezos==3.10.2 GitPython && \ + pip install jsonschema==4.3.2 base58 pytezos==3.10.2 GitPython pytest-xdist && \ git clone --depth 1 --branch v1.11.4 https://github.com/ledgerHQ/ragger && \ cd ragger && \ pip install --extra-index-url https://test.pypi.org/simple/ '.[all_backends]' && \ diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py index 25977a65b..47c525ee1 100644 --- a/tests/integration/nano/conftest.py +++ b/tests/integration/nano/conftest.py @@ -46,8 +46,11 @@ def firmware(pytestconfig) -> Firmware : return next(fw for fw in FIRMWARES if fw.device == device) @pytest.fixture(scope="session") -def port(pytestconfig) -> int : - return pytestconfig.getoption("port") +def port(pytestconfig, request, worker_id) -> int : + if worker_id == "master": + return pytestconfig.getoption("port") + # worker_id = gw0, gw1, ... + return 5000 + int(worker_id[2:]) @pytest.fixture(scope="session") def display(pytestconfig) -> bool : From 8f1b8cb2431bd8604788677085d17ed25774f5ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 22 Dec 2023 11:51:49 +0100 Subject: [PATCH 31/78] Tests: retreive pytest logs correctly --- tests/integration/nano/conftest.py | 41 +++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py index 47c525ee1..979028596 100644 --- a/tests/integration/nano/conftest.py +++ b/tests/integration/nano/conftest.py @@ -2,7 +2,7 @@ from pathlib import Path from ragger.firmware import Firmware -from typing import Callable, Generator, List, Optional, Tuple, Union +from typing import Dict, Callable, Generator, List, Optional, Tuple, Union from utils.app import TezosAppScreen, SpeculosTezosBackend, DEFAULT_SEED from utils.backend import TezosBackend, APP_KIND @@ -35,11 +35,50 @@ def pytest_addoption(parser): const=True, default=False, help="Golden run") + parser.addoption("--log-dir", + type=Path, + help="Log dir") parser.addoption("--app", type=str, help="App", required=True) +global_log_dir: Union[Path, None] = None + +def pytest_configure(config): + global global_log_dir + log_dir = config.getoption("log_dir") + if log_dir is not None: + global_log_dir = Path(log_dir) + +logs : Dict[str, List[pytest.TestReport]] = {} + +@pytest.hookimpl(tryfirst=True) +def pytest_runtest_logstart(nodeid, location): + logs[location[2]] = [] + +@pytest.hookimpl(tryfirst=True) +def pytest_runtest_logreport(report): + logs[report.head_line].append(report) + +@pytest.hookimpl(tryfirst=True) +def pytest_runtest_logfinish(nodeid, location): + if global_log_dir is not None: + log_dir = global_log_dir / Path(location[0]).stem + log_dir.mkdir(parents=True, exist_ok=True) + head_line = location[2] + log_file = log_dir / f"{head_line.replace(' ', '_')}.log" + with open(log_file, 'w') as writer: + for report in logs[head_line]: + writer.write(f"============================== {report.when.capitalize()} {report.outcome} ==============================\n") + writer.write(f"{report.longreprtext}\n") + for section in report.sections: + if section[0].endswith(report.when): + writer.write(f"------------------------------ {section[0]} ------------------------------\n") + writer.write(f"{section[1]}\n") + writer.write("\n") + writer.write("\n") + @pytest.fixture(scope="session") def firmware(pytestconfig) -> Firmware : device = pytestconfig.getoption("device") From 92f09c74913e413f1af8ae5d217d06f4429d5ae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 22 Dec 2023 11:51:17 +0100 Subject: [PATCH 32/78] Tests: run the basic tests with pytest in the Makefile and the CI --- .github/workflows/build.yml | 18 ++++++++++++++---- .gitignore | 1 + Makefile | 12 +++++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a9d1f94c8..2339c9430 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -93,17 +93,27 @@ jobs: ./tests/integration/run_test_local.sh -F -m ${{ matrix.device }} \ ./tests/integration/${{ matrix.device }} else - ./tests/integration/run_test_local.sh -F -m ${{ matrix.device }} \ - ./tests/integration/nano ./tests/integration/nano/${{ matrix.device }} + TMP_DIR=$(mktemp -d /tmp/foo-XXXXXX) + tar xfz app_${{ matrix.device }}_dbg.tgz -C $TMP_DIR + pytest -n 32 tests/integration/nano/ --tb=no \ + --device ${{ matrix.device }} --app $TMP_DIR/app.elf \ + --log-dir integration_tests_log fi - - name: Upload results + - name: Upload Stax results uses: actions/upload-artifact@v3 - if: always() + if: always() && matrix.device == 'stax' with: name: integration_tests_${{ matrix.device }}.json path: ./integration_tests.json + - name: Upload Nano results + uses: actions/upload-artifact@v3 + if: always() && matrix.device != 'stax' + with: + name: integration_tests_log_${{ matrix.device }} + path: ./integration_tests_log + generate_samples_unit_tests: needs: [build_docker_tezos_ocaml] runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 9d0e053fe..5232e38e6 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ /app/src/glyphs.h /app_*.tgz /integration_tests.json +/integration_tests_log /pattern_registry /tests/samples diff --git a/Makefile b/Makefile index c2586ccf7..f25bd9132 100644 --- a/Makefile +++ b/Makefile @@ -94,12 +94,18 @@ integration_tests_basic_stax: app_stax.tgz \ tests/integration/stax/* $(RUN_TEST_DOCKER) stax tests/integration/stax -integration_tests_basic_%: app_%.tgz \ - app_%_dbg.tgz \ +integration_tests_basic_%: app_%_dbg.tgz \ tests/integration/* \ tests/integration/nano/* \ tests/integration/nano/%/* - $(RUN_TEST_DOCKER) $* tests/integration/nano tests/integration/nano/$* + docker run --user "$$(id -u)":"$$(id -g)" --rm -i -v "$(realpath .):/app" \ + --entrypoint=/bin/sh ledger-app-tezos-integration-tests -c " \ + TMP_DIR=\$$(mktemp -d /tmp/foo-XXXXXX); \ + cd /app; \ + tar xfz app_$*_dbg.tgz -C \$$TMP_DIR; \ + pytest -n 32 tests/integration/nano/ --tb=no \ + --device $* --app \$$TMP_DIR/app.elf \ + --log-dir integration_tests_log" integration_tests_basic: integration_tests_basic_nanos \ integration_tests_basic_nanosp \ From e36533c9e6860e19f1c0b10c785a5724f29a901f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 11 Jan 2024 16:04:12 +0100 Subject: [PATCH 33/78] Tests: allowing to add more speculos arguments --- tests/integration/nano/conftest.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py index 979028596..349c4fc5a 100644 --- a/tests/integration/nano/conftest.py +++ b/tests/integration/nano/conftest.py @@ -38,6 +38,9 @@ def pytest_addoption(parser): parser.addoption("--log-dir", type=Path, help="Log dir") + parser.addoption("--speculos-args", + type=str, + help="Speculos arguments") parser.addoption("--app", type=str, help="App", @@ -103,6 +106,13 @@ def golden_run(pytestconfig) -> bool: def app_path(pytestconfig) -> Path: return Path(pytestconfig.getoption("app")) +@pytest.fixture(scope="session") +def speculos_args(pytestconfig) -> List[str]: + speculos_args = pytestconfig.getoption("speculos_args") + if speculos_args is None: + return [] + return speculos_args.split() + @pytest.fixture(scope="function") def seed(request) -> str: param = getattr(request, "param", None) @@ -114,7 +124,7 @@ def backend(app_path: Path, port: int, display: bool, seed: str, - speculos_args: List[str] = []) -> Generator[SpeculosTezosBackend, None, None]: + speculos_args: List[str]) -> Generator[SpeculosTezosBackend, None, None]: if display: speculos_args += ["--display", "qt"] From ed0720129aeca5a6c879ef710e4d2c623ec301ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 11 Jan 2024 16:05:30 +0100 Subject: [PATCH 34/78] Update the README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3ef7db652..9cc082a32 100644 --- a/README.md +++ b/README.md @@ -157,10 +157,10 @@ make app_nanox_dbg.tgz You can run an individual test from the test container. You should see the app progress on the vnc viewer. ```sh -./tests/integration/nano/.py \ +pytest tests/integration/nano/.py \ --device $DEVICE \ --port $PORT \ - --vnc-port 41000 \ + --speculos-args="--vnc-port 41000" \ --app app/bin/app.elf ``` From 0feaed4340b712cc77d61755de362358fd3b184f Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Thu, 18 Jan 2024 09:57:37 +0100 Subject: [PATCH 35/78] Bump version --- app/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Makefile b/app/Makefile index d2acc28b3..72ec3a285 100644 --- a/app/Makefile +++ b/app/Makefile @@ -43,7 +43,7 @@ APPNAME = "Tezos Wallet" # Application version APPVERSION_M=3 APPVERSION_N=0 -APPVERSION_P=0 +APPVERSION_P=1 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) # COMMIT From 5ee47658fbd49fb1d0fe886b7a66e0c8e7eda1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 18 Jan 2024 16:12:17 +0100 Subject: [PATCH 36/78] Exception: allows the errors handling without using global variable --- app/src/exception.h | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/app/src/exception.h b/app/src/exception.h index 556973f90..e75bb9b5e 100644 --- a/app/src/exception.h +++ b/app/src/exception.h @@ -29,6 +29,8 @@ // https://www.eftlab.com/knowledge-base/complete-list-of-apdu-responses // https://docs.zondax.ch/ledger-apps/starkware/APDU +typedef uint16_t tz_exc; + #define EXC_WRONG_PARAM 0x6B00 #define EXC_WRONG_LENGTH 0x6C00 #define EXC_INVALID_INS 0x6D00 @@ -80,9 +82,9 @@ */ #define TZ_PREAMBLE(_args) \ - uint16_t _sw_ret_code = 0x0000; \ + tz_exc _sw_ret_code = 0x0000; \ cx_err_t error = CX_OK; \ - if (0) \ + if (error != CX_OK) \ goto bail; \ if (0) \ goto end; \ @@ -101,6 +103,16 @@ } \ FUNC_LEAVE(); +#define TZ_LIB_POSTAMBLE \ + end: \ + if (error != CX_OK) { \ + _sw_ret_code = EXC_UNKNOWN_CX_ERR; \ + PRINTF("CX_CHECK failed with 0x%08x", error); \ + } \ + bail: \ + FUNC_LEAVE(); \ + return _sw_ret_code + #define TZ_FAIL(_sw_code) \ do { \ _sw_ret_code = _sw_code; \ @@ -131,4 +143,14 @@ } \ } while (0) +#define TZ_LIB_CHECK(_call) \ + do { \ + _sw_ret_code = (_call); \ + if (_sw_ret_code) { \ + PRINTF("TZ_LIB_CHECK(\"%s\") on %s:%u\n", #_call, __FILE__, \ + __LINE__); \ + goto bail; \ + } \ + } while (0) + #define TZ_ASSERT_NOTNULL(_x) TZ_ASSERT(EXC_MEMORY_ERROR, (_x) != NULL) From ab218faaeeda53ba803a55663719f81df2bf82b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 18 Jan 2024 16:12:23 +0100 Subject: [PATCH 37/78] Exception: use the new way to handle error on function used by swap --- app/src/apdu_pubkey.c | 15 +++++++++------ app/src/apdu_sign.c | 4 ++-- app/src/handle_swap.c | 19 ++++++++++--------- app/src/keys.c | 24 +++++++++++++----------- app/src/keys.h | 12 ++++++------ 5 files changed, 40 insertions(+), 34 deletions(-) diff --git a/app/src/apdu_pubkey.c b/app/src/apdu_pubkey.c index e2dd49759..0469b42f6 100644 --- a/app/src/apdu_pubkey.c +++ b/app/src/apdu_pubkey.c @@ -59,7 +59,10 @@ provide_pubkey(void) static void format_pkh(cx_ecfp_public_key_t *pubkey, char *buffer, size_t len) { - derive_pkh(pubkey, global.path_with_curve.derivation_type, buffer, len); + TZ_PREAMBLE(("buffer=%p, len=%u", buffer, len)); + TZ_LIB_CHECK(derive_pkh(pubkey, global.path_with_curve.derivation_type, + buffer, len)); + TZ_POSTAMBLE; } static void @@ -179,14 +182,14 @@ handle_apdu_get_public_key(command_t *cmd) global.path_with_curve.derivation_type = cmd->p2; TZ_ASSERT(EXC_WRONG_PARAM, check_derivation_type(global.path_with_curve.derivation_type)); - TZ_CHECK(read_bip32_path(&global.path_with_curve.bip32_path, cmd->data, - cmd->lc)); + TZ_LIB_CHECK(read_bip32_path(&global.path_with_curve.bip32_path, + cmd->data, cmd->lc)); // Derive public key and store it on global.keys.pubkey - TZ_CHECK(derive_pk(&global.keys.pubkey, - global.path_with_curve.derivation_type, - &global.path_with_curve.bip32_path)); + TZ_LIB_CHECK(derive_pk(&global.keys.pubkey, + global.path_with_curve.derivation_type, + &global.path_with_curve.bip32_path)); if (prompt) prompt_address(); else diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index 6973f8085..f9798a51f 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -446,8 +446,8 @@ handle_first_apdu(command_t *cmd) TZ_ASSERT_NOTNULL(cmd); APDU_SIGN_ASSERT_STEP(SIGN_ST_IDLE); - TZ_CHECK(read_bip32_path(&global.path_with_curve.bip32_path, cmd->data, - cmd->lc)); + TZ_LIB_CHECK(read_bip32_path(&global.path_with_curve.bip32_path, + cmd->data, cmd->lc)); global.path_with_curve.derivation_type = cmd->p2; TZ_ASSERT(EXC_WRONG_PARAM, check_derivation_type(global.path_with_curve.derivation_type)); diff --git a/app/src/handle_swap.c b/app/src/handle_swap.c index 2a08a1b4a..f4995cbd5 100644 --- a/app/src/handle_swap.c +++ b/app/src/handle_swap.c @@ -45,17 +45,17 @@ void swap_handle_check_address(check_address_parameters_t *params) { - FUNC_ENTER(("params=%p", params)); + TZ_PREAMBLE(("params=%p", params)); if (params->address_to_check == NULL) { PRINTF("[ERROR] Address to check is null\n"); - goto error; + goto bail; } if (params->address_parameters_length == 0 || params->address_parameters == NULL) { PRINTF("[ERROR] Address parameters is null\n"); - goto error; + goto bail; } char address[TZ_CAPTURE_BUFFER_SIZE] = {0}; @@ -64,21 +64,22 @@ swap_handle_check_address(check_address_parameters_t *params) derivation_type_t derivation_type = DERIVATION_TYPE_ED25519; bip32_path_t bip32_path; - TZ_CHECK(read_bip32_path(&bip32_path, params->address_parameters, - params->address_parameters_length)); + TZ_LIB_CHECK(read_bip32_path(&bip32_path, params->address_parameters, + params->address_parameters_length)); cx_ecfp_public_key_t pubkey; - TZ_CHECK(derive_pk(&pubkey, derivation_type, &bip32_path)); - TZ_CHECK(derive_pkh(&pubkey, derivation_type, address, sizeof(address))); + TZ_LIB_CHECK(derive_pk(&pubkey, derivation_type, &bip32_path)); + TZ_LIB_CHECK( + derive_pkh(&pubkey, derivation_type, address, sizeof(address))); if (strcmp(params->address_to_check, address) != 0) { PRINTF("[ERROR] Check address fail: %s != %s\n", params->address_to_check, address); - goto error; + goto bail; } params->result = 1; FUNC_LEAVE(); return; -error: +end: bail: params->result = 0; FUNC_LEAVE(); diff --git a/app/src/keys.c b/app/src/keys.c index 92bb8392b..70c609a3e 100644 --- a/app/src/keys.c +++ b/app/src/keys.c @@ -33,8 +33,9 @@ #include "keys.h" #include "globals.h" -static void public_key_hash(uint8_t *, size_t, cx_ecfp_public_key_t *, - derivation_type_t, const cx_ecfp_public_key_t *); +static tz_exc public_key_hash(uint8_t *, size_t, cx_ecfp_public_key_t *, + derivation_type_t, + const cx_ecfp_public_key_t *); static cx_curve_t derivation_type_to_cx_curve(derivation_type_t derivation_type) @@ -50,7 +51,7 @@ derivation_type_to_cx_curve(derivation_type_t derivation_type) // clang-format on } -void +tz_exc read_bip32_path(bip32_path_t *out, const uint8_t *in, size_t in_size) { buffer_t cdata = {in, in_size, 0}; @@ -63,10 +64,10 @@ read_bip32_path(bip32_path_t *out, const uint8_t *in, size_t in_size) // Assert entire bip32_path consumed && (sizeof(uint8_t) + sizeof(uint32_t) * out->length == cdata.offset)); - TZ_POSTAMBLE; + TZ_LIB_POSTAMBLE; } -void +tz_exc derive_pk(cx_ecfp_public_key_t *public_key, derivation_type_t derivation_type, const bip32_path_t *bip32_path) { @@ -90,17 +91,18 @@ derive_pk(cx_ecfp_public_key_t *public_key, derivation_type_t derivation_type, public_key->W_len = 33; } - TZ_POSTAMBLE; + TZ_LIB_POSTAMBLE; } -void +tz_exc derive_pkh(cx_ecfp_public_key_t *pubkey, derivation_type_t derivation_type, char *buffer, size_t len) { uint8_t hash[21]; TZ_PREAMBLE(("buffer=%p, len=%u", buffer, len)); TZ_ASSERT_NOTNULL(buffer); - TZ_CHECK(public_key_hash(hash + 1, 20, NULL, derivation_type, pubkey)); + TZ_LIB_CHECK( + public_key_hash(hash + 1, 20, NULL, derivation_type, pubkey)); // clang-format off switch (derivation_type) { case DERIVATION_TYPE_SECP256K1: hash[0] = 1; break; @@ -114,12 +116,12 @@ derive_pkh(cx_ecfp_public_key_t *pubkey, derivation_type_t derivation_type, if (tz_format_pkh(hash, 21, buffer, len)) TZ_FAIL(EXC_UNKNOWN); - TZ_POSTAMBLE; + TZ_LIB_POSTAMBLE; } #define HASH_SIZE 20 -static void +static tz_exc public_key_hash(uint8_t *hash_out, size_t hash_out_size, cx_ecfp_public_key_t *compressed_out, derivation_type_t derivation_type, @@ -160,7 +162,7 @@ public_key_hash(uint8_t *hash_out, size_t hash_out_size, memmove(compressed_out, &compressed, sizeof(*compressed_out)); } - TZ_POSTAMBLE; + TZ_LIB_POSTAMBLE; } /** diff --git a/app/src/keys.h b/app/src/keys.h index 396248d62..c623e6b48 100644 --- a/app/src/keys.h +++ b/app/src/keys.h @@ -54,12 +54,12 @@ typedef struct { derivation_type_t derivation_type; } bip32_path_with_curve_t; -void read_bip32_path(bip32_path_t *, const uint8_t *, size_t); -void derive_pk(cx_ecfp_public_key_t *, derivation_type_t, - const bip32_path_t *); -void derive_pkh(cx_ecfp_public_key_t *, derivation_type_t, char *, size_t); -void sign(derivation_type_t, const bip32_path_t *, const uint8_t *, size_t, - uint8_t *, size_t *); +tz_exc read_bip32_path(bip32_path_t *, const uint8_t *, size_t); +tz_exc derive_pk(cx_ecfp_public_key_t *, derivation_type_t, + const bip32_path_t *); +tz_exc derive_pkh(cx_ecfp_public_key_t *, derivation_type_t, char *, size_t); +void sign(derivation_type_t, const bip32_path_t *, const uint8_t *, size_t, + uint8_t *, size_t *); static inline bool check_derivation_type(derivation_type_t code) From d40434edab21946bc2e57f22082076a6d2971639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 18 Jan 2024 16:17:08 +0100 Subject: [PATCH 38/78] Bump the version --- app/Makefile | 2 +- tests/integration/app_vars.sh | 2 +- .../nano/snapshots/nanos/version.png | Bin 318 -> 330 bytes .../nano/snapshots/nanosp/version.png | Bin 340 -> 354 bytes .../nano/snapshots/nanox/version.png | Bin 340 -> 354 bytes tests/integration/nano/utils/app.py | 2 +- .../stax/snapshots/test_basic/info.png | Bin 9766 -> 9890 bytes .../test_blindsign_too_deep/info.png | Bin 9766 -> 9890 bytes .../info.png | Bin 9766 -> 9890 bytes .../test_blindsign_too_large/info.png | Bin 9766 -> 9890 bytes .../snapshots/test_blindsign_valid/info.png | Bin 9766 -> 9890 bytes .../test_expert_mode_rejections/info.png | Bin 9766 -> 9890 bytes 12 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Makefile b/app/Makefile index 72ec3a285..7171c30df 100644 --- a/app/Makefile +++ b/app/Makefile @@ -43,7 +43,7 @@ APPNAME = "Tezos Wallet" # Application version APPVERSION_M=3 APPVERSION_N=0 -APPVERSION_P=1 +APPVERSION_P=2 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) # COMMIT diff --git a/tests/integration/app_vars.sh b/tests/integration/app_vars.sh index 19ade4164..f67aa334b 100644 --- a/tests/integration/app_vars.sh +++ b/tests/integration/app_vars.sh @@ -19,6 +19,6 @@ export COMMIT_BYTES=$(printf '%s' "$COMMIT" | xxd -p -c 256) export VERSION_WALLET_TAG="00" export APPVERSION_M=3 export APPVERSION_N=0 -export APPVERSION_P=0 +export APPVERSION_P=2 export APPVERSION=$APPVERSION_M.$APPVERSION_N.$APPVERSION_P export VERSION_BYTES=$(printf "%02x%02x%02x%02x" "$VERSION_WALLET_TAG" "$APPVERSION_M" "$APPVERSION_N" "$APPVERSION_P") diff --git a/tests/integration/nano/snapshots/nanos/version.png b/tests/integration/nano/snapshots/nanos/version.png index 8b9a0e5280bb74b8295952559d6b6b263ace00ac..42b4538d79d4327e6c8c1b43e74768a110774f99 100644 GIT binary patch delta 303 zcmV+~0nq-w0?GoAB!3Y}L_t(|ob8#>4uc>JMawe(|ATpO4=khsin>jE>+X3Xl$z$Y zRzML#2qA?0D{GcD55`|UDhN;S0DekZydyXaZ~}BK7iHHhX?f4rL9;+q8tMW)qa6Vf z_V5nCph~Hg6&ZAxy2g4!<5hA11HcW$lL~iNIwyAo{5r0hg3P1uT%q4451*z{Q zkS%Dxlve-gCsEUbk$|dBGbpXe+F5F=rMP8U~A zYf*#{LI@%M%9dnHjq!(%3c_>t0WM`(XP@9Szy{b{R%N#&%lewngJOXg8}b4>V>bdA z_LzMDhb*O4R-{p3@*3|6#V+*#27os}Q_^N-M{cRow#a&KBY&9g82|%1^d&2-g4FjA z$PzRzrB{FINmP3<49Myf11(KnXKACJ;$9S*XsvV@hJ>a1U*$kvs(%Bn$W;F}=)p{a zRiTka=xk^rfxpAe%k3MXiL?&Wx(5X7n&Z$C7W-F(67n)N3dT*ikN$6fDkj$v!GNEJ p29Q2=8(NG9LmY$%_@%FKXo0fr+aTwnpCX!{Iz4bW7eqv{fzTl zWNk&>WZE|DluDhQ^J|?~;QEX2E_~H8wMf6>e&c^V)2S&r=}(>RWX{-jcg=OHs?&Qn z=^to%dSX}5&okvykE>=>Pr3EWcwR}goH*->mnH0<4BuYemerZPc3o@rl)j|k4NK}* zO|9_!&y;myNxfuNg60jaEl(XY^7Wk?|FqU_c<_b&sOzb|zHw@395USwdn^NN{c!db(|)u!1XVNX{-mvv4F FO#l_*j&=Y5 diff --git a/tests/integration/nano/snapshots/nanox/version.png b/tests/integration/nano/snapshots/nanox/version.png index 1e85ced3ab54cf18494bcf14952995fdd48d88e2..02f48cd5ffb219143640df07033bab44539824ad 100644 GIT binary patch delta 327 zcmcb@^oVJKO1-A1i(^Q|oVPb)`I;33+yZZvsK2TA+&tZGf)H0v{n~RqJD;EIkod&A zv`dqb0S+2w3keEJ_Sf$T714jq_$T<>%_@%FKXo0fr+aTwnpCX!{Iz4bW7eqv{fzTl zWNk&>WZE|DluDhQ^J|?~;QEX2E_~H8wMf6>e&c^V)2S&r=}(>RWX{-jcg=OHs?&Qn z=^to%dSX}5&okvykE>=>Pr3EWcwR}goH*->mnH0<4BuYemerZPc3o@rl)j|k4NK}* zO|9_!&y;myNxfuNg60jaEl(XY^7Wk?|FqU_c<_b&sOzb|zHw@395USwdn^NN{c!db(|)u!1XVNX{-mvv4F FO#l_*j&=Y5 diff --git a/tests/integration/nano/utils/app.py b/tests/integration/nano/utils/app.py index aba881693..718b8b4de 100644 --- a/tests/integration/nano/utils/app.py +++ b/tests/integration/nano/utils/app.py @@ -30,7 +30,7 @@ from .account import Account, SIGNATURE_TYPE from .backend import StatusCode, TezosBackend, APP_KIND -version: Tuple[int, int, int] = (3, 0, 0) +version: Tuple[int, int, int] = (3, 0, 2) class TezosAPDUChecker: diff --git a/tests/integration/stax/snapshots/test_basic/info.png b/tests/integration/stax/snapshots/test_basic/info.png index b445357466e065cc36ecbbcb814292134d85a4e7..8b571da7e1d27d7ef4ac01871b389c44e2258784 100644 GIT binary patch literal 9890 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 G)c*ot6)%?n literal 9766 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 diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep/info.png b/tests/integration/stax/snapshots/test_blindsign_too_deep/info.png index b445357466e065cc36ecbbcb814292134d85a4e7..8b571da7e1d27d7ef4ac01871b389c44e2258784 100644 GIT binary patch literal 9890 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 G)c*ot6)%?n literal 9766 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 diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/info.png b/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/info.png index b445357466e065cc36ecbbcb814292134d85a4e7..8b571da7e1d27d7ef4ac01871b389c44e2258784 100644 GIT binary patch literal 9890 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 G)c*ot6)%?n literal 9766 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 diff --git a/tests/integration/stax/snapshots/test_blindsign_too_large/info.png b/tests/integration/stax/snapshots/test_blindsign_too_large/info.png index b445357466e065cc36ecbbcb814292134d85a4e7..8b571da7e1d27d7ef4ac01871b389c44e2258784 100644 GIT binary patch literal 9890 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 G)c*ot6)%?n literal 9766 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 diff --git a/tests/integration/stax/snapshots/test_blindsign_valid/info.png b/tests/integration/stax/snapshots/test_blindsign_valid/info.png index b445357466e065cc36ecbbcb814292134d85a4e7..8b571da7e1d27d7ef4ac01871b389c44e2258784 100644 GIT binary patch literal 9890 zcmeHtS5#AN*KI&VQ4mx_6a))ZL$6X_RKyrT5UCQ1kRT=WUKJExk@68C2nZ~5`6!|T{0#N~hg z?76Jj(Qm{baovkb0g3;`W!$kRYO|##dGzn1zZ=$>AsA4@FclqpC*>6|O%obUJ*vVV_;)eK*5N7T*Hr7Rqtu*)b ztyVq030)0do)StUk|57bI|)M)614(Xq~TV#i#bJU^pJ;FNyBwW*f_$Pt5B%8%jjHh zr1O-DN0%U47bTV)T}`0fGI+uFl31RDShwaRQ_&nXZj^tadLeX67`<)p2i=z$m&R*uF5P?J2;l&Du&Ve@CK(? zI(nOR3za7oS5iXVb#0yL<9nqb5tj=~BK}RNwk$Uv9zv-?P51+%gR?#BAK(yZc%6Yc z|3`XjLdpQbx46G<8}UN2SsoV!TSnWlr25u^w0dV^JKwrwl$5wXZTN`$l;U~^wGgI5 zI4!lWoipUeW%pbFty@utk*z)LUSEoD_L;1BP4K7|qWYZ}B4M?!?>zXyFK38XHZ(92 zBTQjGE-Tx*zw27=kd=nt^ z+(+lfXKcZ(BrFy?<^4imSfM|OW+fM^Cw9uGY~If%WgV}WUwtL^oF)=*1V8TS@JUn= zVTXpdK3h!m^1oRr5*Vm5w|E$A=-x6Rk^rA^^oIrB%vfryqvRM#)*D<(c6u%QDpl;c z(`%S>vn@f~&d$z3uvc@6r&3Rk?-pMT^2)e?xZ)VaUoa+fpi97(^{)-0Obs#p( zf^z7uXD9dmm-xit_6lRWG$n9y{U=pUDhakTY^jr(W8Cj)SXs0AlP4V;gn; z7D{Yq2*`waZ>8q5-?-SJC&`v)9P=~-{F$@>x7Hm>;=2c`nBHot`{x*w{c=j;72qMC zyP}!uhY@2sfN{^%6R}_%zh#}^CA^%6zne;j=pDDuA8ZHdk(IRF-OyTVf5e4}QBHiX z`j^j>_SvL5$wycOj#yz{T3IOIu(S>->S9a0 zpRjTie|Ap+K3Ame6~O*wJFL#rCp2rCmi5fx)#k)xlIr0d2ByDtd=0ru)ha6~nR+%~ zS)r8LZe;M2xn*%h1AB-H^_A3k{}xg2SQ){o=cO*}v_0EF9-WX5$S6o_0X>HES&F2e zuned$w&T}Vjj3Qon46geM4xnSR5Mf>mi9gH$QZ92usAsG$9douw~<<)+@-G@nFZdO zc_%cYj}}@u7EVN^FU#FXGd^=>b2*G_Q1E4eiwS?=osPuZBB{7``iTGylpY^|J~RF( zF*7sRIqoA-Z32~8&D|N+)0mAAVgpO+;Ie@;A4ehnlMbx0Ci>`r%&1i5SD94eVe}S& z!yCLp_g^t3PlmB-IW_g&HnokyWCD~ED!(`J{Q}^|r~f%rj!aOnLN_-Gg1m@!j(1RE zm9m^58-p~yf2<_@pQ=t*_d#<)9o(v=ksq|Y8d$+I`m0RrHQQFom7__)u<@=}^4#<4 z*>3cci@_`g!!h2fay+)v;al^8pwI44PI0s&u*t0k9gk|QYmsj8!4O*~D~ZSn_k(YG z++iK(4+Egyn$$f%s}Yha>SL$%o znLuq5!5A|$nN~Xx_Lc8v?L(SvArO`J2ur#>K1BY`+LL+Y~{Hl7GtWa`tb*T{f zU&zEVFMJEApX#T<9PAEQM~RWO{B&|?MnLq5x@HvMugB*WnaXQ^Pc0w=iSg-21)lyx z95T1u=aFaHRN$f!?cpFOax8Wb>eXj#W>(lwVr(ym9FYIm|75Y?9_cOAN_E%(iXW-? zjz}P6)m-VB9XX$A75&7F|6@L>%bO}N%2U?9@gnzCsRY~lfEKS?o<&fx?tAO|uoA zh?_apGxUK-q_$d<)78h$>GjVxDC>Pw=JCkjgL<LC^;)ovggoHb9F{hO^o14@Vk-Akgy-?H#nttM)l!Nl`3OUg0 zM+kMbo*Pi6Ugqi2(WPBG)e?>ISf|}VNiP6=DfYgYR~N{b^#%pcAnDcK?soNL)xdpC#4@JX#F}N zHo~?G@sgITZ!!`|B8={wWN&G0wJ05(EsJWQ1>mg9TUuJCrgJpMB8n{@jg$G?SS3%% zFe%W=<)I_sU5R>#!q2+;C*tK7wlkpFB*h;d&K5B7XmfuU;mb~A1&zB>o?EUKHAbn` z5*tcgURVuEv3si!W_Wg`m&(AD8S(aIyRbQU-ZiE;_uI zIC^llM3OaEr1?-~LbQf=qczPr9)hotihHiR#K)m$!p}?)gWNM4{rSU^UtiyZJ0k6K zmd=scMb>Mh!n8f*(es)btRD5POF~r^Alo&H8mLQq@$xq!qCsS<=O&`z9@i{HXIX+D zw0`mbD{<|@dR)5@Sd_Ng8td>%>{I#H+hmy$|8p@8!rk@L5e-Pf{OTim)JrigwO62# zOyLP}ZW)_)qC`ols5G=hr8KL3_%KH@FYI#HB{G!x~HK6tv3jt)x4NHUgSa)d>Ic#Z8q)&sGDkO(I^!)YdMtLe;_i9%2k27z~CID@A&Ku0Anqe{U}Z zF3srh2)PKF0e|VZjk-~w(v#+2Q4v{;4>WN0sAGXc1PYA|;vW4r$~=PXaZu%#6m7ME9gX}K%iUFGMGd}-@wKtM#a@^)gR zjtn0O;`QZ3+r&R8H;)cisAPyz;US znKvV{RpBMTC*yFKlFL?jn1|$N3p0QJqXF<1)x%Bc=?D6l$aM8Yyt03&mq*lu{gF-# z_PFMQ%W)UC0?Rb)4hT<0F^6-(^mzjWsQLT8c9~tFHhhC%)7siPtS!8!TD_MSAKth( zawoEuCEy+h^TE?y*;aaU0ELuCPC*iS?ZHp>JAiF?qe>a{=_<@U<}iMP?xIf5%MT3(=-L{5`QMRkxJD0 z`b&VC2B_I$1`+v!w*Ey=POE1bwJKfB8LA$T=RRa{xYO7iP{hk?1uiHtZ|Eug?-YHHgS8Aji8xuvOR$Vn;}`M@AP;hBPWAyDS@K37_K%a5w;B%iWs;0?mD|hgKUGi>m*z7zUNI`B+%Ae(W5n)eMcAjgA zVzX4nxSxENBUgwg4~I^38t`#IP)@%%25fv2Ig>8#g;zZ!iqa~f>ssCAb=h?dq&77JTkJ<{0jMiwJJHW`yGupU~Ya48889!%l2r6ImKB2 z?GMA*y>usxvBnYj=z|AVQe1exx8C=`LY_MO7=-TlOK40KLxAwesvMbw79Myc$um_o zfG3MVqs{|?8Srq2$iM(JqKt|t+6|EuaCbVQv+^nXlx6gs`f}bVy%h`51PqkQnMtUb z854D93IRYVQ0rnf5siR(0x#J85Ov(L?Tt7)^t)8ToyUM0)b-L)tRfKCq6vON>H*W= z>9iT~JE%N{c)L^_XDd`a-=0H2{>Ko&!2D8?!D|ON_4xXOs;KSA#C_||)u0+(HmP&{ z45;7=VzHe zRel@;T>_k@|3~~(Aju^ntj6kSqoXLXGyCCyjJGIFRVXOAj5GGgbN9^FdOwKLSZtt^ z(@L(1@N{A#UyuXEC5OUEU6;_h$zSVIGto2QYhZFaBP>E`I?ZbiM_CfVE2pZ^!kG(B zKJ;r7b_PAP6jF$O+IpYwm2HQ`cA?X~pN@01v&(%Dy>x1>(Qk@gxA$C34e#$6b#)x! zEVnXG+NOSYcPJls+ZsprRcnbPc?$KOCMww>=1r*fqww;34LP?&+#OHYxZGo9e7>)K6_+&Wk)A_^H@+46!gL9z|#sH6OTxe~e zKVoWT?M8@W%alrC1*Ne9Aifv4&m0vJ9sE&gI=+z-o-otD-J${?PpWyorj=F$(3ndJ z#tqo@9%e4l)rDZrBG?5t#pHkSrc{&{PLDL&`PA2J3jd&nEP%9kZ=gby>Ss~{cUmL_ ze%_l@CPsvHDU=;+@DCO4j!wG0r5=|H_*rm(d(FJfW{ip}%6?8RD8_XI$_m-6o_Gky z1S~x37bg4-j>5~+nr;CBArR-D0;wZckMqWM<`)VB(#tAU3@{&~YrjTvWyvJPpZRos z`MCmo95A)E&WY2~G%qippw3ZEPHM*iQF%(^P_t=vVfHOEvxXe)dqQdn4lv?)3OjE` zghn$>a4b9`B4VjAV#VB1k1x-~`j=DyxQjx--I+QhQ1~g0b!pQ}jf0Fm3Z+yk4(fK( zgg?dspzJq4Tj2$<*5zwjc9rA6jOnf2W(7n&!B8#?HV)88Bmq!~P$FpnafwM$Pkbi@ zl)E7YxUaWbxT$G_!7xR`QDSv_nFA7s*&hsf3-<+C685{eTeOFEme$%=0rZ)jqK0?R#24@guOy$QaY`-Dc)Bzzp{KnrXXu)dBCbFt%-L>p zK=&sKR;TwxIbn||o!Pf+Wc?;9x6v>LT6=jh@bqoihOU;lE7HM(=+DQoTv$UDKO99q zrP%T{U+JxH&s1O*K_vOW!dNH6NGw=Ct1Hp4R9dEtyn9yKYo@$=q*P#xa-ehu`$`*A zksZ0&0}BxXDz^mW;yKIu6=ve&*98`G@_nu(hSeadlyn2H%v8g^#w~Mc-@`;8c@Z}v zzkPu9Z4^g{-)$OW1=;%>iMfod>vC%3NcH91^7&B7Ikq02P^tB!0RO49EoAl1mh}8& z(#znG=w>5=d28c$vft&n4%#N~F|%H>)b%`za`P)z*a|mtiH)Mqg;rfFi;(K*gT5AZ z&62nen}>+uhEugvlg6B7jlTHrn|H;w=}o5}IA2Yc*i0;>Q;w-+8QBIi1;^MIWW-?W zgV%k6KiWDa>q;Ce(iW*j5&(IwE)2w#QxQB2WxbuVqnktxZ?*+qs@4z^&-Mr`iis5#FnOlC=T?QOzubK2Ta9DqbyjIST9v>B; z&hFN}0a3VnrQm9o zk)mf2UNLQGfmOWUgDDlSLc!CiHA+;)aG-dLCUqMzCssp;Vtpht7H^=k*Wz~@M@{b* zI^+2*Ejq91yx7UHH{pluH~ESiRSYoq_9i+-e>F1z?RPiP60jE{_7{r7yX3jy@0|g& zwd-_$YZ@b7Avik_J!PN+WO@1e@g4n)_io!4omyk^Jx0SAoq|gE=KwUo#tF1BnCVjR z?K1^*x4hp;sBzG?+#ImC<%DPsI{0`cCN;&iTbZaD z?kuLaP-bTAf(boSZuK#RVWuC(w$E#l9?ivTJxE~6aYB+SbeO9rKiTS5Nuso>bb~ig zzjAYB7EvgQZ{H&3zl>yaW$(*6pt81J;6l}--4EY)v+|MHIO>HDJ0;BVsvRhVwgOG_^r*O_lRt%6=2?J2VEC9G(s2GDtL;F_fg`vu_#d7G!M^ z>5&Gm05VGNQ-2u@hg!QylIfse^4sUF;_}S#v*-&i;fOtzB1zg#aqAcc(|tG3Dx%yW zBsG!$ee3t|Li}t}FnAt$;Aq?K7v&$vW;>7nGcB{9Ztr~p1KJ+RncX7j2nq;#V)@;i$hBBKc zIq>PE(I&$pXutnLX>!NPEX-m(W83T3n&Lb+W*-FGe#{98g4<78|D0eCGUJX6x_2R) zzf)A_evcb_U#x{kGe+KaG}=>LHX;PM*koUT^K_1u>FV%x4J$n~<7KnAUNV0XeGIHS z6tkH0Bxhq*DDg#(?JKJn0bGlV+hLc%rq}iX1~3d5hpb61-)Zt2g!*H%ytbR+f~r28+J_RpC4xk7Oz3i(O?4uz^DVC(;9*TKua zZ)M*$CRIwFvi$d`kC#^(p5!-HX**uG`1dHdM$BFAGBtG}#8pmDnZ0n_OZ7;5#fg+ zSM<|2xH-lOFBOh#FZ5?9VY0tWvlyhI@L1BaWa6udUb7MU3Te|YDX4W`@yFKIIIH|3 zHv7w!^~PuLq~7vhqasqaZj~nG%3={De|utJ(3A>MrcK{kdgELAqQ8AQftS}s<)BOc zS4n3y{R!OTs#e}8f8MCj&x!sF8BDfD?$yN=@Jn-x?&I2`li}kv!x1*iZ!TgHqJb8l zJ5J2U#@3DU(=*IPq56mcsG)s&Uu!!QRJxPGs2i$na7^_4aHM%k%3_M%+p0ejXV1FI0@_5n{IPa(O?(e|!KdT5mKHS?cWH}@_zQ<%X(n{$0_zUGJKUZoLv4_S8 zHI2I-t}`v(e*#*P`L~V?@KH~{sHNxjg@Eqvj}ONFP8wk;dfsr;% zR)3}xPP3x~fKPn@Q^u2VVRN?oBVpvvl+AN>F2ANcf3m?T`Vbpt)1>!jinCf}KlXuT z$JJ_W7+nEc3V3qO0*lJ^jWE&P zagb5>C$&m1yON*3+guFZFsTcp?fyHjo>j4cCVorS$;y)OnLk(5Tz9g6?rg{xrT&$qi=EV<(_7!vfQE@s?DQ*)MGBWn5;BbiOzM1zVkC-4D+h zf`_W+*x`Qt&Di2jKM~J{skE3e#jSg0%^{wpLemdLvqvD!< G)c*ot6)%?n literal 9766 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 diff --git a/tests/integration/stax/snapshots/test_expert_mode_rejections/info.png b/tests/integration/stax/snapshots/test_expert_mode_rejections/info.png index b445357466e065cc36ecbbcb814292134d85a4e7..8b571da7e1d27d7ef4ac01871b389c44e2258784 100644 GIT binary patch literal 9890 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 G)c*ot6)%?n literal 9766 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 From 7bf40fd3cafa82cf13cbede52eb8da28e6595d63 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Thu, 18 Jan 2024 16:33:58 +0000 Subject: [PATCH 39/78] Use ledger-app-dev-tools docker image - Ocaml generated tests should not run on Ledger CI. --- .github/workflows/build.yml | 30 ++++++++++++----------------- .gitignore | 1 + Makefile | 21 ++++++++++++-------- README.md | 3 +-- docker/Dockerfile.integration-tests | 12 ------------ scripts/test_swap.sh | 2 +- tests/integration/nano/conftest.py | 1 - tests/integration/stax/utils.py | 2 +- tests/requirements.txt | 8 ++++++++ 9 files changed, 37 insertions(+), 43 deletions(-) delete mode 100644 docker/Dockerfile.integration-tests create mode 100644 tests/requirements.txt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2339c9430..ede040706 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: device: [nanos, nanosp, nanox, stax] runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:3.12.0 + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest steps: - name: Checkout uses: actions/checkout@v3 @@ -43,14 +43,9 @@ jobs: path: app_${{ matrix.device }}_dbg.tgz name: app_${{ matrix.device }}_dbg.tgz - build_docker_integration_tests: - uses: ./.github/workflows/docker.yml - secrets: inherit - with: - dockerfile: docker/Dockerfile.integration-tests - image_name: integration_tests build_docker_tezos_ocaml: + if: github.repository == 'trilitech/ledger-app-tezos-wallet' uses: ./.github/workflows/docker.yml secrets: inherit with: @@ -58,17 +53,15 @@ jobs: image_name: tezos_ocaml integration_tests_basic: - needs: [build_app, build_docker_integration_tests] + needs: [build_app] runs-on: ubuntu-latest strategy: fail-fast: false matrix: device: [nanos, nanosp, nanox, stax] container: - image: ${{ needs.build_docker_integration_tests.outputs.image }} - credentials: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest + steps: - name: Set Git Safe Directory run: | @@ -93,9 +86,13 @@ jobs: ./tests/integration/run_test_local.sh -F -m ${{ matrix.device }} \ ./tests/integration/${{ matrix.device }} else + apk add gmp-dev curl jq libsodium-dev git xxd + python3 -m venv tezos_test_env --system-site-package + source ./tezos_test_env/bin/activate + python3 -m pip install -r ./tests/requirements.txt TMP_DIR=$(mktemp -d /tmp/foo-XXXXXX) tar xfz app_${{ matrix.device }}_dbg.tgz -C $TMP_DIR - pytest -n 32 tests/integration/nano/ --tb=no \ + python3 -m pytest -n 32 tests/integration/nano/ --tb=no \ --device ${{ matrix.device }} --app $TMP_DIR/app.elf \ --log-dir integration_tests_log fi @@ -161,7 +158,7 @@ jobs: path: tests/samples/operations/nano integration_tests_samples: - needs: [build_app, generate_samples_unit_tests, build_docker_integration_tests] + needs: [build_app, generate_samples_unit_tests] runs-on: ubuntu-latest strategy: fail-fast: false @@ -169,10 +166,7 @@ jobs: device: [nanos, nanosp, nanox] type: [micheline, operations] container: - image: ${{ needs.build_docker_integration_tests.outputs.image }} - credentials: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.gitignore b/.gitignore index 5232e38e6..7739fdddd 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ /integration_tests_log /pattern_registry /tests/samples +/*env/ tags __pycache__ diff --git a/Makefile b/Makefile index f25bd9132..acd24478e 100644 --- a/Makefile +++ b/Makefile @@ -25,8 +25,8 @@ docker_speculos: $(DOCKER) image tag $(LEDGERHQ)/speculos speculos docker_ledger_app_builder: - $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-builder:3.12.0 - $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-builder:3.12.0 \ + $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:latest + $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:latest \ ledger-app-builder docker_ledger_app_ocaml: @@ -34,8 +34,9 @@ docker_ledger_app_ocaml: -f docker/Dockerfile.ocaml docker --platform linux/$(CPU) docker_ledger_app_integration_tests: - $(DOCKER) build -t ledger-app-tezos-integration-tests \ - -f docker/Dockerfile.integration-tests docker --platform linux/$(CPU) + $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:latest + $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:latest \ + ledger-app-tezos-integration-tests docker_images: docker_speculos \ docker_ledger_app_builder \ @@ -98,13 +99,17 @@ integration_tests_basic_%: app_%_dbg.tgz \ tests/integration/* \ tests/integration/nano/* \ tests/integration/nano/%/* - docker run --user "$$(id -u)":"$$(id -g)" --rm -i -v "$(realpath .):/app" \ + docker run --rm -i -v "$(realpath .):/app" \ --entrypoint=/bin/sh ledger-app-tezos-integration-tests -c " \ TMP_DIR=\$$(mktemp -d /tmp/foo-XXXXXX); \ cd /app; \ - tar xfz app_$*_dbg.tgz -C \$$TMP_DIR; \ - pytest -n 32 tests/integration/nano/ --tb=no \ - --device $* --app \$$TMP_DIR/app.elf \ + tar xfz app_$*_dbg.tgz -C \$$TMP_DIR; \ + apk add gmp-dev curl jq libsodium-dev git xxd; \ + python3 -m venv tezos_test_env --system-site-package; \ + source ./tezos_test_env/bin/activate; \ + python3 -m pip install -r tests/requirements.txt; \ + python3 -m pytest -n 32 tests/integration/nano/ --tb=no \ + --device $* --app \$$TMP_DIR/app.elf \ --log-dir integration_tests_log" integration_tests_basic: integration_tests_basic_nanos \ diff --git a/README.md b/README.md index 9cc082a32..20797de45 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,7 @@ The docker images can be built using the provided Makefile: :; make docker-images ``` -This pulls down two images, `ghcr.io/ledgerhq/speculos` and -`ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest`. It +This pulls down following image, `ghcr.io/ledgerhq/ledger-app-dev-tools`. It also builds an image via `docker/Dockerfile.ocaml`. We do not make the builds of the software conditional on these docker diff --git a/docker/Dockerfile.integration-tests b/docker/Dockerfile.integration-tests deleted file mode 100644 index eaf6ebc23..000000000 --- a/docker/Dockerfile.integration-tests +++ /dev/null @@ -1,12 +0,0 @@ -FROM ghcr.io/ledgerhq/speculos:sha-f9dfe87 - -RUN apt update && \ - apt install -y curl jq build-essential libsodium-dev git xxd && \ - pip install wheel setuptools pkginfo cryptography && \ - pip install jsonschema==4.3.2 base58 pytezos==3.10.2 GitPython pytest-xdist && \ - git clone --depth 1 --branch v1.11.4 https://github.com/ledgerHQ/ragger && \ - cd ragger && \ - pip install --extra-index-url https://test.pypi.org/simple/ '.[all_backends]' && \ - cd .. - -ENV SPECULOS=/speculos/speculos.py diff --git a/scripts/test_swap.sh b/scripts/test_swap.sh index 284f9094f..3af98d966 100755 --- a/scripts/test_swap.sh +++ b/scripts/test_swap.sh @@ -105,7 +105,7 @@ _build_app() { cd $repo docker run --rm -ti -v "$(realpath .):/app" --privileged \ - ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:3.12.0 \ + ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest \ bash -c "make clean && make -j $params BOLOS_SDK=\$$sdk" ) } diff --git a/tests/integration/nano/conftest.py b/tests/integration/nano/conftest.py index 349c4fc5a..a1f75dbbb 100644 --- a/tests/integration/nano/conftest.py +++ b/tests/integration/nano/conftest.py @@ -137,7 +137,6 @@ def backend(app_path: Path, backend = SpeculosTezosBackend(app_path, firmware, - port=port, args=speculos_args) with backend as b: diff --git a/tests/integration/stax/utils.py b/tests/integration/stax/utils.py index c5d9355d3..24ac182de 100644 --- a/tests/integration/stax/utils.py +++ b/tests/integration/stax/utils.py @@ -168,7 +168,7 @@ def stax_app(prefix) -> TezosAppScreen: commit = os.environ["COMMIT_BYTES"] version = os.environ["VERSION_BYTES"] golden = os.getenv("GOLDEN") != None - backend = SpeculosBackend("__unused__", Firmware.STAX, port = port) + backend = SpeculosBackend("__unused__", Firmware.STAX,args=["--api-port", port]) app = TezosAppScreen(backend, Firmware.STAX, commit, version, prefix) if golden: diff --git a/tests/requirements.txt b/tests/requirements.txt new file mode 100644 index 000000000..e67afc7e4 --- /dev/null +++ b/tests/requirements.txt @@ -0,0 +1,8 @@ +wheel +setuptools +pkginfo +cryptography +base58 +pytezos==3.10.3 +GitPython +pytest-xdist From f27609de5aa6a10b084075939d7d0599e2178c66 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Fri, 19 Jan 2024 10:00:31 +0000 Subject: [PATCH 40/78] Change env setup for test_docker based on updated docker image - update shell commands as ledger uses alpine linux. --- .github/workflows/build.yml | 11 ++++++++--- Makefile | 23 ++++++++++++----------- app/src/app_main.c | 1 + scripts/test_swap.sh | 10 +++++----- tests/integration/run_test_docker.sh | 10 +++++++--- tests/integration/run_test_local.sh | 5 ++++- tests/integration/test_runtime.sh | 5 ++++- 7 files changed, 41 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ede040706..2aa900c70 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -86,10 +86,10 @@ jobs: ./tests/integration/run_test_local.sh -F -m ${{ matrix.device }} \ ./tests/integration/${{ matrix.device }} else - apk add gmp-dev curl jq libsodium-dev git xxd + apk add gmp-dev curl jq libsodium-dev git xxd procps python3 -m venv tezos_test_env --system-site-package source ./tezos_test_env/bin/activate - python3 -m pip install -r ./tests/requirements.txt + python3 -m pip install -r ./tests/requirements.txt -q TMP_DIR=$(mktemp -d /tmp/foo-XXXXXX) tar xfz app_${{ matrix.device }}_dbg.tgz -C $TMP_DIR python3 -m pytest -n 32 tests/integration/nano/ --tb=no \ @@ -188,7 +188,12 @@ jobs: path: tests - name: Test - run: ./tests/integration/run_test_local.sh -T100 -F -m ${{ matrix.device }} tests + run: | + apk add gmp-dev curl jq libsodium-dev git xxd procps + python3 -m venv tezos_test_env --system-site-package + source ./tezos_test_env/bin/activate + python3 -m pip install -r ./tests/requirements.txt -q + ./tests/integration/run_test_local.sh -T100 -F -m ${{ matrix.device }} tests - name: Upload results uses: actions/upload-artifact@v3 diff --git a/Makefile b/Makefile index acd24478e..fc1ca058d 100644 --- a/Makefile +++ b/Makefile @@ -95,21 +95,22 @@ integration_tests_basic_stax: app_stax.tgz \ tests/integration/stax/* $(RUN_TEST_DOCKER) stax tests/integration/stax -integration_tests_basic_%: app_%_dbg.tgz \ +integration_tests_basic_%: app_%.tgz \ + app_%_dbg.tgz \ tests/integration/* \ tests/integration/nano/* \ tests/integration/nano/%/* docker run --rm -i -v "$(realpath .):/app" \ - --entrypoint=/bin/sh ledger-app-tezos-integration-tests -c " \ - TMP_DIR=\$$(mktemp -d /tmp/foo-XXXXXX); \ - cd /app; \ - tar xfz app_$*_dbg.tgz -C \$$TMP_DIR; \ - apk add gmp-dev curl jq libsodium-dev git xxd; \ - python3 -m venv tezos_test_env --system-site-package; \ - source ./tezos_test_env/bin/activate; \ - python3 -m pip install -r tests/requirements.txt; \ - python3 -m pytest -n 32 tests/integration/nano/ --tb=no \ - --device $* --app \$$TMP_DIR/app.elf \ + --entrypoint=/bin/sh ledger-app-tezos-integration-tests -c " \ + TMP_DIR=\$$(mktemp -d /tmp/foo-XXXXXX); \ + cd /app; \ + tar xfz app_$*_dbg.tgz -C \$$TMP_DIR; \ + apk add gmp-dev curl jq libsodium-dev git xxd procps; \ + python3 -m venv tezos_test_env --system-site-package; \ + source ./tezos_test_env/bin/activate; \ + python3 -m pip install -r tests/requirements.txt -q ; \ + python3 -m pytest -n 32 tests/integration/nano/ --tb=no \ + --device $* --app \$$TMP_DIR/app.elf \ --log-dir integration_tests_log" integration_tests_basic: integration_tests_basic_nanos \ diff --git a/app/src/app_main.c b/app/src/app_main.c index c1505899a..6e3b58a88 100644 --- a/app/src/app_main.c +++ b/app/src/app_main.c @@ -36,6 +36,7 @@ void app_exit(void) { + PRINTF("[DEBUG] Trying to exit the app. \n"); os_sched_exit(-1); } diff --git a/scripts/test_swap.sh b/scripts/test_swap.sh index 3af98d966..56a99d2ed 100755 --- a/scripts/test_swap.sh +++ b/scripts/test_swap.sh @@ -148,11 +148,11 @@ run_tests() { ( cd $APP_EXCHANGE_REPO - docker run --privileged --entrypoint /bin/bash \ - --rm -v "$(realpath .):/app" \ - ledger-app-tezos-integration-tests -c \ - "cd /app && \ - pip install -r test/python/requirements.txt && \ + docker run --privileged --entrypoint /bin/bash \ + --rm -v "$(realpath .):/app" \ + ledger-app-tezos-integration-tests -c \ + "cd /app && \ + pip install -r test/python/requirements.txt -q && \ pip install protobuf==3.20.3 && pytest test/python $*" ) } diff --git a/tests/integration/run_test_docker.sh b/tests/integration/run_test_docker.sh index 8bc30565a..cdb41f286 100755 --- a/tests/integration/run_test_docker.sh +++ b/tests/integration/run_test_docker.sh @@ -19,7 +19,7 @@ set -e . "`dirname $0`/app_vars.sh" -docker run --user "$(id -u)":"$(id -g)" --rm -i -v "$(realpath .):/app" \ +docker run --rm -it -v "$(realpath .):/app" \ --env-file "`dirname $0`/err_codes.sh" \ -e VERSION_BYTES=$VERSION_BYTES \ -e COMMIT_BYTES=$COMMIT_BYTES \ @@ -29,5 +29,9 @@ docker run --user "$(id -u)":"$(id -g)" --rm -i -v "$(realpath .):/app" -e APPVERSION_P=$APPVERSION_P \ -e APPVERSION=$APPVERSION \ -e VERSION_BYTES=$VERSION_BYTES \ - --entrypoint=/bin/sh ledger-app-tezos-integration-tests \ - -c "cd /app && ./tests/integration/run_test_local.sh -F -m $*" + --entrypoint=/bin/sh ledger-app-tezos-integration-tests \ + -c " apk add gmp-dev curl jq libsodium-dev git xxd procps; \ + python3 -m venv tezos_test_env --system-site-package; \ + source ./tezos_test_env/bin/activate; \ + python3 -m pip install -r tests/requirements.txt -q; \ + ./tests/integration/run_test_local.sh -F -m $*" diff --git a/tests/integration/run_test_local.sh b/tests/integration/run_test_local.sh index a753f7d2f..b1ecdc1af 100755 --- a/tests/integration/run_test_local.sh +++ b/tests/integration/run_test_local.sh @@ -37,7 +37,7 @@ start_speculos_runner() { app_dir="$(mktemp -d $DATA_DIR/appdir-XXXXXX)" tar xfz "$tgz" -C $app_dir - $SPECULOS --display headless --apdu-port 0 --api-port $PORT \ + python3 -m $SPECULOS --display headless --apdu-port 0 --api-port $PORT \ --seed "$seed" -m $TARGET $app_dir/app.elf \ > $SPECULOG 2>&1 < /dev/null & speculos_pid=$! @@ -54,9 +54,12 @@ kill_speculos_runner() { exited() { + echo "speculos_pid: $speculos_pid" if ps $speculos_pid > /dev/null 2>&1 ; then + echo "\n Speculos Still running \n" return 1 else + echo "\n Speculos Exited \n" return 0 fi } diff --git a/tests/integration/test_runtime.sh b/tests/integration/test_runtime.sh index 6df3dd53d..81d2da678 100644 --- a/tests/integration/test_runtime.sh +++ b/tests/integration/test_runtime.sh @@ -387,7 +387,7 @@ run_a_test() { fi app_dir="$(mktemp -d $DATA_DIR/appdir-XXXXXX)" tar xfz "$tgz" -C $app_dir - pytest $CMD -v \ + python3 -m pytest $CMD -v \ --device $TARGET \ --port $PORT \ --app $app_dir/app.elf @@ -396,6 +396,9 @@ run_a_test() { *.hex) # We skip these... ;; + *.txt) + # We skip these... + ;; *) if [ -f "$CMD" ]; then echo Command "$CMD" ends in neither .sh nor .py >&2 From f2e175de024146010c3f11039078ce29676364b6 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Wed, 24 Jan 2024 14:45:16 +0000 Subject: [PATCH 41/78] Change "Expert Mode Enabled" screen to match "TRANSACTION SIGNED" format --- README.md | 9 +++++++++ app/Makefile | 2 +- app/src/ui_stream_nbgl.c | 9 ++------- scripts/run_app.sh | 15 ++++++++++---- tests/integration/app_vars.sh | 2 +- .../nano/snapshots/nanos/version.png | Bin 330 -> 321 bytes .../nano/snapshots/nanosp/version.png | Bin 354 -> 342 bytes .../nano/snapshots/nanox/version.png | Bin 354 -> 342 bytes tests/integration/nano/utils/app.py | 2 +- .../stax/snapshots/test_basic/info.png | Bin 9890 -> 9777 bytes .../blindsign_enabled.png | Bin 8234 -> 5208 bytes .../test_blindsign_too_deep/info.png | Bin 9890 -> 9777 bytes .../blindsign_enabled.png | Bin 8234 -> 5208 bytes .../info.png | Bin 9890 -> 9777 bytes .../blindsign_enabled.png | Bin 8234 -> 5208 bytes .../test_blindsign_too_large/info.png | Bin 9890 -> 9777 bytes .../enabled_expert_mode.png | Bin 8077 -> 5065 bytes .../snapshots/test_blindsign_valid/info.png | Bin 9890 -> 9777 bytes .../enabled_expert_mode.png | Bin 8077 -> 5065 bytes .../test_expert_mode_rejections/info.png | Bin 9890 -> 0 bytes .../settings_expert_blindsiging_off.png | Bin 12528 -> 0 bytes .../settings_expert_on_blindsigning_off.png | Bin 12381 -> 0 bytes .../enabled_expert_mode.png | Bin 8077 -> 5065 bytes .../enabled_expert_mode.png | Bin 8077 -> 5065 bytes .../enabled_expert_mode.png | Bin 8077 -> 5065 bytes .../enabled_expert_mode.png | Bin 8077 -> 5065 bytes .../test_blindsign_too_deep_rejections.py | 12 ----------- .../stax/test_expert_mode_rejections.py | 19 +----------------- 28 files changed, 26 insertions(+), 44 deletions(-) delete mode 100644 tests/integration/stax/snapshots/test_expert_mode_rejections/info.png delete mode 100644 tests/integration/stax/snapshots/test_expert_mode_rejections/settings_expert_blindsiging_off.png delete mode 100644 tests/integration/stax/snapshots/test_expert_mode_rejections/settings_expert_on_blindsigning_off.png diff --git a/README.md b/README.md index 20797de45..1964b32aa 100644 --- a/README.md +++ b/README.md @@ -263,3 +263,12 @@ You can run : ./scripts/test_swap.sh update $DEVICE ``` to perform all snapshot update steps based on your current Tezos repository. + +## Contributing + +The version of the app must be updated after every change. Following files need to be updated +with a new version +1. app/Makefile +2. tests/integration/app_vars.sh +3. tests/integration/nano/utils/app.py +4. the snapshots (nano and stax) diff --git a/app/Makefile b/app/Makefile index 7171c30df..a842c50e0 100644 --- a/app/Makefile +++ b/app/Makefile @@ -43,7 +43,7 @@ APPNAME = "Tezos Wallet" # Application version APPVERSION_M=3 APPVERSION_N=0 -APPVERSION_P=2 +APPVERSION_P=3 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) # COMMIT diff --git a/app/src/ui_stream_nbgl.c b/app/src/ui_stream_nbgl.c index 57b49dd1f..fc3f65c9a 100644 --- a/app/src/ui_stream_nbgl.c +++ b/app/src/ui_stream_nbgl.c @@ -109,10 +109,7 @@ handle_blindsigning(bool confirm) if (confirm) { if (!N_settings.blindsigning) toggle_blindsigning(); - nbgl_useCaseReviewStart(&C_round_check_64px, "Blind signing enabled", - NULL, "Reject transaction", blindsign_splash, - tz_reject_ui); - + nbgl_useCaseStatus("BLIND SIGNING\nENABLED", true, blindsign_splash); } else { tz_reject_ui(); } @@ -163,9 +160,7 @@ handle_expert_mode(bool confirm) if (!N_settings.expert_mode) toggle_expert_mode(); - nbgl_useCaseReviewStart(&C_round_check_64px, "Expert mode enabled", - NULL, "Reject transaction", - tz_ui_stream_start, tz_reject_ui); + nbgl_useCaseStatus("EXPERT MODE\nENABLED", true, tz_ui_stream_start); } else { tz_reject_ui(); diff --git a/scripts/run_app.sh b/scripts/run_app.sh index eeee3708c..7f0c67521 100755 --- a/scripts/run_app.sh +++ b/scripts/run_app.sh @@ -17,7 +17,14 @@ seed="zebra`for i in $(seq 1 23) ; do echo -n ' zebra' ; done`" -docker run --rm -it -v $(pwd)/app/bin:/speculos/apps \ - -v $(pwd)/tests/integration:/tests --network host \ - ledger-app-tezos-integration-tests --display=headless --vnc-port 41000 \ - --seed "$seed" -m $TARGET apps/app.elf + +set -e + + +docker run --rm -it -v "$(realpath .):/app" \ + --entrypoint=/bin/sh ledger-app-tezos-integration-tests \ + -c " apk add gmp-dev curl jq libsodium-dev git xxd procps libvncserver; \ + python3 -m venv tezos_test_env --system-site-package; \ + source ./tezos_test_env/bin/activate; \ + python3 -m pip install -r tests/requirements.txt -q; + python3 -m speculos --display=headless --seed \"$seed\" -m $TARGET app/bin/app.elf" diff --git a/tests/integration/app_vars.sh b/tests/integration/app_vars.sh index f67aa334b..f79bd1c84 100644 --- a/tests/integration/app_vars.sh +++ b/tests/integration/app_vars.sh @@ -19,6 +19,6 @@ export COMMIT_BYTES=$(printf '%s' "$COMMIT" | xxd -p -c 256) export VERSION_WALLET_TAG="00" export APPVERSION_M=3 export APPVERSION_N=0 -export APPVERSION_P=2 +export APPVERSION_P=3 export APPVERSION=$APPVERSION_M.$APPVERSION_N.$APPVERSION_P export VERSION_BYTES=$(printf "%02x%02x%02x%02x" "$VERSION_WALLET_TAG" "$APPVERSION_M" "$APPVERSION_N" "$APPVERSION_P") diff --git a/tests/integration/nano/snapshots/nanos/version.png b/tests/integration/nano/snapshots/nanos/version.png index 42b4538d79d4327e6c8c1b43e74768a110774f99..88f5d44943711d7a568bcf9c1b968e2c73c99d27 100644 GIT binary patch delta 294 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 G)c*ot6)%?n diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep/blindsign_enabled.png b/tests/integration/stax/snapshots/test_blindsign_too_deep/blindsign_enabled.png index ab97a1942d319e7b5725da1d0e33e0a3dcd46f16..279acd54db7568993145eaa08b3ba55c1c567e5f 100644 GIT binary patch literal 5208 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 literal 8234 zcmeHNd03KpyDnR-Y0{=KY%I0K7LBwTSKOv4bSKKrAEq4Kt%*rNHD-&zn8rKAO zRC2|M+@fSq0TuUU5D-WaQ4~3^^PThm`R6;=cU@=r3*PtlKELI8p8L6<`{mbLHWmlJ zQTk@bjvWUrf4OeIW5>?tJ9fyt-6sQFf!MZTckEDIvb=uPAt8@D&V?0ymg;$nOse;` z-SD;)K99PM87@r@o>q*TMy8+qBH}|t<779ezl!kgmrwSG^o zRFxB!6$6n;NRaX;_Uu@&^4{sQ4}9X=@33+wKZ0$w&^XCHr;X!6Lw>|3;23cY~jdgyOXwaH;B1z zQQcrsaDWTO{4Y}rFYIe$t`tceDDKV?BC9Pv%&OS=P>M_y)(}{XCCGX(>V8; zYRO&F_g7o}hpmFV)oK^wmYi%qy}gibG2ipO%b1OEc|*a`pS&Yar|v(4)6eOgk-BSL z9W7Y?LH9K3VzL?5N_aj$+o`2);Y97xYFk0TJ;pb3`@wtJ9h1(5Wmln>Uw7VlVj|io zIih&3R^P2~13Bp-a>V&m?a`vsxRN9E)3rz6Ne^U{9?3aX8yFik^r2bW zLpO8!G>>dNV~JypA==}T+=A-QYMasRA_8KvDI53%Sx_50v^P*!IV z!&IcXBXgcyXqs}HD24Vm2KhvO_yRTl%{fo4Hn4?+@{Z1tVp8w@jeavvj_K8F*DP3i zM~;2DVg;oXZl5C=tjx_b^QK_9OMj)6++;)nBTm#V41iQ8KZB(&G>H4aHVeI#JL{;I za~fvUPLCT@`K}=(0={-n$r0o}Fx)cv%9OO1)qHn>c;;ll*M<|K(nnn|v38?aOST`_ z@Qh*I8O+g}-k05t;Vnd~Un0MgNh2My9J_B5|DTD@OM@~Ygh{?=1CcYctb*~BcRaeK zAstJ~-jH;FNlg(wvyo^&Wn7Nmn+!Bj-OI~sa&pq5m~y8s0fA_}1+zW>^pxa<-$;T{ zN4EygzUI)QU#pYAbFd^@o3iW&$8qmeem%5mYmC;@)6-{fT|UT-L&U7IVxZQyrHOb3 zHK&%r4Y$uVrADl-uEwR$PhveYyX$(`wwRe;T{sn)>eVvNT@ESxq%v-eTA3mfiZGuSHWD`4C5Vl z!BW{@i9)z!dHLm50huY;6>{ZGD4vmagy-`=qg0k&-h<@RYPeV%lPRruCderlFjq(( zob+>DZA-2n2^}!b0h7*VSxN-2;IM*n^58jY>L6=n4vGHafBT{-Suhg1DpAP;R^uVV zgaNCW)`_xcR~oFObLzo3uoazBk-#ES0=3`VWambH)ooriH^G9Ci=qwS5rwWKf@)?@ zg<2S4yfoNO!A!F1)uSYD)#|Q^r8;&UU94p51xGF^Z^`fwIkmp^O^4&gjt6aE#C?Ov z^kT$MJyq!K6IQjhIu=GSVlh0%?wql)F_nLDDBEv+L&VRB43?ycmX`-`3C!@U zG_9|v8Uu&6sg7nIb_&2R zX56!HtG9IG)~w*2AX+#c`!fdhBW4!MHhR;4%oW|<-i}P#{^&v>sa3h+3V%pG@GBh8 z2<{f+jcxUXxgmqB2Iy>XBL*XjahA6u!N7Uy@~=(*-w4S%4WlmhpWLlpo=Csr8~h_Fe^ z#AOr`>4*rBBm`oeE&8OJ{F5>Ie@ul%Ev0YfLmMjizJ-N_=@FcG15*BJr1mx4v5D{s}S#FQWkm|=T1{JoV6CZt2F<=rOG{NYUABh(iD0*1+_ z8zaBr6$mj;;}ZhU2nT~Kyz?8atMM;nhl;F^s9GR0*rd?S`jn6*Cb@7t91pF^SUu?2 zoaN^#5s2&lq#bdjmQs4z`iJ&9OO*^a{fq-uo$M6&e14eoR7xqrHnq^%^qyqEc-+Mj zg+KVRvhamC=cFXE;TX2+VJf>TgyY8j@gcV|Y@laqdt*af(FUf6IVVr2>1li8p7qRT z=}kd&{oQo18bcha&plyH1JR3?pQ>}5MgWsy)D+Dw7m@+LQ2r<-HuzmFV5TnF@n42= z)>Q9Z^VZEReKBKZx4FS5WcA&JzI9&Y&_T7{WiU1*nP1cIz6* zEHVba^;fGN4vd8_eX37{!7L4tu4o_<#+CDg$avhyaqiBFiKW%rYP+=Vch!7_nsRn> z0VQx{byc@A0AdV@UV}+)RFUm2y%*~ZPZRi8wf0-IBlN1vw^AB~IM1&p{%Ai2w+X}Q z+qf!3)>S1C;a?(HN{xX=R}3n>11j)U8D)-zDQ#81F-?S*0V5OBsW4!Lgm%8B=J&pzHtliMi3sh9-(6o~5ztU^GS)N0$@j6!?^z2#9-VY_rhd>#Y zsJD@Bq?BMHeWY6(5%AVuT+tP|i9oILQj4;OC*OolaX1`!do{>K!Hg;wfgpdL9sn?| z(E@;f-Trqh?%Vjuz7~&S5G(e4g+Z-n4N4-`$^Bw4IGJwruB@#WahqdG8yp-A)wTN4 zT@N0#CYq#Joz3clx7%D3EF0DE<%5o-%T;9T0@8Ck;wF4ee#-(X{aV8HS?SfIRF&`a z*N1*#49bVu+Ngyombe0ysC8$A39I9SaU$`i$hSHSmj5YwS$G8~1sB5Rd>R+xqShv+ zqvKLSD3PX`XQG5;u{*Wyl1gTLs|VxABt_N_BKPnQs;%aBd=otmXKW#+UEz17_s-eK z@73c4x;GlJUMzO^zuNLD^oid!pkG<+h(I6!+=gKPcXax;M8kTa7!Mj*cBYlhKhSo=XPeQ*m-yYrz@$ z#9u!w{y|L%d>9iTVp<9{GgrDPd@bDX@K)LsgPS>(+xUy|9TuJ=ZTRaF%dVp#K<>at zwofNqYpu@}64wia(VCnTS+^@K3*-6WPtz6hyFHVlCpiyS9MJQLCQ{KPieYX?kGMV| zsiW$e7K6rmxrXD-uf!J%`tI8EF_YXlp$Wao+1mI)q1}OS;u)XNbWsLfb~n{D@gZ+O zZu^P*Rv(5jiiPLqQ5f5SajdLqKg#^#`<)jn3r|P_;)L`|ey-@fvb)(U>pwJ3VYV5v z)zAN#g!CW%;{S<=^9;rFxUcHh?g=y>Sy@19u#}LPvb@>&w8%v>r@qNX9_DEp zwYq_{Q*cG=$d&iqjS>{4KP^f?p~&@%TrPJtgz&QI#utCw(1({!rq4QCO3Yh>+C2e| zp_J~A8_B=1lB1N_lh!peQ91?Ky9N+eKi4?-nr+g;xL|Dr!L9$vgz8u~P4aQzV>A+4 zMm)DT9%AVn&B98O3b$Y}q!4R;M|df)8+p!!#6ypD z#s-0!#8&CA2a^RxWT2WryhqDy^X~-BPy!tk%orcDmlE9h?p6X_@u;Vl*X{3X#7$t5 zNF)-%k@X^i9m4 zA6jzj!B~}QxZY->iS0SAIoUZ_0U#n6!W*%rt6hqDK}exctGlCc*WV_K_xS6|7bk0_>@ z1@lYtlxxxEdrMJHNZS;Tdvz7|sgZB0Wknkjf84r_oq<{{Pu;`fxP-m16g~V5Q%!)c zR;b>PrBc!=h87k)qk0x2A|ilt!oo(=qgJ-AQN1SY3c_OV6rIb!x= zR6V;mtI-2snrO}7#|H}*-n*hr7EN9b;?G&2k!_UKu?p|por8uF^CCBQiS1G03hcq-^9rz*X>#RvovPJHG7Lj+n;^!vBN17ge z`GgY1J=@^=G-_`?FFr0IFMef6MNSbDK5$T_?Db1t;Hwg9tX8w{DxFSWPxK@Y{t?n# zim|Qw&Ndal3DI!WDQpG<(>O9pwx<1YtbLW;_@LdicauLt!ou>jX_pV)uS876wsm4+LJ3!H zvByGs?AoL|sX1Gm!HQ{d*93eD*xGA+^K4eP@=J_;s_9Ii_9wxnX3hNCNJA~}Y`fhF z<%poW*IdzAeI>qHw#2c)L+h`cU#S{JJGK`ITOEdQ@B!+3Ad20T1iQu|mMn zMk=CA2ZPvMn){RgCG9_*t_=BptzyMz&vVb~(R}+(Ns!OK^98^&lzA})-rf;^d56tL zfVL6<)(FL2Q`$KX|F31`mdtu^TG9J>b$vz>K|~y<0GeRu>?mIZNC{sBO9^>Q7}_r- zr_EgxkP`y6f3qpaQiBt|Yp(j@FWB5P`WxT@DXKk9pm*4%>QnvAx+sSNCNRb&G)y;l zrKgch{ag5=1it!P)SCKe>c%L0XX8!P>a7A^x|klvjfdNYw{znRL;KWO0P<*hF1B>t zdGV>)1*~bfM5Z;V1AIGNK%|%-;4}c(WNJD%S#e-iA~DWS_VV-uZuWb47ch7IHN&e1 z3y9-6o$S&iRt|Ih?v-`PhA2>5gH#VD6)QgWbLELPd~%#6Ol!q#i}EqPC{-Hj<}Lb| zjw;Lk3zqc$IZjjKwhn;hqU>05Uq5tXic4$%!4QOSAY+zL?uVNyH234chMP^JM5SZ* z@C?9fVvtR{hcF1UH3|qnytc60{;p00n;_2N32t1f6{q06IIhkmF)7I@^^WiU^i3d1 zfNo|13N(>)x^wYn`mb5+fyyiSHuBg%1GtJK;mW3C0C2l3PF?&dr8AhS>_Yv{e)7ID z{eW=ddGQ9443iGEbjmp%XfyW)W``4h{|%{|+nBu>2s++o{-0#;J5T1_Edjfc7Zd^%n9-Wt@-b-zbk$3vg|MRsl2~ z$WR?W@zwa&aV9e$R<6*d9N_q2%&)v(kM(?wfp~yHj*n>()`^LUi*c#ZEgJtfSku zwxi+B_GKjn8SohQ}f@pw2PsF4qd3)*L^XUe$fJ5t!--EJm9JFLCiNP zIkqW4_>PwA7 z@?2t~!@;705W+wl2j`L;dsT+h5R(Rxco^^1FC-s}|Du7VVz}a&IZ9O21m=Y!dcK){ zhkmJ$eA^Qci&!zgNtrAbE00Fmp$ad zw9L^6Qbi(>Rq;7x{bfK}S9|qCL!~h6>5}tLyI%ofipHF4h%`gP0>a~=EZTE|+da#z z{t9mMlQwzwQ=9({d9 zM}h(Md~ullz)77KP5uF}G4b;9G9ZJB-wVV#3F0>CXidZTD99~V`I&h!(eTK(0WQ~a zGa_B6%?(On&mG(vm8^v8>#nNa*=G$QPkv{%p~UIuf-3{Hl`ewPcouPtv*E|0D8mZE z7p}sl?&;14#CeDBoeLeV-byE8mwbYe1{D^(9GYbEpw z+LQ{%b-i22+h&Jt*t^`bicgQXp5w_?7GEO{ULYzln3cp>JR{cKQdyZnZC_0b#apGv zD7vIHs~sjY0kqU_V6^T158TN#v2sy0`DC^Ut#S&(GuJaRWS49^A{(UF zHjTaHZwZAfKd8WHAJbpD&vxxXHgz|L5W3?y1ed+hIbWfWjJzy9b`kYi)TRuhE&aIY z-8ykJ&BV>OGi<~pE5B7;#pi7w`LCB>Y3yCfCI-LT t9;(=1D$k+KDSTV@=->Lze9QE>G} diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep/info.png b/tests/integration/stax/snapshots/test_blindsign_too_deep/info.png index 8b571da7e1d27d7ef4ac01871b389c44e2258784..9be5755ffb991fa29c3112414c984433657b0959 100644 GIT binary patch literal 9777 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 G)c*ot6)%?n diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/blindsign_enabled.png b/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/blindsign_enabled.png index ab97a1942d319e7b5725da1d0e33e0a3dcd46f16..279acd54db7568993145eaa08b3ba55c1c567e5f 100644 GIT binary patch literal 5208 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 literal 8234 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 t9;(=1D$k+KDSTV@=->Lze9QE>G} diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/info.png b/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/info.png index 8b571da7e1d27d7ef4ac01871b389c44e2258784..9be5755ffb991fa29c3112414c984433657b0959 100644 GIT binary patch literal 9777 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 G)c*ot6)%?n diff --git a/tests/integration/stax/snapshots/test_blindsign_too_large/blindsign_enabled.png b/tests/integration/stax/snapshots/test_blindsign_too_large/blindsign_enabled.png index ab97a1942d319e7b5725da1d0e33e0a3dcd46f16..279acd54db7568993145eaa08b3ba55c1c567e5f 100644 GIT binary patch literal 5208 zcmeHLYgm%m8nvr6r8Q+)UZ)y$N=t2&(m`l4yNjA>YD!*4Em5%&QBi2r^rYihV?pJG zE>kE7;ypzqwX!0^GE_7qHDv@9kpKaK^EE%_oFC^r&pH3jd7l1$``ho{d+qhEckTCz zFYJ)fS7u)s7#J8GIeg%Rfx)7y1_q1otXK?uarbGZ7#NsXA35;j$<)$mzBqVPv^Y27 zeShLN_)9k7D}xsMFUH@o*|*Yn@pS{6!z)i@ZEx3Z!;D9s|J#Vu%L1hqvD5H*`^YWH zs+G+p-7(qica|i{b+TT2gC2bNBIl*6{1T8D3PzYKjr z;|n+bXVO8htz0JH^TR%(AW*2|ocpZ#?<~nLf2HfQBFoOfk9$oriY^W#2<|$R@wWdY zhow>d>sqjDYePFReJlR85IhUWAZdz%b`iw#bfu7wa{;3v#8dh=5@o@?v&~PqaSb8V zL2zw9FwEpX4OpK2W9NqTBh7Lt<`2qST_8`rnDvt#^=DOIgoD0 z!yLoHt}%^9!`ybA=voE?Fl3Ltt1=)J2m_Ypa*ccEUqe(lH4X@r~ zRtUnK=!)EHk*K>r=wvQR1{SMzU{eEjpBcH_<27E zo&Y_DZQv>W4d3k&s}C~LBbWLZu?KJx!edDiVMWqrk(}WyG6A;Psgfi z1}7X5lE%=C{>;e%n{rkm>*uJTGmPIZ1RV0n?Tm0W3)w~JKIAi4k=+2VMz3kGcsrd! z!Hul3bhXdFr!%NgExm>pDPucrIWcu{)D*(}o|Le<_4w2YkZ$9z5z`)Rb*fADZn@ma zWZ<|^2!yO3cArh|aIT`7B3V1-Yd^3(Po9aZGZcBxB)dx_5)xAm3`5LNy*^2?XkJomqxnI<}JuueSP$+AkIgg#f1k&N3Jb z(GwcmDx&$r781qdlg=ZLn|LWI$S@#^Vh;}T?TUmDo1j}X#|~xAx|DQ3?46X!WPKb0 zJKA;kbPD7Cn?I_{cP0N}@-nygy6!CvkuLMkbjv1fVP*Hqs28I623~xir5zTBBX-A>NL~O3LX=E}PFGz8{X$pR z=SS|o^-3tKb)cMk{h)35!`5^r9F=w`^XNO(YvMwn;DYm})qxZ)0Fb;>nhGxIex1f+ zTFXqmYUH&tRcm)m9jiwC`pjr_lQeg8glnbVENn#ZTX*(0)3kPcJDG;YWM(F8a{QFe zY>^0y=*HB64}w8r2ud1;)~$1FD{MMS4{7eO-_mGnMk*`O z0zQ?O&>E1%{m3quXyf%wUY4_l?0gbLekU|O)gWu0lYJGM?*+L+ftnzKB4w~g^EA!d znqy#`Ic`b&Ad(61w>D0MZ$<}*l#f%v5QSh^^sQXoQLnJGj>i@~1uk}mfwUC3OC9|>}14t{FOy=~jW`I)4Uz!R~{6r-n z`pR!5fVg#3!Ued?`$_<{F-LOveU&egveb8uHw|ga5l<<|rxa)=;|MFlyvPP{z5e_E zYopt?Rb>XGCSGYnYx|*IC!jLOQ`(1hYG)%sc4G(?guLF9RFLnfq`H5K{)p-ST_9=F z53-8Uuud|Zo4`Cbhd}N>-@UQGi+x5g;k^s8XXaARESsuNR!*2TP?6=+8LzWWufgLbC(=0-`a%#7owVO_B8RV!rB=D4S;7{qWHNEwv8T*46@nz)^>i zkfuwi0n`Z=7qYpiiyt-f_Br}{o7Vj$b>;WVgFGI5m#^O0gjvF9G0S_HBd?)$TUdld zdT{sG z_5S20dx>-c>c>7p^ts5?hNWT+L2sC86*!6cKmf{yWjSmz9Hy>-`Jnl+gzyql0Xv_Qj z0=!}Nj~@2mWUt|~E`w!GfkGE=Qm?3kpdc)2OrCgsZkCXnQ+foLeM?d*N+#Dju)xiC zvHSc?@?dkN9O0pE;G{Q?+X9jr@^kKR*@Pt8i%u&J=eMgp zhc!1v_a8^CAu7|Eg8zy<8imSZn0P4s%ul-#a_$A?wcd{ zZKB;}B86;4sJH(T*%sNuzCI=Lo&!jWU@pylzF*(&Du3aS^4)WCT^6$ zVj)BcWJ;w<6Q2%l#5V*v7+X^HG9hP}h@^3c{kOt~+yF+%$%)jT{7g)t%B)rEsu1YP zYNHBZCk<}a@u`;qth{d~PU~B-=sMo3EeF5J%AWbR4|8c$Yzy!n z;Oez1mCB#8s6N?968s-|{_`8q-MrR=lR-4k9L4Lj>aZpMm?n+tqFZ3HBm`aC_Z?q4 l0$-XSUs^){9}O}obOe#1xVi+A4Rj0*j(EWi(DsLC{T%~74j}*l literal 8234 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 t9;(=1D$k+KDSTV@=->Lze9QE>G} diff --git a/tests/integration/stax/snapshots/test_blindsign_too_large/info.png b/tests/integration/stax/snapshots/test_blindsign_too_large/info.png index 8b571da7e1d27d7ef4ac01871b389c44e2258784..9be5755ffb991fa29c3112414c984433657b0959 100644 GIT binary patch literal 9777 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 G)c*ot6)%?n diff --git a/tests/integration/stax/snapshots/test_blindsign_valid/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_blindsign_valid/enabled_expert_mode.png index 9bb9098130f449907246ec5afd48ec1f3915403f..c9ef229fa7be8fd071a271ce31ba27c48213c36b 100644 GIT binary patch literal 5065 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 Zc|82`(!0{lz=+P|%;}I*jVEFY{tAkTu;%~( literal 8077 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 HP}e0w?SMoJDQ&gBU`u& zNLvGfEt%BZDc19+jn0N+_H;@1#v4;q8{Ddfbb2CNwELINle+==O23o+wYX0Q6qAIJ z&U?(J!}A8bqud+%B3t5PV^1Ydfl5GXMSn<51v~7DyT>Wg({h4572#6`gCUGG&b9s| zTD#5ujJWaraJQ)1%F(FC-TAIHVyPU(B-8n?7k4Ay_``o}a;) z$}TZkE@FPLVF~^j+nQm{+GRw0HyyK%KyC{(&iM(g^mTEuW;{^f3YghxDW{0f)42=o zZf?xGjL}hN=$VXKEu_J5W`sS2KRY`c-Q79)1tckiETyQNbi?C>8Us$S<%wdhem!hu zscKBH9qMLl5C^=QDDUZZO%KLq;nnZhF?C=&0zN2}PV_#n-z`wpFJ#E7+h3@^s7|!N z#>QHWcbeHf@^Z?a35VKfSaX&u?6qu6a;=|@25?@EghMG&)Y2H$_y8Rpor?Q8bWnc< z1qFdhMT1rZkHyet!}Dq@a4Ll@kMu$y!MeGX9D&J9Un-yJKG(!FFHMt)%}bSfvMiOf zE0e%uwJC`_p&$cWBV4^I%)P>{8m$!?dyF7lmq??hnuo9TONM&1YiTsvo;-jmVBkUi zl=>A6&tHE{Wb&t{kJ9YlU@kUqaf9Tf%7IdfuW8a`N3m6orPkY}e&YA^^kCblLB^b- zyTEBPJ5Yq^D5rGWbUw16OgDMgIZ61xx?-)Rv#|Xd3SED2E&>cu7N&WeeKz)DLib!s z*O7*(OK;N97mwa%BEq;s*B!MC0)|6eo(i6WyX{t`+>80Xg`bXl3ySw|hcHfZ)DFvja^EwMog*cA(GoNB+5_M@mFXD-&YW%T)2?7WUDD+#}XD zHwOnw2b-J8_96^Xz;Ju0e~JI{i%FeAVMj21jGDAZ-A|oG#CY-S~6tYr1nR*Q%Dqna5xz2wi<|xX+_J4@@ax$uJxp}$S zE7KB%>YoYSI2q~=dOdhh$6V9RW$-|AA>EB2JCeZirE|;BzNqY((53@>ox$>wgb29& z@3ap-Y`14BVO6r_k1$Dz$oZn|&9toX*j$E=d`gj_)Ij}8>dpGaGUum3W+}!)ACd+xd=yKvW{;6K!giM_Hu2s%d-YUS*m!a`PV~tFDI%4nOzE= zTA&GnmUX|hY}e~2k)RWI4qMSLwgGdXt-!XQ`>gWhyhj9IsWL8c_*69y``3gj6Fa6< zu+qZb8mYB6I;8`gc_O&Cj=>XA^@9d(P4By?a_|-`HBIdBql*~Dr$qDsdyMl3FoGBl zgor7OJRe!!nrEd?{?w6Quj+iFk`Bn zf4h}Ex4aIF3>`;~F09aTk{c3|bT^^r(=ejI`UH4Ndo_&*#+th-6rNMsdc(zGIRBS2 zgX<;Xw8_=Z>4_B_3dO4W3zX7~Xc{P_#mf}n?6tqnk!Vy;pE@VIJ+mh|ux)|EqfYw2 z5js>rV-7T|uykK|BnUp0-Mq%x=2FABiEu^h_km1c`ICzovg{J}q({s6Q|E{rrF#Sh z4?O%c`>xTsGRX?p%&x@$MghMw2Um<0{Q8VUYLzeUFFWs{kdZzMU&(0~RuWf9^#l%#Q_!0^1+`VlOi8)|Uf=-AqlM~d3 zr$8kH_04fOT;P~~e|EnY2k7dnoB7z<^ss@uz-Uu$xeGc4kM<7D){{s}>Y&%rUQNhK z1Rc0h0NXYm7`*L#yG;S75z~L@wL18xHW(O46eA%++GpO*|TJ$0eK*|c2ggVr8 z@&(Ph#W z_L8w~VAr@xzLmABUr9@c%E0l-eLz~4ct_qaGA?cKyqAZyrv6`+p8K}L+Hj~X+qWZ-gua4q6JYuJ0%F?s*=TCbzDue{1N#+o=f+5@@|$g>{t)>E3jFP$9?Qr65-E@huPw&9oxTOX-z4!WT`;SH|-TZVlG|N54aN%eLRBNg+V}Gzs8m_Dz;% Lwil?sd))djhTkWo diff --git a/tests/integration/stax/snapshots/test_blindsign_valid/info.png b/tests/integration/stax/snapshots/test_blindsign_valid/info.png index 8b571da7e1d27d7ef4ac01871b389c44e2258784..9be5755ffb991fa29c3112414c984433657b0959 100644 GIT binary patch literal 9777 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 G)c*ot6)%?n diff --git a/tests/integration/stax/snapshots/test_expert_mode_rejections/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_expert_mode_rejections/enabled_expert_mode.png index 9bb9098130f449907246ec5afd48ec1f3915403f..c9ef229fa7be8fd071a271ce31ba27c48213c36b 100644 GIT binary patch literal 5065 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 Zc|82`(!0{lz=+P|%;}I*jVEFY{tAkTu;%~( literal 8077 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 HP}e0w?SMoJDQ&gBU`u& zNLvGfEt%BZDc19+jn0N+_H;@1#v4;q8{Ddfbb2CNwELINle+==O23o+wYX0Q6qAIJ z&U?(J!}A8bqud+%B3t5PV^1Ydfl5GXMSn<51v~7DyT>Wg({h4572#6`gCUGG&b9s| zTD#5ujJWaraJQ)1%F(FC-TAIHVyPU(B-8n?7k4Ay_``o}a;) z$}TZkE@FPLVF~^j+nQm{+GRw0HyyK%KyC{(&iM(g^mTEuW;{^f3YghxDW{0f)42=o zZf?xGjL}hN=$VXKEu_J5W`sS2KRY`c-Q79)1tckiETyQNbi?C>8Us$S<%wdhem!hu zscKBH9qMLl5C^=QDDUZZO%KLq;nnZhF?C=&0zN2}PV_#n-z`wpFJ#E7+h3@^s7|!N z#>QHWcbeHf@^Z?a35VKfSaX&u?6qu6a;=|@25?@EghMG&)Y2H$_y8Rpor?Q8bWnc< z1qFdhMT1rZkHyet!}Dq@a4Ll@kMu$y!MeGX9D&J9Un-yJKG(!FFHMt)%}bSfvMiOf zE0e%uwJC`_p&$cWBV4^I%)P>{8m$!?dyF7lmq??hnuo9TONM&1YiTsvo;-jmVBkUi zl=>A6&tHE{Wb&t{kJ9YlU@kUqaf9Tf%7IdfuW8a`N3m6orPkY}e&YA^^kCblLB^b- zyTEBPJ5Yq^D5rGWbUw16OgDMgIZ61xx?-)Rv#|Xd3SED2E&>cu7N&WeeKz)DLib!s z*O7*(OK;N97mwa%BEq;s*B!MC0)|6eo(i6WyX{t`+>80Xg`bXl3ySw|hcHfZ)DFvja^EwMog*cA(GoNB+5_M@mFXD-&YW%T)2?7WUDD+#}XD zHwOnw2b-J8_96^Xz;Ju0e~JI{i%FeAVMj21jGDAZ-A|oG#CY-S~6tYr1nR*Q%Dqna5xz2wi<|xX+_J4@@ax$uJxp}$S zE7KB%>YoYSI2q~=dOdhh$6V9RW$-|AA>EB2JCeZirE|;BzNqY((53@>ox$>wgb29& z@3ap-Y`14BVO6r_k1$Dz$oZn|&9toX*j$E=d`gj_)Ij}8>dpGaGUum3W+}!)ACd+xd=yKvW{;6K!giM_Hu2s%d-YUS*m!a`PV~tFDI%4nOzE= zTA&GnmUX|hY}e~2k)RWI4qMSLwgGdXt-!XQ`>gWhyhj9IsWL8c_*69y``3gj6Fa6< zu+qZb8mYB6I;8`gc_O&Cj=>XA^@9d(P4By?a_|-`HBIdBql*~Dr$qDsdyMl3FoGBl zgor7OJRe!!nrEd?{?w6Quj+iFk`Bn zf4h}Ex4aIF3>`;~F09aTk{c3|bT^^r(=ejI`UH4Ndo_&*#+th-6rNMsdc(zGIRBS2 zgX<;Xw8_=Z>4_B_3dO4W3zX7~Xc{P_#mf}n?6tqnk!Vy;pE@VIJ+mh|ux)|EqfYw2 z5js>rV-7T|uykK|BnUp0-Mq%x=2FABiEu^h_km1c`ICzovg{J}q({s6Q|E{rrF#Sh z4?O%c`>xTsGRX?p%&x@$MghMw2Um<0{Q8VUYLzeUFFWs{kdZzMU&(0~RuWf9^#l%#Q_!0^1+`VlOi8)|Uf=-AqlM~d3 zr$8kH_04fOT;P~~e|EnY2k7dnoB7z<^ss@uz-Uu$xeGc4kM<7D){{s}>Y&%rUQNhK z1Rc0h0NXYm7`*L#yG;S75z~L@wL18xHW(O46eA%++GpO*|TJ$0eK*|c2ggVr8 z@&(Ph#W z_L8w~VAr@xzLmABUr9@c%E0l-eLz~4ct_qaGA?cKyqAZyrv6`+p8K}L+Hj~X+qWZ-gua4q6JYuJ0%F?s*=TCbzDue{1N#+o=f+5@@|$g>{t)>E3jFP$9?Qr65-E@huPw&9oxTOX-z4!WT`;SH|-TZVlG|N54aN%eLRBNg+V}Gzs8m_Dz;% Lwil?sd))djhTkWo diff --git a/tests/integration/stax/snapshots/test_expert_mode_rejections/info.png b/tests/integration/stax/snapshots/test_expert_mode_rejections/info.png deleted file mode 100644 index 8b571da7e1d27d7ef4ac01871b389c44e2258784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9890 zcmeHtS5#AN*KI&VQ4mx_6a))ZL$6X_RKyrT5UCQ1kRT=WUKJExk@68C2nZ~5`6!|T{0#N~hg z?76Jj(Qm{baovkb0g3;`W!$kRYO|##dGzn1zZ=$>AsA4@FclqpC*>6|O%obUJ*vVV_;)eK*5N7T*Hr7Rqtu*)b ztyVq030)0do)StUk|57bI|)M)614(Xq~TV#i#bJU^pJ;FNyBwW*f_$Pt5B%8%jjHh zr1O-DN0%U47bTV)T}`0fGI+uFl31RDShwaRQ_&nXZj^tadLeX67`<)p2i=z$m&R*uF5P?J2;l&Du&Ve@CK(? zI(nOR3za7oS5iXVb#0yL<9nqb5tj=~BK}RNwk$Uv9zv-?P51+%gR?#BAK(yZc%6Yc z|3`XjLdpQbx46G<8}UN2SsoV!TSnWlr25u^w0dV^JKwrwl$5wXZTN`$l;U~^wGgI5 zI4!lWoipUeW%pbFty@utk*z)LUSEoD_L;1BP4K7|qWYZ}B4M?!?>zXyFK38XHZ(92 zBTQjGE-Tx*zw27=kd=nt^ z+(+lfXKcZ(BrFy?<^4imSfM|OW+fM^Cw9uGY~If%WgV}WUwtL^oF)=*1V8TS@JUn= zVTXpdK3h!m^1oRr5*Vm5w|E$A=-x6Rk^rA^^oIrB%vfryqvRM#)*D<(c6u%QDpl;c z(`%S>vn@f~&d$z3uvc@6r&3Rk?-pMT^2)e?xZ)VaUoa+fpi97(^{)-0Obs#p( zf^z7uXD9dmm-xit_6lRWG$n9y{U=pUDhakTY^jr(W8Cj)SXs0AlP4V;gn; z7D{Yq2*`waZ>8q5-?-SJC&`v)9P=~-{F$@>x7Hm>;=2c`nBHot`{x*w{c=j;72qMC zyP}!uhY@2sfN{^%6R}_%zh#}^CA^%6zne;j=pDDuA8ZHdk(IRF-OyTVf5e4}QBHiX z`j^j>_SvL5$wycOj#yz{T3IOIu(S>->S9a0 zpRjTie|Ap+K3Ame6~O*wJFL#rCp2rCmi5fx)#k)xlIr0d2ByDtd=0ru)ha6~nR+%~ zS)r8LZe;M2xn*%h1AB-H^_A3k{}xg2SQ){o=cO*}v_0EF9-WX5$S6o_0X>HES&F2e zuned$w&T}Vjj3Qon46geM4xnSR5Mf>mi9gH$QZ92usAsG$9douw~<<)+@-G@nFZdO zc_%cYj}}@u7EVN^FU#FXGd^=>b2*G_Q1E4eiwS?=osPuZBB{7``iTGylpY^|J~RF( zF*7sRIqoA-Z32~8&D|N+)0mAAVgpO+;Ie@;A4ehnlMbx0Ci>`r%&1i5SD94eVe}S& z!yCLp_g^t3PlmB-IW_g&HnokyWCD~ED!(`J{Q}^|r~f%rj!aOnLN_-Gg1m@!j(1RE zm9m^58-p~yf2<_@pQ=t*_d#<)9o(v=ksq|Y8d$+I`m0RrHQQFom7__)u<@=}^4#<4 z*>3cci@_`g!!h2fay+)v;al^8pwI44PI0s&u*t0k9gk|QYmsj8!4O*~D~ZSn_k(YG z++iK(4+Egyn$$f%s}Yha>SL$%o znLuq5!5A|$nN~Xx_Lc8v?L(SvArO`J2ur#>K1BY`+LL+Y~{Hl7GtWa`tb*T{f zU&zEVFMJEApX#T<9PAEQM~RWO{B&|?MnLq5x@HvMugB*WnaXQ^Pc0w=iSg-21)lyx z95T1u=aFaHRN$f!?cpFOax8Wb>eXj#W>(lwVr(ym9FYIm|75Y?9_cOAN_E%(iXW-? zjz}P6)m-VB9XX$A75&7F|6@L>%bO}N%2U?9@gnzCsRY~lfEKS?o<&fx?tAO|uoA zh?_apGxUK-q_$d<)78h$>GjVxDC>Pw=JCkjgL<LC^;)ovggoHb9F{hO^o14@Vk-Akgy-?H#nttM)l!Nl`3OUg0 zM+kMbo*Pi6Ugqi2(WPBG)e?>ISf|}VNiP6=DfYgYR~N{b^#%pcAnDcK?soNL)xdpC#4@JX#F}N zHo~?G@sgITZ!!`|B8={wWN&G0wJ05(EsJWQ1>mg9TUuJCrgJpMB8n{@jg$G?SS3%% zFe%W=<)I_sU5R>#!q2+;C*tK7wlkpFB*h;d&K5B7XmfuU;mb~A1&zB>o?EUKHAbn` z5*tcgURVuEv3si!W_Wg`m&(AD8S(aIyRbQU-ZiE;_uI zIC^llM3OaEr1?-~LbQf=qczPr9)hotihHiR#K)m$!p}?)gWNM4{rSU^UtiyZJ0k6K zmd=scMb>Mh!n8f*(es)btRD5POF~r^Alo&H8mLQq@$xq!qCsS<=O&`z9@i{HXIX+D zw0`mbD{<|@dR)5@Sd_Ng8td>%>{I#H+hmy$|8p@8!rk@L5e-Pf{OTim)JrigwO62# zOyLP}ZW)_)qC`ols5G=hr8KL3_%KH@FYI#HB{G!x~HK6tv3jt)x4NHUgSa)d>Ic#Z8q)&sGDkO(I^!)YdMtLe;_i9%2k27z~CID@A&Ku0Anqe{U}Z zF3srh2)PKF0e|VZjk-~w(v#+2Q4v{;4>WN0sAGXc1PYA|;vW4r$~=PXaZu%#6m7ME9gX}K%iUFGMGd}-@wKtM#a@^)gR zjtn0O;`QZ3+r&R8H;)cisAPyz;US znKvV{RpBMTC*yFKlFL?jn1|$N3p0QJqXF<1)x%Bc=?D6l$aM8Yyt03&mq*lu{gF-# z_PFMQ%W)UC0?Rb)4hT<0F^6-(^mzjWsQLT8c9~tFHhhC%)7siPtS!8!TD_MSAKth( zawoEuCEy+h^TE?y*;aaU0ELuCPC*iS?ZHp>JAiF?qe>a{=_<@U<}iMP?xIf5%MT3(=-L{5`QMRkxJD0 z`b&VC2B_I$1`+v!w*Ey=POE1bwJKfB8LA$T=RRa{xYO7iP{hk?1uiHtZ|Eug?-YHHgS8Aji8xuvOR$Vn;}`M@AP;hBPWAyDS@K37_K%a5w;B%iWs;0?mD|hgKUGi>m*z7zUNI`B+%Ae(W5n)eMcAjgA zVzX4nxSxENBUgwg4~I^38t`#IP)@%%25fv2Ig>8#g;zZ!iqa~f>ssCAb=h?dq&77JTkJ<{0jMiwJJHW`yGupU~Ya48889!%l2r6ImKB2 z?GMA*y>usxvBnYj=z|AVQe1exx8C=`LY_MO7=-TlOK40KLxAwesvMbw79Myc$um_o zfG3MVqs{|?8Srq2$iM(JqKt|t+6|EuaCbVQv+^nXlx6gs`f}bVy%h`51PqkQnMtUb z854D93IRYVQ0rnf5siR(0x#J85Ov(L?Tt7)^t)8ToyUM0)b-L)tRfKCq6vON>H*W= z>9iT~JE%N{c)L^_XDd`a-=0H2{>Ko&!2D8?!D|ON_4xXOs;KSA#C_||)u0+(HmP&{ z45;7=VzHe zRel@;T>_k@|3~~(Aju^ntj6kSqoXLXGyCCyjJGIFRVXOAj5GGgbN9^FdOwKLSZtt^ z(@L(1@N{A#UyuXEC5OUEU6;_h$zSVIGto2QYhZFaBP>E`I?ZbiM_CfVE2pZ^!kG(B zKJ;r7b_PAP6jF$O+IpYwm2HQ`cA?X~pN@01v&(%Dy>x1>(Qk@gxA$C34e#$6b#)x! zEVnXG+NOSYcPJls+ZsprRcnbPc?$KOCMww>=1r*fqww;34LP?&+#OHYxZGo9e7>)K6_+&Wk)A_^H@+46!gL9z|#sH6OTxe~e zKVoWT?M8@W%alrC1*Ne9Aifv4&m0vJ9sE&gI=+z-o-otD-J${?PpWyorj=F$(3ndJ z#tqo@9%e4l)rDZrBG?5t#pHkSrc{&{PLDL&`PA2J3jd&nEP%9kZ=gby>Ss~{cUmL_ ze%_l@CPsvHDU=;+@DCO4j!wG0r5=|H_*rm(d(FJfW{ip}%6?8RD8_XI$_m-6o_Gky z1S~x37bg4-j>5~+nr;CBArR-D0;wZckMqWM<`)VB(#tAU3@{&~YrjTvWyvJPpZRos z`MCmo95A)E&WY2~G%qippw3ZEPHM*iQF%(^P_t=vVfHOEvxXe)dqQdn4lv?)3OjE` zghn$>a4b9`B4VjAV#VB1k1x-~`j=DyxQjx--I+QhQ1~g0b!pQ}jf0Fm3Z+yk4(fK( zgg?dspzJq4Tj2$<*5zwjc9rA6jOnf2W(7n&!B8#?HV)88Bmq!~P$FpnafwM$Pkbi@ zl)E7YxUaWbxT$G_!7xR`QDSv_nFA7s*&hsf3-<+C685{eTeOFEme$%=0rZ)jqK0?R#24@guOy$QaY`-Dc)Bzzp{KnrXXu)dBCbFt%-L>p zK=&sKR;TwxIbn||o!Pf+Wc?;9x6v>LT6=jh@bqoihOU;lE7HM(=+DQoTv$UDKO99q zrP%T{U+JxH&s1O*K_vOW!dNH6NGw=Ct1Hp4R9dEtyn9yKYo@$=q*P#xa-ehu`$`*A zksZ0&0}BxXDz^mW;yKIu6=ve&*98`G@_nu(hSeadlyn2H%v8g^#w~Mc-@`;8c@Z}v zzkPu9Z4^g{-)$OW1=;%>iMfod>vC%3NcH91^7&B7Ikq02P^tB!0RO49EoAl1mh}8& z(#znG=w>5=d28c$vft&n4%#N~F|%H>)b%`za`P)z*a|mtiH)Mqg;rfFi;(K*gT5AZ z&62nen}>+uhEugvlg6B7jlTHrn|H;w=}o5}IA2Yc*i0;>Q;w-+8QBIi1;^MIWW-?W zgV%k6KiWDa>q;Ce(iW*j5&(IwE)2w#QxQB2WxbuVqnktxZ?*+qs@4z^&-Mr`iis5#FnOlC=T?QOzubK2Ta9DqbyjIST9v>B; z&hFN}0a3VnrQm9o zk)mf2UNLQGfmOWUgDDlSLc!CiHA+;)aG-dLCUqMzCssp;Vtpht7H^=k*Wz~@M@{b* zI^+2*Ejq91yx7UHH{pluH~ESiRSYoq_9i+-e>F1z?RPiP60jE{_7{r7yX3jy@0|g& zwd-_$YZ@b7Avik_J!PN+WO@1e@g4n)_io!4omyk^Jx0SAoq|gE=KwUo#tF1BnCVjR z?K1^*x4hp;sBzG?+#ImC<%DPsI{0`cCN;&iTbZaD z?kuLaP-bTAf(boSZuK#RVWuC(w$E#l9?ivTJxE~6aYB+SbeO9rKiTS5Nuso>bb~ig zzjAYB7EvgQZ{H&3zl>yaW$(*6pt81J;6l}--4EY)v+|MHIO>HDJ0;BVsvRhVwgOG_^r*O_lRt%6=2?J2VEC9G(s2GDtL;F_fg`vu_#d7G!M^ z>5&Gm05VGNQ-2u@hg!QylIfse^4sUF;_}S#v*-&i;fOtzB1zg#aqAcc(|tG3Dx%yW zBsG!$ee3t|Li}t}FnAt$;Aq?K7v&$vW;>7nGcB{9Ztr~p1KJ+RncX7j2nq;#V)@;i$hBBKc zIq>PE(I&$pXutnLX>!NPEX-m(W83T3n&Lb+W*-FGe#{98g4<78|D0eCGUJX6x_2R) zzf)A_evcb_U#x{kGe+KaG}=>LHX;PM*koUT^K_1u>FV%x4J$n~<7KnAUNV0XeGIHS z6tkH0Bxhq*DDg#(?JKJn0bGlV+hLc%rq}iX1~3d5hpb61-)Zt2g!*H%ytbR+f~r28+J_RpC4xk7Oz3i(O?4uz^DVC(;9*TKua zZ)M*$CRIwFvi$d`kC#^(p5!-HX**uG`1dHdM$BFAGBtG}#8pmDnZ0n_OZ7;5#fg+ zSM<|2xH-lOFBOh#FZ5?9VY0tWvlyhI@L1BaWa6udUb7MU3Te|YDX4W`@yFKIIIH|3 zHv7w!^~PuLq~7vhqasqaZj~nG%3={De|utJ(3A>MrcK{kdgELAqQ8AQftS}s<)BOc zS4n3y{R!OTs#e}8f8MCj&x!sF8BDfD?$yN=@Jn-x?&I2`li}kv!x1*iZ!TgHqJb8l zJ5J2U#@3DU(=*IPq56mcsG)s&Uu!!QRJxPGs2i$na7^_4aHM%k%3_M%+p0ejXV1FI0@_5n{IPa(O?(e|!KdT5mKHS?cWH}@_zQ<%X(n{$0_zUGJKUZoLv4_S8 zHI2I-t}`v(e*#*P`L~V?@KH~{sHNxjg@Eqvj}ONFP8wk;dfsr;% zR)3}xPP3x~fKPn@Q^u2VVRN?oBVpvvl+AN>F2ANcf3m?T`Vbpt)1>!jinCf}KlXuT z$JJ_W7+nEc3V3qO0*lJ^jWE&P zagb5>C$&m1yON*3+guFZFsTcp?fyHjo>j4cCVorS$;y)OnLk(5Tz9g6?rg{xrT&$qi=EV<(_7!vfQE@s?DQ*)MGBWn5;BbiOzM1zVkC-4D+h zf`_W+*x`Qt&Di2jKM~J{skE3e#jSg0%^{wpLemdLvqvD!< G)c*ot6)%?n diff --git a/tests/integration/stax/snapshots/test_expert_mode_rejections/settings_expert_blindsiging_off.png b/tests/integration/stax/snapshots/test_expert_mode_rejections/settings_expert_blindsiging_off.png deleted file mode 100644 index 9375185102e260e6f784ba7125f0626dd3fbb8b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12528 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 diff --git a/tests/integration/stax/snapshots/test_parsing_errors/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_parsing_errors/enabled_expert_mode.png index 9bb9098130f449907246ec5afd48ec1f3915403f..c9ef229fa7be8fd071a271ce31ba27c48213c36b 100644 GIT binary patch literal 5065 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 Zc|82`(!0{lz=+P|%;}I*jVEFY{tAkTu;%~( literal 8077 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 HP}e0w?SMoJDQ&gBU`u& zNLvGfEt%BZDc19+jn0N+_H;@1#v4;q8{Ddfbb2CNwELINle+==O23o+wYX0Q6qAIJ z&U?(J!}A8bqud+%B3t5PV^1Ydfl5GXMSn<51v~7DyT>Wg({h4572#6`gCUGG&b9s| zTD#5ujJWaraJQ)1%F(FC-TAIHVyPU(B-8n?7k4Ay_``o}a;) z$}TZkE@FPLVF~^j+nQm{+GRw0HyyK%KyC{(&iM(g^mTEuW;{^f3YghxDW{0f)42=o zZf?xGjL}hN=$VXKEu_J5W`sS2KRY`c-Q79)1tckiETyQNbi?C>8Us$S<%wdhem!hu zscKBH9qMLl5C^=QDDUZZO%KLq;nnZhF?C=&0zN2}PV_#n-z`wpFJ#E7+h3@^s7|!N z#>QHWcbeHf@^Z?a35VKfSaX&u?6qu6a;=|@25?@EghMG&)Y2H$_y8Rpor?Q8bWnc< z1qFdhMT1rZkHyet!}Dq@a4Ll@kMu$y!MeGX9D&J9Un-yJKG(!FFHMt)%}bSfvMiOf zE0e%uwJC`_p&$cWBV4^I%)P>{8m$!?dyF7lmq??hnuo9TONM&1YiTsvo;-jmVBkUi zl=>A6&tHE{Wb&t{kJ9YlU@kUqaf9Tf%7IdfuW8a`N3m6orPkY}e&YA^^kCblLB^b- zyTEBPJ5Yq^D5rGWbUw16OgDMgIZ61xx?-)Rv#|Xd3SED2E&>cu7N&WeeKz)DLib!s z*O7*(OK;N97mwa%BEq;s*B!MC0)|6eo(i6WyX{t`+>80Xg`bXl3ySw|hcHfZ)DFvja^EwMog*cA(GoNB+5_M@mFXD-&YW%T)2?7WUDD+#}XD zHwOnw2b-J8_96^Xz;Ju0e~JI{i%FeAVMj21jGDAZ-A|oG#CY-S~6tYr1nR*Q%Dqna5xz2wi<|xX+_J4@@ax$uJxp}$S zE7KB%>YoYSI2q~=dOdhh$6V9RW$-|AA>EB2JCeZirE|;BzNqY((53@>ox$>wgb29& z@3ap-Y`14BVO6r_k1$Dz$oZn|&9toX*j$E=d`gj_)Ij}8>dpGaGUum3W+}!)ACd+xd=yKvW{;6K!giM_Hu2s%d-YUS*m!a`PV~tFDI%4nOzE= zTA&GnmUX|hY}e~2k)RWI4qMSLwgGdXt-!XQ`>gWhyhj9IsWL8c_*69y``3gj6Fa6< zu+qZb8mYB6I;8`gc_O&Cj=>XA^@9d(P4By?a_|-`HBIdBql*~Dr$qDsdyMl3FoGBl zgor7OJRe!!nrEd?{?w6Quj+iFk`Bn zf4h}Ex4aIF3>`;~F09aTk{c3|bT^^r(=ejI`UH4Ndo_&*#+th-6rNMsdc(zGIRBS2 zgX<;Xw8_=Z>4_B_3dO4W3zX7~Xc{P_#mf}n?6tqnk!Vy;pE@VIJ+mh|ux)|EqfYw2 z5js>rV-7T|uykK|BnUp0-Mq%x=2FABiEu^h_km1c`ICzovg{J}q({s6Q|E{rrF#Sh z4?O%c`>xTsGRX?p%&x@$MghMw2Um<0{Q8VUYLzeUFFWs{kdZzMU&(0~RuWf9^#l%#Q_!0^1+`VlOi8)|Uf=-AqlM~d3 zr$8kH_04fOT;P~~e|EnY2k7dnoB7z<^ss@uz-Uu$xeGc4kM<7D){{s}>Y&%rUQNhK z1Rc0h0NXYm7`*L#yG;S75z~L@wL18xHW(O46eA%++GpO*|TJ$0eK*|c2ggVr8 z@&(Ph#W z_L8w~VAr@xzLmABUr9@c%E0l-eLz~4ct_qaGA?cKyqAZyrv6`+p8K}L+Hj~X+qWZ-gua4q6JYuJ0%F?s*=TCbzDue{1N#+o=f+5@@|$g>{t)>E3jFP$9?Qr65-E@huPw&9oxTOX-z4!WT`;SH|-TZVlG|N54aN%eLRBNg+V}Gzs8m_Dz;% Lwil?sd))djhTkWo diff --git a/tests/integration/stax/snapshots/test_sign_execute_outbox_messages/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_sign_execute_outbox_messages/enabled_expert_mode.png index 9bb9098130f449907246ec5afd48ec1f3915403f..c9ef229fa7be8fd071a271ce31ba27c48213c36b 100644 GIT binary patch literal 5065 zcmeI0dsvcb`p2#5m)e+4_FHSs!_0P>)4@zFEe~iXXG+sjK}rS9q{LH-ctT)C8{Kxs zs63F8(u}2rAS$M!BBM4jX{betgn(#7h)Ny+6@h(s_uBn$uWR?e-|xEm_j#}Pd7t-t z-}mSKKKIS@A>VA>V!Oq}#ANH4Z%>7pm~6OhVzTjp*+yW+JG8sO#AN&JGpCM6;03W0{FlfO%No`GT@TWs|G7(VBrNYv$44CAl@B zJp)ef%O$h+S$%}xF1y)TVob7C{&3a?lX~j|Ulzq~aNG3xpTB|zSoChZY-aPt$)@ji z7W~h%FFrl`q{gS*_`gyP(`>lxM+=Sk1T zTpD(4fu6K8?msB(pIm*2BddkCWezY#;J-n@{8ZKaMNbkJ`P5rhp~tZsmG70Z45la* z!-9dq{nC%)F_4B)1S7G>p(Id7;$pR6@R6Ms6w2DOb93rErMffuxxvM>u(#LIg*X^q z(?Dxf#_xhBdy>?7qUH^b;s?#5RQb{>f+0xu1ooGxtcv?_Z2ZSFLgVhYSy^v-X{=;2 z>h5os7lw|(;PB9ic61C8b8b(mm3Ecvj~_@W>W^DB6ywLxF>DqKJ66}jW)nEm^Fl&k zt%QwN`HF51kG2`V)V=L$}C>Wir`hN)4Gj$Y%&*I}%tC(PO`fERHL1k+2o>Dj)r_N(>5sc`A z*?WqFb8X!Q=h7FwH^XB1KE_3_?e`Iuue))#QeIyqU9teqdvzkU9ndlH86D2H`SJAX zX-m-Q7aw}b4j6GNu8N+apVBm8ewfkGp5J_=vl1mBFBihnk6xQ|DahtqVC5*g`!` zbis47OdvU)a2EP{L~O;z8^x=Mn6pq#01&B~wYgd0qF#{PhNrt5XcVOU8~%Fk$FIWs zNc-?y61UFpOycusF5jm(Ipmc?t_X1%>e<4Q;iHaKi9wW@9?%LTP_PS7cJcwb8G0CQ zNAhquY+F)wC9OSbdw-NQm4p;mB70JakJewcr(LhGrZQkT{I6?&v$FaM`^z5a+|}d) z^epZ5T}Hg=s|E@Zcc;4D*8dI8s9naSJN0%xbtipYNF7Cj4Ie`B1O?76Dr3RxaOHSv zyR0c9ys}Wa^DM2CU{g-6>9G5m<-~%eF$5DCR_oK7lw%aizNIIK+hDQXEYv2m_^f*> z^WNhdPZSY1Psi|eqes)9MQB!;sz21|PDO_{^#oj;Y7!(nI5-R_AKHa7e=S*h)!6S+ zII7Z;p1?h9_dPm#w9nfsV27!4$|vLCpl##g@^a?vH-)_qra$IlZk}AKX4t^ybcdij z(q?+*vZ5SPd>!x|5qcDmu%pP)hm;o(l-tzZ5j4{YYSYMD&Q*uh`6aNj0WsqB#1lC?)%&3DZzC0p7 zRpbrp2eAjRgtq}XaRMNJ8yh4r>=Hr>so=xjg!Lt&VK-?p+^94bf5IYf+JAOXM0d0e*YA&(i$d{50gb+&;vFJ10x`S zY~2i2*)jkno>2r!3TKyQgdJ!6g@)b0&LF+ImYIA@0MoU3R8T1t-4!)Hi){2OK$r8b zp44&PY60FLKplc)Ab`a?ApV1Xp%Vs*^m+&MKovr5z?Y0^wrYr}t@gq+JxIUf7O2tpca^wffLaPOmCM&w{sNo@%M}L&PFr*ld*a0ClLl20V9wNt- z5eOfxyH&qF?BcK2>$J^V$IZDyp|Cj$w-V+^;Be-n{-g#vz}s87c=ly^W*QR3e8=-D zbd5W^Qhmg6D8F$otINZhIh$?^@E-_^GfuO(17LkN{8`?%41Jx;yZWu*& ziRNFnQ7AKpoFDa}r+pK)K=|q*=Y*7YVO^$hPP4GEFgG{HqyLN(3<(5p5C-9FsUmZx zcC)H#uhbqnoHx`Nk0Mei13{_om9rCd5!2&kO?E=0d~)2QB6lp=Q)pEDt@rUt0&C*| zsFi(O#$Y?1$QURJ#akK2bPDfNJ=vrz5Jdkmu7oq~ZhdUwsP-0xa@NpT87cnt+F|5I zk>R`4`I1;{D1e~KF93x#I;`V9F9(awU~u_`7YV&H>b&EQkH9#A{)}7piKd>P-(L^@ z+Cv#=_n7^;|D64z zr3j<_CnUQz*1meI_$?pgswzMq?J(;BY>2L5lrpV10N+gh`tKmp?F#Qp%Cfw#o@Au6L6kl-{kPmq# zRlQ%zMNJJV>NnJU7^vn+UALMu@5YL{_QQ{HGbnReI_XqVMj?fA%Vjb8An_`fL7`M} z5reW8!FRXBG4E9gr<>+WW3l*tX_NU#26J}jmGafeJQfaz1Lct3(|$!+k*zit))fuP z++`;Y7NE&MIT^A-c*j=4e6f|INA`cKTK_f+)BHGAR4DP+x0Z7e;WmdOz@ykzifij78qoBrr1i=;k;iT- zM!O^*p5JxA=12YBmqTU^e>+Ky#IU>{(lUjell*T Zc|82`(!0{lz=+P|%;}I*jVEFY{tAkTu;%~( literal 8077 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 HP}e0w?SMoJDQ&gBU`u& zNLvGfEt%BZDc19+jn0N+_H;@1#v4;q8{Ddfbb2CNwELINle+==O23o+wYX0Q6qAIJ z&U?(J!}A8bqud+%B3t5PV^1Ydfl5GXMSn<51v~7DyT>Wg({h4572#6`gCUGG&b9s| zTD#5ujJWaraJQ)1%F(FC-TAIHVyPU(B-8n?7k4Ay_``o}a;) z$}TZkE@FPLVF~^j+nQm{+GRw0HyyK%KyC{(&iM(g^mTEuW;{^f3YghxDW{0f)42=o zZf?xGjL}hN=$VXKEu_J5W`sS2KRY`c-Q79)1tckiETyQNbi?C>8Us$S<%wdhem!hu zscKBH9qMLl5C^=QDDUZZO%KLq;nnZhF?C=&0zN2}PV_#n-z`wpFJ#E7+h3@^s7|!N z#>QHWcbeHf@^Z?a35VKfSaX&u?6qu6a;=|@25?@EghMG&)Y2H$_y8Rpor?Q8bWnc< z1qFdhMT1rZkHyet!}Dq@a4Ll@kMu$y!MeGX9D&J9Un-yJKG(!FFHMt)%}bSfvMiOf zE0e%uwJC`_p&$cWBV4^I%)P>{8m$!?dyF7lmq??hnuo9TONM&1YiTsvo;-jmVBkUi zl=>A6&tHE{Wb&t{kJ9YlU@kUqaf9Tf%7IdfuW8a`N3m6orPkY}e&YA^^kCblLB^b- zyTEBPJ5Yq^D5rGWbUw16OgDMgIZ61xx?-)Rv#|Xd3SED2E&>cu7N&WeeKz)DLib!s z*O7*(OK;N97mwa%BEq;s*B!MC0)|6eo(i6WyX{t`+>80Xg`bXl3ySw|hcHfZ)DFvja^EwMog*cA(GoNB+5_M@mFXD-&YW%T)2?7WUDD+#}XD zHwOnw2b-J8_96^Xz;Ju0e~JI{i%FeAVMj21jGDAZ-A|oG#CY-S~6tYr1nR*Q%Dqna5xz2wi<|xX+_J4@@ax$uJxp}$S zE7KB%>YoYSI2q~=dOdhh$6V9RW$-|AA>EB2JCeZirE|;BzNqY((53@>ox$>wgb29& z@3ap-Y`14BVO6r_k1$Dz$oZn|&9toX*j$E=d`gj_)Ij}8>dpGaGUum3W+}!)ACd+xd=yKvW{;6K!giM_Hu2s%d-YUS*m!a`PV~tFDI%4nOzE= zTA&GnmUX|hY}e~2k)RWI4qMSLwgGdXt-!XQ`>gWhyhj9IsWL8c_*69y``3gj6Fa6< zu+qZb8mYB6I;8`gc_O&Cj=>XA^@9d(P4By?a_|-`HBIdBql*~Dr$qDsdyMl3FoGBl zgor7OJRe!!nrEd?{?w6Quj+iFk`Bn zf4h}Ex4aIF3>`;~F09aTk{c3|bT^^r(=ejI`UH4Ndo_&*#+th-6rNMsdc(zGIRBS2 zgX<;Xw8_=Z>4_B_3dO4W3zX7~Xc{P_#mf}n?6tqnk!Vy;pE@VIJ+mh|ux)|EqfYw2 z5js>rV-7T|uykK|BnUp0-Mq%x=2FABiEu^h_km1c`ICzovg{J}q({s6Q|E{rrF#Sh z4?O%c`>xTsGRX?p%&x@$MghMw2Um<0{Q8VUYLzeUFFWs{kdZzMU&(0~RuWf9^#l%#Q_!0^1+`VlOi8)|Uf=-AqlM~d3 zr$8kH_04fOT;P~~e|EnY2k7dnoB7z<^ss@uz-Uu$xeGc4kM<7D){{s}>Y&%rUQNhK z1Rc0h0NXYm7`*L#yG;S75z~L@wL18xHW(O46eA%++GpO*|TJ$0eK*|c2ggVr8 z@&(Ph#W z_L8w~VAr@xzLmABUr9@c%E0l-eLz~4ct_qaGA?cKyqAZyrv6`+p8K}L+Hj~X+qWZ-gua4q6JYuJ0%F?s*=TCbzDue{1N#+o=f+5@@|$g>{t)>E3jFP$9?Qr65-E@huPw&9oxTOX-z4!WT`;SH|-TZVlG|N54aN%eLRBNg+V}Gzs8m_Dz;% Lwil?sd))djhTkWo diff --git a/tests/integration/stax/snapshots/test_sign_transfer/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_sign_transfer/enabled_expert_mode.png index 9bb9098130f449907246ec5afd48ec1f3915403f..c9ef229fa7be8fd071a271ce31ba27c48213c36b 100644 GIT binary patch literal 5065 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 Zc|82`(!0{lz=+P|%;}I*jVEFY{tAkTu;%~( literal 8077 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 HP}e0w?SMoJDQ&gBU`u& zNLvGfEt%BZDc19+jn0N+_H;@1#v4;q8{Ddfbb2CNwELINle+==O23o+wYX0Q6qAIJ z&U?(J!}A8bqud+%B3t5PV^1Ydfl5GXMSn<51v~7DyT>Wg({h4572#6`gCUGG&b9s| zTD#5ujJWaraJQ)1%F(FC-TAIHVyPU(B-8n?7k4Ay_``o}a;) z$}TZkE@FPLVF~^j+nQm{+GRw0HyyK%KyC{(&iM(g^mTEuW;{^f3YghxDW{0f)42=o zZf?xGjL}hN=$VXKEu_J5W`sS2KRY`c-Q79)1tckiETyQNbi?C>8Us$S<%wdhem!hu zscKBH9qMLl5C^=QDDUZZO%KLq;nnZhF?C=&0zN2}PV_#n-z`wpFJ#E7+h3@^s7|!N z#>QHWcbeHf@^Z?a35VKfSaX&u?6qu6a;=|@25?@EghMG&)Y2H$_y8Rpor?Q8bWnc< z1qFdhMT1rZkHyet!}Dq@a4Ll@kMu$y!MeGX9D&J9Un-yJKG(!FFHMt)%}bSfvMiOf zE0e%uwJC`_p&$cWBV4^I%)P>{8m$!?dyF7lmq??hnuo9TONM&1YiTsvo;-jmVBkUi zl=>A6&tHE{Wb&t{kJ9YlU@kUqaf9Tf%7IdfuW8a`N3m6orPkY}e&YA^^kCblLB^b- zyTEBPJ5Yq^D5rGWbUw16OgDMgIZ61xx?-)Rv#|Xd3SED2E&>cu7N&WeeKz)DLib!s z*O7*(OK;N97mwa%BEq;s*B!MC0)|6eo(i6WyX{t`+>80Xg`bXl3ySw|hcHfZ)DFvja^EwMog*cA(GoNB+5_M@mFXD-&YW%T)2?7WUDD+#}XD zHwOnw2b-J8_96^Xz;Ju0e~JI{i%FeAVMj21jGDAZ-A|oG#CY-S~6tYr1nR*Q%Dqna5xz2wi<|xX+_J4@@ax$uJxp}$S zE7KB%>YoYSI2q~=dOdhh$6V9RW$-|AA>EB2JCeZirE|;BzNqY((53@>ox$>wgb29& z@3ap-Y`14BVO6r_k1$Dz$oZn|&9toX*j$E=d`gj_)Ij}8>dpGaGUum3W+}!)ACd+xd=yKvW{;6K!giM_Hu2s%d-YUS*m!a`PV~tFDI%4nOzE= zTA&GnmUX|hY}e~2k)RWI4qMSLwgGdXt-!XQ`>gWhyhj9IsWL8c_*69y``3gj6Fa6< zu+qZb8mYB6I;8`gc_O&Cj=>XA^@9d(P4By?a_|-`HBIdBql*~Dr$qDsdyMl3FoGBl zgor7OJRe!!nrEd?{?w6Quj+iFk`Bn zf4h}Ex4aIF3>`;~F09aTk{c3|bT^^r(=ejI`UH4Ndo_&*#+th-6rNMsdc(zGIRBS2 zgX<;Xw8_=Z>4_B_3dO4W3zX7~Xc{P_#mf}n?6tqnk!Vy;pE@VIJ+mh|ux)|EqfYw2 z5js>rV-7T|uykK|BnUp0-Mq%x=2FABiEu^h_km1c`ICzovg{J}q({s6Q|E{rrF#Sh z4?O%c`>xTsGRX?p%&x@$MghMw2Um<0{Q8VUYLzeUFFWs{kdZzMU&(0~RuWf9^#l%#Q_!0^1+`VlOi8)|Uf=-AqlM~d3 zr$8kH_04fOT;P~~e|EnY2k7dnoB7z<^ss@uz-Uu$xeGc4kM<7D){{s}>Y&%rUQNhK z1Rc0h0NXYm7`*L#yG;S75z~L@wL18xHW(O46eA%++GpO*|TJ$0eK*|c2ggVr8 z@&(Ph#W z_L8w~VAr@xzLmABUr9@c%E0l-eLz~4ct_qaGA?cKyqAZyrv6`+p8K}L+Hj~X+qWZ-gua4q6JYuJ0%F?s*=TCbzDue{1N#+o=f+5@@|$g>{t)>E3jFP$9?Qr65-E@huPw&9oxTOX-z4!WT`;SH|-TZVlG|N54aN%eLRBNg+V}Gzs8m_Dz;% Lwil?sd))djhTkWo diff --git a/tests/integration/stax/snapshots/test_sign_transfer_without_hash/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_sign_transfer_without_hash/enabled_expert_mode.png index 9bb9098130f449907246ec5afd48ec1f3915403f..c9ef229fa7be8fd071a271ce31ba27c48213c36b 100644 GIT binary patch literal 5065 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 Zc|82`(!0{lz=+P|%;}I*jVEFY{tAkTu;%~( literal 8077 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 HP}e0w?SMoJDQ&gBU`u& zNLvGfEt%BZDc19+jn0N+_H;@1#v4;q8{Ddfbb2CNwELINle+==O23o+wYX0Q6qAIJ z&U?(J!}A8bqud+%B3t5PV^1Ydfl5GXMSn<51v~7DyT>Wg({h4572#6`gCUGG&b9s| zTD#5ujJWaraJQ)1%F(FC-TAIHVyPU(B-8n?7k4Ay_``o}a;) z$}TZkE@FPLVF~^j+nQm{+GRw0HyyK%KyC{(&iM(g^mTEuW;{^f3YghxDW{0f)42=o zZf?xGjL}hN=$VXKEu_J5W`sS2KRY`c-Q79)1tckiETyQNbi?C>8Us$S<%wdhem!hu zscKBH9qMLl5C^=QDDUZZO%KLq;nnZhF?C=&0zN2}PV_#n-z`wpFJ#E7+h3@^s7|!N z#>QHWcbeHf@^Z?a35VKfSaX&u?6qu6a;=|@25?@EghMG&)Y2H$_y8Rpor?Q8bWnc< z1qFdhMT1rZkHyet!}Dq@a4Ll@kMu$y!MeGX9D&J9Un-yJKG(!FFHMt)%}bSfvMiOf zE0e%uwJC`_p&$cWBV4^I%)P>{8m$!?dyF7lmq??hnuo9TONM&1YiTsvo;-jmVBkUi zl=>A6&tHE{Wb&t{kJ9YlU@kUqaf9Tf%7IdfuW8a`N3m6orPkY}e&YA^^kCblLB^b- zyTEBPJ5Yq^D5rGWbUw16OgDMgIZ61xx?-)Rv#|Xd3SED2E&>cu7N&WeeKz)DLib!s z*O7*(OK;N97mwa%BEq;s*B!MC0)|6eo(i6WyX{t`+>80Xg`bXl3ySw|hcHfZ)DFvja^EwMog*cA(GoNB+5_M@mFXD-&YW%T)2?7WUDD+#}XD zHwOnw2b-J8_96^Xz;Ju0e~JI{i%FeAVMj21jGDAZ-A|oG#CY-S~6tYr1nR*Q%Dqna5xz2wi<|xX+_J4@@ax$uJxp}$S zE7KB%>YoYSI2q~=dOdhh$6V9RW$-|AA>EB2JCeZirE|;BzNqY((53@>ox$>wgb29& z@3ap-Y`14BVO6r_k1$Dz$oZn|&9toX*j$E=d`gj_)Ij}8>dpGaGUum3W+}!)ACd+xd=yKvW{;6K!giM_Hu2s%d-YUS*m!a`PV~tFDI%4nOzE= zTA&GnmUX|hY}e~2k)RWI4qMSLwgGdXt-!XQ`>gWhyhj9IsWL8c_*69y``3gj6Fa6< zu+qZb8mYB6I;8`gc_O&Cj=>XA^@9d(P4By?a_|-`HBIdBql*~Dr$qDsdyMl3FoGBl zgor7OJRe!!nrEd?{?w6Quj+iFk`Bn zf4h}Ex4aIF3>`;~F09aTk{c3|bT^^r(=ejI`UH4Ndo_&*#+th-6rNMsdc(zGIRBS2 zgX<;Xw8_=Z>4_B_3dO4W3zX7~Xc{P_#mf}n?6tqnk!Vy;pE@VIJ+mh|ux)|EqfYw2 z5js>rV-7T|uykK|BnUp0-Mq%x=2FABiEu^h_km1c`ICzovg{J}q({s6Q|E{rrF#Sh z4?O%c`>xTsGRX?p%&x@$MghMw2Um<0{Q8VUYLzeUFFWs{kdZzMU&(0~RuWf9^#l%#Q_!0^1+`VlOi8)|Uf=-AqlM~d3 zr$8kH_04fOT;P~~e|EnY2k7dnoB7z<^ss@uz-Uu$xeGc4kM<7D){{s}>Y&%rUQNhK z1Rc0h0NXYm7`*L#yG;S75z~L@wL18xHW(O46eA%++GpO*|TJ$0eK*|c2ggVr8 z@&(Ph#W z_L8w~VAr@xzLmABUr9@c%E0l-eLz~4ct_qaGA?cKyqAZyrv6`+p8K}L+Hj~X+qWZ-gua4q6JYuJ0%F?s*=TCbzDue{1N#+o=f+5@@|$g>{t)>E3jFP$9?Qr65-E@huPw&9oxTOX-z4!WT`;SH|-TZVlG|N54aN%eLRBNg+V}Gzs8m_Dz;% Lwil?sd))djhTkWo diff --git a/tests/integration/stax/test_blindsign_too_deep_rejections.py b/tests/integration/stax/test_blindsign_too_deep_rejections.py index da3fab769..2b1517700 100755 --- a/tests/integration/stax/test_blindsign_too_deep_rejections.py +++ b/tests/integration/stax/test_blindsign_too_deep_rejections.py @@ -57,18 +57,6 @@ def toggle_expert_mode(): app.review.tap() verify_err_reject_response(app, "too_deep_blindsign_notify") - - # Rejecting at blindsigning enabled screen (blindsign disabled) - toggle_blindsigning() # Disable blindsigning at home - send_initialize_msg(app, "800f000011048000002c800006c18000000080000000") - send_payload(app, "800f0100eb0502000000f702000000f202000000ed02000000e802000000e302000000de02000000d902000000d402000000cf02000000ca02000000c502000000c002000000bb02000000b602000000b102000000ac02000000a702000000a2020000009d02000000980200000093020000008e02000000890200000084020000007f020000007a02000000750200000070020000006b02000000660200000061020000005c02000000570200000052020000004d02000000480200000043020000003e02000000390200000034020000002f020000002a02000000250200000020020000001b020000001602000000") - app.review.tap() - app.assert_screen("too_deep_expression") - app.review.tap() - app.assert_screen("too_deep_enable_blindsign") - app.choice.confirm() - verify_err_reject_response(app, "blindsign_enabled") - # Rejecting at blindsigning splash screen toggle_blindsigning() # Disable blindsigning at home app.settings_toggle_blindsigning() diff --git a/tests/integration/stax/test_expert_mode_rejections.py b/tests/integration/stax/test_expert_mode_rejections.py index ee58efac2..df6c86225 100644 --- a/tests/integration/stax/test_expert_mode_rejections.py +++ b/tests/integration/stax/test_expert_mode_rejections.py @@ -43,24 +43,7 @@ def sign_transfer_initialize(app): app.review.tap() verify_reject_response(app,"enable_expert_mode") - # Reject from enabled expert mode - sign_transfer_initialize(app) - app.review.tap() - app.assert_screen("enable_expert_mode") - app.welcome.client.finger_touch(BUTTON_ABOVE_LOWER_MIDDLE.x, BUTTON_ABOVE_LOWER_MIDDLE.y) - verify_reject_response(app, "enabled_expert_mode") - - #- Reject from expert mode splash screen - - # In previous test, expert mode was enabled, disable it here. - app.welcome.info() - app.assert_screen(SCREEN_INFO_PAGE) - app.info.next() - app.assert_screen("settings_expert_on_blindsigning_off") - app.settings_toggle_expert_mode() - app.assert_screen("settings_expert_blindsiging_off") - app.info.multi_page_exit() - + # Reject from expert mode splash sign_transfer_initialize(app) app.review.tap() app.enable_expert_mode() From 3729145876b26b78b6e0c335f2c340dc5093ad31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Mon, 12 Feb 2024 15:11:40 +0100 Subject: [PATCH 42/78] Docker: fix ledger app-builder version to 3.14.0 --- .github/workflows/build.yml | 2 +- Makefile | 4 ++-- scripts/test_swap.sh | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2aa900c70..0b09579b7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: device: [nanos, nanosp, nanox, stax] runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:3.14.0 steps: - name: Checkout uses: actions/checkout@v3 diff --git a/Makefile b/Makefile index fc1ca058d..889e35b14 100644 --- a/Makefile +++ b/Makefile @@ -25,8 +25,8 @@ docker_speculos: $(DOCKER) image tag $(LEDGERHQ)/speculos speculos docker_ledger_app_builder: - $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:latest - $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:latest \ + $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:3.14.0 + $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:3.14.0 \ ledger-app-builder docker_ledger_app_ocaml: diff --git a/scripts/test_swap.sh b/scripts/test_swap.sh index 56a99d2ed..c9937b4f9 100755 --- a/scripts/test_swap.sh +++ b/scripts/test_swap.sh @@ -104,8 +104,7 @@ _build_app() { ( cd $repo - docker run --rm -ti -v "$(realpath .):/app" --privileged \ - ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest \ + docker run --rm -ti -v "$(realpath .):/app" --privileged ledger-app-builder:latest \ bash -c "make clean && make -j $params BOLOS_SDK=\$$sdk" ) } From 1b8512893a5dfb9590d8ca39779e7d93be20b411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 13 Feb 2024 11:03:58 +0100 Subject: [PATCH 43/78] Style: name parameters in function prototype [misra-c2012-8.2] Function types shall be in prototype form with named parameters --- app/src/apdu.h | 2 +- app/src/apdu_pubkey.c | 5 +++-- app/src/apdu_sign.c | 14 +++++++------- app/src/keys.c | 7 ++++--- app/src/keys.h | 15 +++++++++------ app/src/parser/formatting.c | 7 ++++--- app/src/parser/formatting.h | 21 +++++++++++---------- app/src/parser/micheline_parser.c | 14 +++++++------- app/src/parser/micheline_parser.h | 4 ++-- app/src/parser/num_parser.h | 20 +++++++++++--------- app/src/parser/operation_parser.c | 6 +++--- app/src/parser/operation_parser.h | 7 ++++--- app/src/parser/parser_state.h | 22 ++++++++++++---------- app/src/ui_home.c | 2 +- app/src/ui_settings.c | 2 +- app/src/ui_settings.h | 2 +- app/src/ui_stream.c | 9 +++++---- app/src/ui_stream.h | 20 ++++++++++++-------- app/src/ui_stream_nbgl.c | 10 +++++----- app/src/ui_strings.c | 10 +++++----- app/src/ui_strings.h | 10 +++++----- 21 files changed, 113 insertions(+), 96 deletions(-) diff --git a/app/src/apdu.h b/app/src/apdu.h index 15e5e7521..5d6c85842 100644 --- a/app/src/apdu.h +++ b/app/src/apdu.h @@ -82,7 +82,7 @@ * */ -typedef void(tz_handler)(command_t *); +typedef void(tz_handler)(command_t *cmd); typedef tz_handler *tz_handler_t; tz_handler handle_unimplemented; diff --git a/app/src/apdu_pubkey.c b/app/src/apdu_pubkey.c index 0469b42f6..140d943f9 100644 --- a/app/src/apdu_pubkey.c +++ b/app/src/apdu_pubkey.c @@ -35,8 +35,9 @@ static void provide_pubkey(void); static void prompt_address(void); -static void format_pkh(cx_ecfp_public_key_t *, char *, size_t); -static void stream_cb(tz_ui_cb_type_t); +static void format_pkh(cx_ecfp_public_key_t *pubkey, char *buffer, + size_t len); +static void stream_cb(tz_ui_cb_type_t cb_type); static void provide_pubkey(void) diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index f9798a51f..cd54f63cc 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -51,16 +51,16 @@ /* Prototypes */ static void sign_packet(void); -static void send_reject(int); +static void send_reject(int error_code); static void send_continue(void); static void send_cancel(void); static void refill(void); -static void stream_cb(tz_ui_cb_type_t); -static void handle_first_apdu(command_t *); -static void handle_first_apdu_clear(command_t *); +static void stream_cb(tz_ui_cb_type_t cb_type); +static void handle_first_apdu(command_t *cmd); +static void handle_first_apdu_clear(command_t *cmd); static void init_blind_stream(void); -static void handle_data_apdu(command_t *); -static void handle_data_apdu_clear(command_t *); +static void handle_data_apdu(command_t *cmd); +static void handle_data_apdu_clear(command_t *cmd); static void handle_data_apdu_blind(void); /* Macros */ @@ -387,7 +387,7 @@ stream_cb(tz_ui_cb_type_t cb_type) #define FINAL_HASH global.keys.apdu.hash.final_hash #ifdef HAVE_BAGL static void -bs_push_next() +bs_push_next(void) { char obuf[TZ_BASE58_BUFFER_SIZE(sizeof(FINAL_HASH))]; blindsign_step_t *step = &global.keys.apdu.sign.u.blind.step; diff --git a/app/src/keys.c b/app/src/keys.c index 70c609a3e..a800aa227 100644 --- a/app/src/keys.c +++ b/app/src/keys.c @@ -33,9 +33,10 @@ #include "keys.h" #include "globals.h" -static tz_exc public_key_hash(uint8_t *, size_t, cx_ecfp_public_key_t *, - derivation_type_t, - const cx_ecfp_public_key_t *); +static tz_exc public_key_hash(uint8_t *hash_out, size_t hash_out_size, + cx_ecfp_public_key_t *compressed_out, + derivation_type_t derivation_type, + const cx_ecfp_public_key_t *public_key); static cx_curve_t derivation_type_to_cx_curve(derivation_type_t derivation_type) diff --git a/app/src/keys.h b/app/src/keys.h index c623e6b48..d9a1084fd 100644 --- a/app/src/keys.h +++ b/app/src/keys.h @@ -54,12 +54,15 @@ typedef struct { derivation_type_t derivation_type; } bip32_path_with_curve_t; -tz_exc read_bip32_path(bip32_path_t *, const uint8_t *, size_t); -tz_exc derive_pk(cx_ecfp_public_key_t *, derivation_type_t, - const bip32_path_t *); -tz_exc derive_pkh(cx_ecfp_public_key_t *, derivation_type_t, char *, size_t); -void sign(derivation_type_t, const bip32_path_t *, const uint8_t *, size_t, - uint8_t *, size_t *); +tz_exc read_bip32_path(bip32_path_t *out, const uint8_t *in, size_t in_size); +tz_exc derive_pk(cx_ecfp_public_key_t *public_key, + derivation_type_t derivation_type, + const bip32_path_t *bip32_path); +tz_exc derive_pkh(cx_ecfp_public_key_t *pubkey, + derivation_type_t derivation_type, char *buffer, + size_t len); +void sign(derivation_type_t derivation_type, const bip32_path_t *path, + const uint8_t *hash, size_t hashlen, uint8_t *sig, size_t *siglen); static inline bool check_derivation_type(derivation_type_t code) diff --git a/app/src/parser/formatting.c b/app/src/parser/formatting.c index 59ecfcfcb..e0ebe4650 100644 --- a/app/src/parser/formatting.c +++ b/app/src/parser/formatting.c @@ -288,9 +288,10 @@ struct sha256_ctx { uint8_t buf[128]; uint32_t h[8]; }; -extern void digestif_sha256_init(struct sha256_ctx *); -extern void digestif_sha256_update(struct sha256_ctx *, uint8_t *, uint32_t); -extern void digestif_sha256_finalize(struct sha256_ctx *, uint8_t *); +extern void digestif_sha256_init(struct sha256_ctx *ctx); +extern void digestif_sha256_update(struct sha256_ctx *ctx, uint8_t *data, + uint32_t size); +extern void digestif_sha256_finalize(struct sha256_ctx *ctx, uint8_t *out); static void cx_hash_sha256(uint8_t *data, size_t size, uint8_t *out, size_t size_out) { diff --git a/app/src/parser/formatting.h b/app/src/parser/formatting.h index 478209064..38d6c2275 100644 --- a/app/src/parser/formatting.h +++ b/app/src/parser/formatting.h @@ -24,7 +24,7 @@ // Tezos protocol upgrade to support new opcodes, the existing opcodes // are guaranteed to stay unchanged, so not updating does not break // security. -const char *tz_michelson_op_name(uint8_t); +const char *tz_michelson_op_name(uint8_t op_code); #define TZ_LAST_MICHELSON_OPCODE 154 // Should be kept in sync with the last protocol update, including @@ -192,13 +192,13 @@ typedef enum { // stored in little-endian order in the first `l` bytes of `n`. The // output buffer `obuf` must be at least `DECIMAL_BUFFER_SIZE(l)` // (caller responsibility). -int tz_format_decimal(const uint8_t *, size_t, char *, size_t); +int tz_format_decimal(const uint8_t *n, size_t l, char *obuf, size_t olen); #define TZ_DECIMAL_BUFFER_SIZE(_l) ((_l)*241 / 100 + 1) // Formats a data `n` of size `l` in base58 using Tezos' alphabet // order (same as Bitcoin). The output buffer `obuf` must be at least // `BASE58_BUFFER_SIZE(l)` (caller responsibility). -int tz_format_base58(const uint8_t *, size_t, char *, size_t); +int tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen); #define TZ_BASE58_BUFFER_SIZE(_l) ((_l)*138 / 100 + 1) // Looks up the prefix from the provided string (arg1), e.g. "B", @@ -209,8 +209,8 @@ int tz_format_base58(const uint8_t *, size_t, char *, size_t); // double-sha256 of this concatenation, and call `format_base58`. The // output buffer `obuf` must be at least `BASE58CHECK_BUFFER_SIZE(l, // prefix_len)` (caller responsibility). -int tz_format_base58check(const char *, const uint8_t *, size_t, char *, - size_t); +int tz_format_base58check(const char *prefix, const uint8_t *ibuf, + size_t ilen, char *obuf, size_t olen); #define TZ_BASE58CHECK_BUFFER_SIZE(_l, _p) \ TZ_BASE58_BUFFER_SIZE((_p) + (_l) + 4) @@ -225,13 +225,13 @@ int tz_format_base58check(const char *, const uint8_t *, size_t, char *, // tag 1: tz2(36) // tag 2: tz3(36) // tag 3: tz4(36) -int tz_format_pkh(const uint8_t *, size_t, char *, size_t); +int tz_format_pkh(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); // size 32, o(51) -int tz_format_oph(const uint8_t *, size_t, char *, size_t); +int tz_format_oph(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); // size 32, B(51) -int tz_format_bh(const uint8_t *, size_t, char *, size_t); +int tz_format_bh(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); // size 22: tag(1) + data(21) // tag 0: tag(1) + pkh(20) (tz1, tz2, tz3, tz4, see format_pkh) @@ -239,11 +239,12 @@ int tz_format_bh(const uint8_t *, size_t, char *, size_t); // tag 2: txrolluph(20) + padding(1), txr1(36) // tag 3: rolluph(20) + padding(1), scr1(36) // tag 4: zkrolluph(20) + padding(1), zkr1(36) -int tz_format_address(const uint8_t *, size_t, char *, size_t); +int tz_format_address(const uint8_t *ibuf, size_t ilen, char *obuf, + size_t olen); // size 33/34/49: tag(1) + data(32/33/48) // tag 0: pk(32), edpk(54) // tag 1: pk(33), sppk(55) // tag 2: pk(33), p2pk(55) // tag 3: pk(48), BLpk(76) -int tz_format_pk(const uint8_t *, size_t, char *, size_t); +int tz_format_pk(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); diff --git a/app/src/parser/micheline_parser.c b/app/src/parser/micheline_parser.c index 9701ef6d6..2b510745d 100644 --- a/app/src/parser/micheline_parser.c +++ b/app/src/parser/micheline_parser.c @@ -24,13 +24,13 @@ /* Prototypes */ -static tz_parser_result push_frame(tz_parser_state *, - tz_micheline_parser_step_kind); -static tz_parser_result pop_frame(tz_parser_state *); -static tz_parser_result begin_sized(tz_parser_state *); -static tz_parser_result print_escaped(tz_parser_state *, uint8_t); -static tz_parser_result parser_put(tz_parser_state *, char); -static tz_parser_result tag_selection(tz_parser_state *, uint8_t); +static tz_parser_result push_frame(tz_parser_state *state, + tz_micheline_parser_step_kind step); +static tz_parser_result pop_frame(tz_parser_state *state); +static tz_parser_result begin_sized(tz_parser_state *state); +static tz_parser_result print_escaped(tz_parser_state *state, uint8_t b); +static tz_parser_result parser_put(tz_parser_state *state, char c); +static tz_parser_result tag_selection(tz_parser_state *state, uint8_t t); #ifdef TEZOS_DEBUG const char *const tz_micheline_parser_step_name[] diff --git a/app/src/parser/micheline_parser.h b/app/src/parser/micheline_parser.h index 9d5b28f6c..d331dcfeb 100644 --- a/app/src/parser/micheline_parser.h +++ b/app/src/parser/micheline_parser.h @@ -18,5 +18,5 @@ #include "parser_state.h" -void tz_micheline_parser_init(tz_parser_state *); -tz_parser_result tz_micheline_parser_step(tz_parser_state *); +void tz_micheline_parser_init(tz_parser_state *state); +tz_parser_result tz_micheline_parser_step(tz_parser_state *state); diff --git a/app/src/parser/num_parser.h b/app/src/parser/num_parser.h index a5182211a..d46bf3124 100644 --- a/app/src/parser/num_parser.h +++ b/app/src/parser/num_parser.h @@ -19,12 +19,14 @@ #include "parser_state.h" -void tz_parse_num_state_init(tz_num_parser_buffer *, tz_num_parser_regs *); -tz_parser_result tz_parse_num_step(tz_num_parser_buffer *, - tz_num_parser_regs *, uint8_t, bool); -tz_parser_result tz_parse_int_step(tz_num_parser_buffer *, - tz_num_parser_regs *, uint8_t); -tz_parser_result tz_parse_nat_step(tz_num_parser_buffer *, - tz_num_parser_regs *, uint8_t); - -bool tz_string_to_mutez(const char *, uint64_t *); +void tz_parse_num_state_init(tz_num_parser_buffer *buffers, + tz_num_parser_regs *regs); +tz_parser_result tz_parse_num_step(tz_num_parser_buffer *buffers, + tz_num_parser_regs *regs, uint8_t b, + bool natural); +tz_parser_result tz_parse_int_step(tz_num_parser_buffer *buffers, + tz_num_parser_regs *regs, uint8_t b); +tz_parser_result tz_parse_nat_step(tz_num_parser_buffer *buffers, + tz_num_parser_regs *regs, uint8_t b); + +bool tz_string_to_mutez(const char *in, uint64_t *out); diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 91c7d72f8..d239c0f2e 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -22,9 +22,9 @@ /* Prototypes */ -static tz_parser_result push_frame(tz_parser_state *, - tz_operation_parser_step_kind); -static tz_parser_result pop_frame(tz_parser_state *); +static tz_parser_result push_frame(tz_parser_state *state, + tz_operation_parser_step_kind step); +static tz_parser_result pop_frame(tz_parser_state *state); #ifdef TEZOS_DEBUG const char *const tz_operation_parser_step_name[] = {"OPTION", diff --git a/app/src/parser/operation_parser.h b/app/src/parser/operation_parser.h index fb5004eb1..25457a0a5 100644 --- a/app/src/parser/operation_parser.h +++ b/app/src/parser/operation_parser.h @@ -19,6 +19,7 @@ #include "parser_state.h" #define TZ_UNKNOWN_SIZE 0xFFFF -void tz_operation_parser_init(tz_parser_state *, uint16_t, bool); -void tz_operation_parser_set_size(tz_parser_state *, uint16_t); -tz_parser_result tz_operation_parser_step(tz_parser_state *); +void tz_operation_parser_init(tz_parser_state *state, uint16_t size, + bool skip_magic); +void tz_operation_parser_set_size(tz_parser_state *state, uint16_t size); +tz_parser_result tz_operation_parser_step(tz_parser_state *state); diff --git a/app/src/parser/parser_state.h b/app/src/parser/parser_state.h index 947a10fe0..ef1296a93 100644 --- a/app/src/parser/parser_state.h +++ b/app/src/parser/parser_state.h @@ -64,7 +64,7 @@ typedef enum { #define TZ_IS_BLOCKED(code) (code >= 100) #define TZ_IS_ERR(code) (code >= 200) -const char *tz_parser_result_name(tz_parser_result); +const char *tz_parser_result_name(tz_parser_result code); typedef struct { tz_parser_regs regs; @@ -87,19 +87,21 @@ typedef struct { tz_operation_state operation; } tz_parser_state; -void tz_parser_init(tz_parser_state *); -void tz_parser_flush(tz_parser_state *, char *, size_t); -void tz_parser_flush_up_to(tz_parser_state *, char *, size_t, size_t); -void tz_parser_refill(tz_parser_state *, uint8_t *, size_t); -void tz_parser_skip(tz_parser_state *); +void tz_parser_init(tz_parser_state *state); +void tz_parser_flush(tz_parser_state *state, char *obuf, size_t olen); +void tz_parser_flush_up_to(tz_parser_state *state, char *obuf, size_t olen, + size_t up_to); +void tz_parser_refill(tz_parser_state *state, uint8_t *ibuf, size_t ilen); +void tz_parser_skip(tz_parser_state *state); -tz_parser_result tz_parser_put(tz_parser_state *, char); -tz_parser_result tz_parser_read(tz_parser_state *, uint8_t *); -tz_parser_result tz_parser_peek(tz_parser_state *, uint8_t *); +tz_parser_result tz_parser_put(tz_parser_state *state, char c); +tz_parser_result tz_parser_read(tz_parser_state *state, uint8_t *out); +tz_parser_result tz_parser_peek(tz_parser_state *state, uint8_t *out); // error handling utils -tz_parser_result tz_parser_set_errno(tz_parser_state *, tz_parser_result); +tz_parser_result tz_parser_set_errno(tz_parser_state *state, + tz_parser_result code); #ifdef TEZOS_DEBUG #define tz_return(e) \ do { \ diff --git a/app/src/ui_home.c b/app/src/ui_home.c index 43c375386..0b3d60240 100644 --- a/app/src/ui_home.c +++ b/app/src/ui_home.c @@ -26,7 +26,7 @@ #ifdef HAVE_BAGL /* Prototypes */ -static void cb(tz_ui_cb_type_t); +static void cb(tz_ui_cb_type_t cb_type); static void cb(tz_ui_cb_type_t cb_type) diff --git a/app/src/ui_settings.c b/app/src/ui_settings.c index d23143fc6..da613ae9a 100644 --- a/app/src/ui_settings.c +++ b/app/src/ui_settings.c @@ -21,7 +21,7 @@ #include "globals.h" -static void cb(tz_ui_cb_type_t); +static void cb(tz_ui_cb_type_t cb_type); #define EXPERT_MODE 0x01 #define BLIND_SIGNING 0x02 diff --git a/app/src/ui_settings.h b/app/src/ui_settings.h index a40fdd26e..11cab28dd 100644 --- a/app/src/ui_settings.h +++ b/app/src/ui_settings.h @@ -7,4 +7,4 @@ #define SETTINGS_HOME_PAGE 0 #define SETTINGS_BLINDSIGNING_PAGE 1 -void ui_settings_init(int16_t); +void ui_settings_init(int16_t page); diff --git a/app/src/ui_stream.c b/app/src/ui_stream.c index c9b2e823c..7f1acbac4 100644 --- a/app/src/ui_stream.c +++ b/app/src/ui_stream.c @@ -25,8 +25,9 @@ #define UI_INIT_ARRAY_LEN (4 + TZ_SCREEN_LINES_11PX) #ifdef HAVE_BAGL -static unsigned int cb(unsigned int, unsigned int); -static const char *find_icon(tz_ui_icon_t); +static unsigned int cb(unsigned int button_mask, + unsigned int button_mask_counter); +static const char *find_icon(tz_ui_icon_t icon); static void pred(void); static void succ(void); static void change_screen_left(void); @@ -37,13 +38,13 @@ const bagl_icon_details_t C_icon_rien = {0, 0, 1, NULL, NULL}; #endif // HAVE_BAGL void drop_last_screen(void); -void push_str(const char *, size_t, char **); +void push_str(const char *text, size_t len, char **out); // Model #ifdef HAVE_BAGL void -tz_ui_stream_init(void (*cb)(uint8_t)) +tz_ui_stream_init(void (*cb)(tz_ui_cb_type_t cb_type)) { tz_ui_stream_t *s = &global.stream; diff --git a/app/src/ui_stream.h b/app/src/ui_stream.h index a599e5d40..5fdf8fb83 100644 --- a/app/src/ui_stream.h +++ b/app/src/ui_stream.h @@ -144,7 +144,7 @@ typedef struct { #endif // HAVE_NBGL typedef struct { - void (*cb)(tz_ui_cb_type_t); + void (*cb)(tz_ui_cb_type_t cb_type); tz_ui_stream_screen_t screens[TZ_UI_STREAM_HISTORY_SCREENS]; tz_ui_strings_t strings; int16_t current; @@ -161,18 +161,22 @@ typedef struct { #endif // HAVE_NBGL } tz_ui_stream_t; -void tz_ui_stream_init(void (*)(tz_ui_cb_type_t)); +void tz_ui_stream_init(void (*cb)(tz_ui_cb_type_t cb_type)); /* Push title & content to screen * * content may not always fit on screen entirely - returns total * bytes of content written. */ -size_t tz_ui_stream_push(tz_ui_cb_type_t, const char *, const char *, - tz_ui_layout_type_t, tz_ui_icon_t); -size_t tz_ui_stream_pushl(tz_ui_cb_type_t, const char *, const char *, - ssize_t, tz_ui_layout_type_t, tz_ui_icon_t); -size_t tz_ui_stream_push_all(tz_ui_cb_type_t, const char *, const char *, - tz_ui_layout_type_t, tz_ui_icon_t); +size_t tz_ui_stream_push(tz_ui_cb_type_t cb_type, const char *title, + const char *value, tz_ui_layout_type_t layout_type, + tz_ui_icon_t icon); +size_t tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, + const char *value, ssize_t max, + tz_ui_layout_type_t layout_type, tz_ui_icon_t icon); +size_t tz_ui_stream_push_all(tz_ui_cb_type_t cb_type, const char *title, + const char *value, + tz_ui_layout_type_t layout_type, + tz_ui_icon_t icon); void tz_ui_stream_close(void); void tz_ui_stream(void); void tz_ui_stream_start(void); diff --git a/app/src/ui_stream_nbgl.c b/app/src/ui_stream_nbgl.c index fc3f65c9a..804d8e966 100644 --- a/app/src/ui_stream_nbgl.c +++ b/app/src/ui_stream_nbgl.c @@ -24,13 +24,13 @@ #include "globals.h" #include "ui_stream.h" -bool tz_ui_nav_cb(uint8_t, nbgl_pageContent_t *); +bool tz_ui_nav_cb(uint8_t page, nbgl_pageContent_t *content); bool has_final_screen(void); void tz_ui_stream_start(void); void drop_last_screen(void); -void push_str(const char *, size_t, char **); -void switch_to_blindsigning(const char *, const char *); +void push_str(const char *text, size_t len, char **out); +void switch_to_blindsigning(const char *err_type, const char *err_code); void tz_cancel_ui(void) @@ -251,7 +251,7 @@ tz_ui_stream(void) } void -tz_ui_review_start() +tz_ui_review_start(void) { tz_ui_stream_t *s = &global.stream; @@ -264,7 +264,7 @@ tz_ui_review_start() } void -tz_ui_stream_init(void (*cb)(uint8_t)) +tz_ui_stream_init(void (*cb)(tz_ui_cb_type_t cb_type)) { tz_ui_stream_t *s = &global.stream; diff --git a/app/src/ui_strings.c b/app/src/ui_strings.c index 42a2fb805..5003f94c9 100644 --- a/app/src/ui_strings.c +++ b/app/src/ui_strings.c @@ -35,11 +35,11 @@ void ui_strings_drop(char **str); void ui_strings_drop_last(char **str); size_t ui_strings_fit_up_to(size_t len, char **write_start); void ui_strings_can_fit(size_t len, bool *can_fit); -bool ui_strings_is_empty(); -size_t ui_strings_append_last(const char *str, size_t, char **out); +bool ui_strings_is_empty(void); +size_t ui_strings_append_last(const char *str, size_t max, char **out); #ifdef TEZOS_DEBUG -void ui_strings_print(); +void ui_strings_print(void); #define PRINT_STRINGS ui_strings_print() #else #define PRINT_STRINGS @@ -315,7 +315,7 @@ ui_strings_append_last(const char *str, size_t max, char **out) } bool -ui_strings_is_empty() +ui_strings_is_empty(void) { tz_ui_strings_t *s = UI_STRINGS; return s->start == s->end && s->count == 0; /* check COUNT is zero! */ @@ -353,7 +353,7 @@ ui_strings_next(char **p) } void -ui_strings_print() +ui_strings_print(void) { tz_ui_strings_t *s = UI_STRINGS; diff --git a/app/src/ui_strings.h b/app/src/ui_strings.h index 0b4ef3ccc..6f309a44b 100644 --- a/app/src/ui_strings.h +++ b/app/src/ui_strings.h @@ -52,8 +52,8 @@ typedef struct { } tz_ui_strings_t; void ui_strings_init(void); -void ui_strings_push(const char *, size_t, char **); -void ui_strings_drop(char **); -void ui_strings_drop_last(char **); -void ui_strings_can_fit(size_t, bool *); -size_t ui_strings_append_last(const char *, size_t, char **); +void ui_strings_push(const char *str, size_t len, char **out); +void ui_strings_drop(char **str); +void ui_strings_drop_last(char **str); +void ui_strings_can_fit(size_t len, bool *can_fit); +size_t ui_strings_append_last(const char *str, size_t max, char **out); From a5fff5f2f2ce0226aadc235756c653f55627df9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 13 Feb 2024 11:20:05 +0100 Subject: [PATCH 44/78] Style: suffix unsigned type constants with 'u' [misra-c2012-7.2] A "u" or "U" suffix shall be applied to all integer constants that are represented in an unsigned type --- app/src/app_main.c | 2 +- app/src/exception.h | 50 +++++++++++++++---------------- app/src/parser/operation_parser.h | 2 +- app/src/ui_stream.h | 24 +++++++-------- app/src/utils.h | 4 +-- 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/app/src/app_main.c b/app/src/app_main.c index 6e3b58a88..147734fbb 100644 --- a/app/src/app_main.c +++ b/app/src/app_main.c @@ -118,7 +118,7 @@ app_main(void) command_t cmd; int rx; - app_stack_canary = 0xDEADBEEF; + app_stack_canary = 0xDEADBEEFu; FUNC_ENTER(("void")); print_memory_layout(); diff --git a/app/src/exception.h b/app/src/exception.h index e75bb9b5e..c52e70f3f 100644 --- a/app/src/exception.h +++ b/app/src/exception.h @@ -23,7 +23,7 @@ #include #include -#define SW_OK 0x9000 +#define SW_OK 0x9000u // Standard APDU error codes: // https://www.eftlab.com/knowledge-base/complete-list-of-apdu-responses @@ -31,23 +31,23 @@ typedef uint16_t tz_exc; -#define EXC_WRONG_PARAM 0x6B00 -#define EXC_WRONG_LENGTH 0x6C00 -#define EXC_INVALID_INS 0x6D00 -#define EXC_WRONG_LENGTH_FOR_INS 0x917E -#define EXC_REJECT 0x6985 -#define EXC_PARSE_ERROR 0x9405 -#define EXC_REFERENCED_DATA_NOT_FOUND 0x6A88 -#define EXC_WRONG_VALUES 0x6A80 -#define EXC_SECURITY 0x6982 -#define EXC_HID_REQUIRED 0x6983 -#define EXC_CLASS 0x6E00 -#define EXC_MEMORY_ERROR 0x9200 - -#define EXC_UNEXPECTED_STATE 0x9001 -#define EXC_UNEXPECTED_SIGN_STATE 0x9002 -#define EXC_UNKNOWN_CX_ERR 0x9003 -#define EXC_UNKNOWN 0x90FF +#define EXC_WRONG_PARAM 0x6B00u +#define EXC_WRONG_LENGTH 0x6C00u +#define EXC_INVALID_INS 0x6D00u +#define EXC_WRONG_LENGTH_FOR_INS 0x917Eu +#define EXC_REJECT 0x6985u +#define EXC_PARSE_ERROR 0x9405u +#define EXC_REFERENCED_DATA_NOT_FOUND 0x6A88u +#define EXC_WRONG_VALUES 0x6A80u +#define EXC_SECURITY 0x6982u +#define EXC_HID_REQUIRED 0x6983u +#define EXC_CLASS 0x6E00u +#define EXC_MEMORY_ERROR 0x9200u + +#define EXC_UNEXPECTED_STATE 0x9001u +#define EXC_UNEXPECTED_SIGN_STATE 0x9002u +#define EXC_UNKNOWN_CX_ERR 0x9003u +#define EXC_UNKNOWN 0x90FFu /* * In the handlers and the routines that they call, we define a set of @@ -81,13 +81,13 @@ typedef uint16_t tz_exc; * with this framework, reply with io_send_sw() and return TZ_DONE. */ -#define TZ_PREAMBLE(_args) \ - tz_exc _sw_ret_code = 0x0000; \ - cx_err_t error = CX_OK; \ - if (error != CX_OK) \ - goto bail; \ - if (0) \ - goto end; \ +#define TZ_PREAMBLE(_args) \ + tz_exc _sw_ret_code = 0x0000u; \ + cx_err_t error = CX_OK; \ + if (error != CX_OK) \ + goto bail; \ + if (0) \ + goto end; \ FUNC_ENTER(_args) #define TZ_POSTAMBLE \ diff --git a/app/src/parser/operation_parser.h b/app/src/parser/operation_parser.h index 25457a0a5..1777c3804 100644 --- a/app/src/parser/operation_parser.h +++ b/app/src/parser/operation_parser.h @@ -18,7 +18,7 @@ #include "parser_state.h" -#define TZ_UNKNOWN_SIZE 0xFFFF +#define TZ_UNKNOWN_SIZE 0xFFFFu void tz_operation_parser_init(tz_parser_state *state, uint16_t size, bool skip_magic); void tz_operation_parser_set_size(tz_parser_state *state, uint16_t size); diff --git a/app/src/ui_stream.h b/app/src/ui_stream.h index 5fdf8fb83..c320c26e7 100644 --- a/app/src/ui_stream.h +++ b/app/src/ui_stream.h @@ -78,18 +78,18 @@ */ typedef uint8_t tz_ui_cb_type_t; -#define TZ_UI_STREAM_CB_NOCB 0x00 -#define TZ_UI_STREAM_CB_BLINDSIGN 0x0e -#define TZ_UI_STREAM_CB_REFILL 0xef -#define TZ_UI_STREAM_CB_MAINMASK 0xf0 -#define TZ_UI_STREAM_CB_EXPERT_MODE_FIELD 0xfa -#define TZ_UI_STREAM_CB_EXPERT_MODE_ENABLE 0xfb -#define TZ_UI_STREAM_CB_BLINDSIGN_REJECT 0xfc -#define TZ_UI_STREAM_CB_CANCEL 0xfd -#define TZ_UI_STREAM_CB_REJECT 0xfe -#define TZ_UI_STREAM_CB_ACCEPT 0xff - -#define TZ_UI_LAYOUT_HOME_MASK 0x80 +#define TZ_UI_STREAM_CB_NOCB 0x00u +#define TZ_UI_STREAM_CB_BLINDSIGN 0x0Eu +#define TZ_UI_STREAM_CB_REFILL 0xEFu +#define TZ_UI_STREAM_CB_MAINMASK 0xF0u +#define TZ_UI_STREAM_CB_EXPERT_MODE_FIELD 0xFAu +#define TZ_UI_STREAM_CB_EXPERT_MODE_ENABLE 0xFBu +#define TZ_UI_STREAM_CB_BLINDSIGN_REJECT 0xFCu +#define TZ_UI_STREAM_CB_CANCEL 0xFDu +#define TZ_UI_STREAM_CB_REJECT 0xFEu +#define TZ_UI_STREAM_CB_ACCEPT 0xFFu + +#define TZ_UI_LAYOUT_HOME_MASK 0x80u /** * Layout type: * BNP - refers to Bold Title, normal text/picture below the title. diff --git a/app/src/utils.h b/app/src/utils.h index e479d38f9..bab8b4cde 100644 --- a/app/src/utils.h +++ b/app/src/utils.h @@ -21,13 +21,13 @@ PRINTF x; \ PRINTF(") at %s:%u\n", __FILE__, __LINE__); \ PRINTF("[DEBUG] stack = 0x%p (%s)\n", &_tmp, __func__); \ - if (app_stack_canary != 0xDEADBEEF) \ + if (app_stack_canary != 0xDEADBEEFu) \ PRINTF("[DEBUG] Stack (0x%p) has been smashed\n", \ &app_stack_canary); \ } while (0) #define FUNC_LEAVE() \ do { \ - if (app_stack_canary != 0xDEADBEEF) \ + if (app_stack_canary != 0xDEADBEEFu) \ PRINTF( \ "[DEBUG] Stack (0x%p) has been smashed " \ "(leaving function)\n", \ From bdd9611e06d909c8986a8797bcdfbb8479acba4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 13 Feb 2024 11:30:19 +0100 Subject: [PATCH 45/78] Style: make tz_string_to_mutez clearer [misra-c2012-13.4] The result of an assignment operator should not be used --- app/src/parser/num_parser.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/parser/num_parser.c b/app/src/parser/num_parser.c index 944dd15d6..8538cc825 100644 --- a/app/src/parser/num_parser.c +++ b/app/src/parser/num_parser.c @@ -80,20 +80,18 @@ tz_parse_nat_step(tz_num_parser_buffer *buffers, tz_num_parser_regs *regs, bool tz_string_to_mutez(const char *str, uint64_t *res) { - int c; - if (str == NULL || res == NULL) { PRINTF("[ERROR] Null parameter\n"); return false; } *res = 0; - while ((c = *str++) != '\0') { - if (c < '0' || c > '9') { - PRINTF("[ERROR] Non-digit character: %c\n", c); + for (int i = 0; str[i] != '\0'; i++) { + if (str[i] < '0' || str[i] > '9') { + PRINTF("[ERROR] Non-digit character: %c\n", str[i]); return false; } - *res = *res * 10 + (c - '0'); + *res = *res * 10 + (str[i] - '0'); } return true; From 35da952cd77218591ce713a1112450e80559be1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 13 Feb 2024 12:09:19 +0100 Subject: [PATCH 46/78] Style: avoid one-line `if`, `while`, `for`, ... [misra-c2012-15.6] The body of an iteration-statement or a selection-statement shall be a compound-statement --- .clang-format | 3 +- app/src/apdu_pubkey.c | 5 +- app/src/apdu_sign.c | 30 +++++--- app/src/app_main.c | 3 +- app/src/exception.h | 6 +- app/src/handle_swap.c | 6 +- app/src/keys.c | 12 ++- app/src/parser/formatting.c | 45 ++++++++---- app/src/parser/micheline_parser.c | 30 +++++--- app/src/parser/num_parser.c | 3 +- app/src/parser/operation_parser.c | 85 +++++++++++++++------- app/src/parser/parser_state.c | 9 ++- app/src/parser/parser_state.h | 3 +- app/src/ui_home_nbgl.c | 4 +- app/src/ui_settings.c | 6 +- app/src/ui_stream.c | 40 ++++++---- app/src/ui_stream_nbgl.c | 27 ++++--- app/src/ui_strings.c | 17 +++-- app/src/utils.h | 6 +- tests/unit/ctest/tests_parser.c | 8 +- tests/unit/parser/micheline_cparse_stubs.c | 13 ++-- 21 files changed, 237 insertions(+), 124 deletions(-) diff --git a/.clang-format b/.clang-format index 8efd70ea1..a8b445bf5 100644 --- a/.clang-format +++ b/.clang-format @@ -5,7 +5,7 @@ IndentWidth: 4 ColumnLimit: 78 UseTab: Never IndentCaseLabels: false -InsertBraces: false +InsertBraces: true PointerAlignment: Right AlwaysBreakAfterReturnType: TopLevelDefinitions @@ -36,4 +36,5 @@ AlignArrayOfStructures: Left SortIncludes: Never SpaceAfterCStyleCast: false AllowShortEnumsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: Never ... diff --git a/app/src/apdu_pubkey.c b/app/src/apdu_pubkey.c index 140d943f9..7fa5d4e89 100644 --- a/app/src/apdu_pubkey.c +++ b/app/src/apdu_pubkey.c @@ -191,10 +191,11 @@ handle_apdu_get_public_key(command_t *cmd) TZ_LIB_CHECK(derive_pk(&global.keys.pubkey, global.path_with_curve.derivation_type, &global.path_with_curve.bip32_path)); - if (prompt) + if (prompt) { prompt_address(); - else + } else { provide_pubkey(); + } TZ_POSTAMBLE; } diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index cd54f63cc..0a8bb2f2f 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -116,8 +116,9 @@ sign_packet(void) bufs[0].size, sig, &bufs[1].size)); /* If we aren't returning the hash, zero its buffer... */ - if (!global.keys.apdu.sign.return_hash) + if (!global.keys.apdu.sign.return_hash) { bufs[0].size = 0; + } io_send_response_buffers(bufs, 2, SW_OK); global.step = ST_IDLE; @@ -306,8 +307,9 @@ refill(void) tz_parser_state *st = &global.keys.apdu.sign.u.clear.parser_state; TZ_PREAMBLE(("void")); - while (!TZ_IS_BLOCKED(tz_operation_parser_step(st))) - ; + while (!TZ_IS_BLOCKED(tz_operation_parser_step(st))) { + // Loop while the result is successful and not blocking + } PRINTF("[DEBUG] refill(errno: %s)\n", tz_parser_result_name(st->errno)); // clang-format off switch (st->errno) { @@ -399,8 +401,9 @@ bs_push_next(void) *step = BLINDSIGN_ST_HASH; if (tz_format_base58(FINAL_HASH, sizeof(FINAL_HASH), obuf, - sizeof(obuf))) + sizeof(obuf))) { TZ_FAIL(EXC_UNKNOWN); + } tz_ui_stream_push_all(TZ_UI_STREAM_CB_NOCB, "Sign Hash", obuf, TZ_UI_LAYOUT_BNP, TZ_UI_ICON_NONE); @@ -530,11 +533,13 @@ handle_data_apdu(command_t *cmd) cmd->lc, global.keys.apdu.hash.final_hash, sizeof(global.keys.apdu.hash.final_hash))); - if (PKT_IS_LAST(cmd)) + if (PKT_IS_LAST(cmd)) { global.keys.apdu.sign.received_last_msg = true; + } - if (!global.keys.apdu.sign.tag) + if (!global.keys.apdu.sign.tag) { global.keys.apdu.sign.tag = cmd->data[0]; + } // clang-format off switch (global.step) { @@ -558,16 +563,18 @@ handle_data_apdu_clear(command_t *cmd) global.keys.apdu.sign.u.clear.received_msg = true; TZ_ASSERT_NOTNULL(cmd); - if (st->regs.ilen > 0) + if (st->regs.ilen > 0) { // we asked for more input but did not consume what we already had TZ_FAIL(EXC_UNEXPECTED_SIGN_STATE); + } global.keys.apdu.sign.u.clear.total_length += cmd->lc; tz_parser_refill(st, cmd->data, cmd->lc); - if (PKT_IS_LAST(cmd)) + if (PKT_IS_LAST(cmd)) { tz_operation_parser_set_size( st, global.keys.apdu.sign.u.clear.total_length); + } if (global.step == ST_SWAP_SIGN) { do { TZ_CHECK(refill()); @@ -575,8 +582,9 @@ handle_data_apdu_clear(command_t *cmd) } else { TZ_CHECK(refill()); if (global.keys.apdu.sign.step == SIGN_ST_WAIT_USER_INPUT - && global.step != ST_SWAP_SIGN) + && global.step != ST_SWAP_SIGN) { tz_ui_stream(); + } } TZ_POSTAMBLE; } @@ -706,8 +714,10 @@ handle_data_apdu_blind(void) tz_ui_stream(); #elif HAVE_NBGL char obuf[TZ_BASE58_BUFFER_SIZE(sizeof(FINAL_HASH))]; - if (tz_format_base58(FINAL_HASH, sizeof(FINAL_HASH), obuf, sizeof(obuf))) + if (tz_format_base58(FINAL_HASH, sizeof(FINAL_HASH), obuf, + sizeof(obuf))) { TZ_FAIL(EXC_UNKNOWN); + } transaction_type = type; STRLCPY(hash, obuf); diff --git a/app/src/app_main.c b/app/src/app_main.c index 147734fbb..5d163733f 100644 --- a/app/src/app_main.c +++ b/app/src/app_main.c @@ -76,8 +76,9 @@ dispatch(command_t *cmd) tz_handler_t f; TZ_PREAMBLE(("cmd=0x%p {cla=0x02x ins=%u ...}", cmd, cmd->cla, cmd->ins)); - if (cmd->cla != CLA) + if (cmd->cla != CLA) { TZ_FAIL(EXC_CLASS); + } if (tz_ui_stream_get_cb_type() == SCREEN_QUIT) { PRINTF("[ERROR] received instruction whilst on Quit screen\n"); diff --git a/app/src/exception.h b/app/src/exception.h index c52e70f3f..6e4cb70a8 100644 --- a/app/src/exception.h +++ b/app/src/exception.h @@ -84,10 +84,12 @@ typedef uint16_t tz_exc; #define TZ_PREAMBLE(_args) \ tz_exc _sw_ret_code = 0x0000u; \ cx_err_t error = CX_OK; \ - if (error != CX_OK) \ + if (error != CX_OK) { \ goto bail; \ - if (0) \ + } \ + if (0) { \ goto end; \ + } \ FUNC_ENTER(_args) #define TZ_POSTAMBLE \ diff --git a/app/src/handle_swap.c b/app/src/handle_swap.c index f4995cbd5..21ecff369 100644 --- a/app/src/handle_swap.c +++ b/app/src/handle_swap.c @@ -189,11 +189,13 @@ swap_check_validity(void) char dstaddr[ADDRESS_MAX_SIZE]; TZ_PREAMBLE(("")); - if (!G_called_from_swap) + if (!G_called_from_swap) { TZ_SUCCEED(); + } - if (G_swap_response_ready) + if (G_swap_response_ready) { os_sched_exit(-1); + } G_swap_response_ready = true; PRINTF("[DEBUG] batch_index = %u, nb_reveal=%d, tag=%d\n", diff --git a/app/src/keys.c b/app/src/keys.c index a800aa227..d5a7d5079 100644 --- a/app/src/keys.c +++ b/app/src/keys.c @@ -79,8 +79,9 @@ derive_pk(cx_ecfp_public_key_t *public_key, derivation_type_t derivation_type, public_key->curve = derivation_type_to_cx_curve(derivation_type); int derivation_mode = HDW_NORMAL; - if (derivation_type == DERIVATION_TYPE_ED25519) + if (derivation_type == DERIVATION_TYPE_ED25519) { derivation_mode = HDW_ED25519_SLIP10; + } CX_CHECK(bip32_derive_with_seed_get_pubkey_256( derivation_mode, public_key->curve, bip32_path->components, @@ -114,8 +115,9 @@ derive_pkh(cx_ecfp_public_key_t *pubkey, derivation_type_t derivation_type, } // clang-format on - if (tz_format_pkh(hash, 21, buffer, len)) + if (tz_format_pkh(hash, 21, buffer, len)) { TZ_FAIL(EXC_UNKNOWN); + } TZ_LIB_POSTAMBLE; } @@ -203,8 +205,9 @@ sign(derivation_type_t derivation_type, const bip32_path_t *path, case DERIVATION_TYPE_BIP32_ED25519: case DERIVATION_TYPE_ED25519: derivation_mode = HDW_NORMAL; - if (derivation_type == DERIVATION_TYPE_ED25519) + if (derivation_type == DERIVATION_TYPE_ED25519) { derivation_mode = HDW_ED25519_SLIP10; + } CX_CHECK(bip32_derive_with_seed_eddsa_sign_hash_256( derivation_mode, curve, path->components, path->length, CX_SHA512, hash, hashlen, sig, siglen, NULL, 0)); @@ -214,8 +217,9 @@ sign(derivation_type_t derivation_type, const bip32_path_t *path, CX_CHECK(bip32_derive_ecdsa_sign_hash_256( curve, path->components, path->length, CX_RND_RFC6979 | CX_LAST, CX_SHA256, hash, hashlen, sig, siglen, &info)); - if (info & CX_ECCINFO_PARITY_ODD) + if (info & CX_ECCINFO_PARITY_ODD) { sig[0] |= 0x01; + } break; default: TZ_FAIL(EXC_WRONG_VALUES); diff --git a/app/src/parser/formatting.c b/app/src/parser/formatting.c index e0ebe4650..0b51ff45d 100644 --- a/app/src/parser/formatting.c +++ b/app/src/parser/formatting.c @@ -184,8 +184,9 @@ const char *const tz_michelson_op_names_ordered[TZ_LAST_MICHELSON_OPCODE + 1] const char * tz_michelson_op_name(uint8_t op_code) { - if (op_code > TZ_LAST_MICHELSON_OPCODE) + if (op_code > TZ_LAST_MICHELSON_OPCODE) { return NULL; + } return PIC(tz_michelson_op_names_ordered[op_code]); } @@ -216,8 +217,9 @@ tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen) memset(obuf, 0, obuf_len); - while (zcount < l && !n[zcount]) + while (zcount < l && !n[zcount]) { ++zcount; + } for (i = zcount, high = obuf_len - 1; i < l; ++i, high = j) { carry = n[i]; @@ -228,13 +230,16 @@ tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen) } } - if (zcount) + if (zcount) { memset(obuf, '1', zcount); + } - for (j = 0; !obuf[j]; ++j) - ; - for (i = 0; j < obuf_len; ++i, ++j) + for (j = 0; !obuf[j]; ++j) { + // Find the last index of obuf + } + for (i = 0; j < obuf_len; ++i, ++j) { obuf[i] = tz_b58digits_ordered[(unsigned)obuf[j]]; + } obuf[i] = '\0'; return 0; } @@ -253,8 +258,9 @@ tz_format_decimal(const uint8_t *n, size_t l, char *obuf, size_t olen) memset(obuf, 0, obuf_len); - while (zcount < l && !n[l - zcount - 1]) + while (zcount < l && !n[l - zcount - 1]) { ++zcount; + } if (zcount == l) { obuf[0] = '0'; @@ -270,10 +276,12 @@ tz_format_decimal(const uint8_t *n, size_t l, char *obuf, size_t olen) } } - for (j = 0; !obuf[j]; ++j) - ; - for (i = 0; j < obuf_len; ++i, ++j) + for (j = 0; !obuf[j]; ++j) { + // Find the last index of obuf + } + for (i = 0; j < obuf_len; ++i, ++j) { obuf[i] = '0' + obuf[j]; + } obuf[i] = '\0'; return 0; } @@ -327,8 +335,9 @@ cx_hash_sha256(uint8_t *data, size_t size, uint8_t *out, size_t size_out) // clang-format off #define B58_PREFIX(_s, _p, _pl, _dl) do { \ if (!strcmp((_s), s)) { \ - if ((_dl) != dl) \ - return 1; \ + if ((_dl) != dl) { \ + return 1; \ + } \ (*p) = (const uint8_t *)(_p); \ (*pl) = (_pl); \ return 0; \ @@ -385,8 +394,9 @@ tz_format_base58check(const char *sprefix, const uint8_t *data, size_t size, const uint8_t *prefix = NULL; size_t prefix_len; - if (find_prefix(sprefix, &prefix, &prefix_len, size)) + if (find_prefix(sprefix, &prefix, &prefix_len, size)) { return 1; + } /* In order to avoid vla, we have a maximum buffer size of 64 */ uint8_t prepared[64]; @@ -412,8 +422,9 @@ tz_format_pkh(const uint8_t *data, size_t size, char *obuf, size_t olen) { const char *prefix; - if (size < 1) + if (size < 1) { return 1; + } // clang-format off switch (data[0]) { case 0: prefix = "tz1"; break; @@ -432,8 +443,9 @@ tz_format_pk(const uint8_t *data, size_t size, char *obuf, size_t olen) { const char *prefix; - if (size < 1) + if (size < 1) { return 1; + } // clang-format off switch (data[0]) { case 0: prefix = "edpk"; break; @@ -466,8 +478,9 @@ tz_format_address(const uint8_t *data, size_t size, char *obuf, size_t olen) { const char *prefix; - if (size < 1) + if (size < 1) { return 1; + } // clang-format off switch (data[0]) { case 1: prefix = "KT1"; break; diff --git a/app/src/parser/micheline_parser.c b/app/src/parser/micheline_parser.c index 2b510745d..4644b0a04 100644 --- a/app/src/parser/micheline_parser.c +++ b/app/src/parser/micheline_parser.c @@ -54,8 +54,9 @@ push_frame(tz_parser_state *state, tz_micheline_parser_step_kind step) { tz_micheline_state *m = &state->micheline; - if (m->frame >= &m->stack[TZ_MICHELINE_STACK_DEPTH - 1]) + if (m->frame >= &m->stack[TZ_MICHELINE_STACK_DEPTH - 1]) { tz_raise(TOO_DEEP); + } m->frame++; m->frame->step = step; tz_continue; @@ -79,8 +80,9 @@ begin_sized(tz_parser_state *state) { tz_micheline_state *m = &state->micheline; - if (push_frame(state, TZ_MICHELINE_STEP_SIZE)) + if (push_frame(state, TZ_MICHELINE_STEP_SIZE)) { tz_reraise; + } m->frame->step_size.size = 0; m->frame->stop = state->ofs + 4; tz_continue; @@ -129,8 +131,9 @@ tag_selection(tz_parser_state *state, uint8_t t) case TZ_MICHELINE_TAG_INT: m->frame->step = TZ_MICHELINE_STEP_INT; tz_parse_num_state_init(&state->buffers.num, &m->frame->step_int); - for (int i = 0; i < TZ_NUM_BUFFER_SIZE / 8; i++) + for (int i = 0; i < TZ_NUM_BUFFER_SIZE / 8; i++) { state->buffers.num.bytes[i] = 0; + } break; case TZ_MICHELINE_TAG_SEQ: m->frame->step = TZ_MICHELINE_STEP_SEQ; @@ -189,11 +192,13 @@ tz_micheline_parser_step(tz_parser_state *state) uint8_t t; // cannot restart after error - if (TZ_IS_ERR(state->errno)) + if (TZ_IS_ERR(state->errno)) { tz_reraise; + } // nothing else to do - if (state->micheline.frame == NULL) + if (state->micheline.frame == NULL) { tz_stop(DONE); + } PRINTF( "[DEBUG] micheline(frame: %d, offset:%d/%d, step: %s, errno: %s)\n", @@ -225,8 +230,9 @@ tz_micheline_parser_step(tz_parser_state *state) break; case TZ_MICHELINE_STEP_SIZE: tz_must(tz_parser_read(state, &b)); - if (m->frame->step_size.size > 255) + if (m->frame->step_size.size > 255) { tz_raise(TOO_LARGE); // enforce 16-bit restriction + } m->frame->step_size.size = m->frame->step_size.size << 8 | b; if (m->frame->stop == state->ofs) { m->frame[-1].stop = state->ofs + m->frame->step_size.size; @@ -321,8 +327,9 @@ tz_micheline_parser_step(tz_parser_state *state) break; case TZ_MICHELINE_STEP_PRIM_OP: tz_must(tz_parser_read(state, &op)); - if (tz_michelson_op_name(op) == NULL) + if (tz_michelson_op_name(op) == NULL) { tz_raise(INVALID_OP); + } m->frame->step = TZ_MICHELINE_STEP_PRIM_NAME; m->frame->step_prim.op = op; break; @@ -339,8 +346,9 @@ tz_micheline_parser_step(tz_parser_state *state) m->frame->step_prim.ofs++; } else { m->frame->step = TZ_MICHELINE_STEP_PRIM; - if (m->frame->step_prim.nargs == 3) + if (m->frame->step_prim.nargs == 3) { tz_must(begin_sized(state)); + } } break; case TZ_MICHELINE_STEP_PRIM: @@ -353,16 +361,18 @@ tz_micheline_parser_step(tz_parser_state *state) m->frame->step_annot.first = true; tz_must(begin_sized(state)); } else { - if (m->frame->step_prim.wrap) + if (m->frame->step_prim.wrap) { tz_must(parser_put(state, ')')); + } tz_must(pop_frame(state)); } } else if (!m->frame->step_prim.spc) { tz_must(parser_put(state, ' ')); m->frame->step_prim.spc = true; } else { - if (m->frame->step_prim.nargs < 3) + if (m->frame->step_prim.nargs < 3) { m->frame->step_prim.nargs--; + } m->frame->step_prim.spc = false; tz_must(push_frame(state, TZ_MICHELINE_STEP_TAG)); } diff --git a/app/src/parser/num_parser.c b/app/src/parser/num_parser.c index 8538cc825..9f307d3c7 100644 --- a/app/src/parser/num_parser.c +++ b/app/src/parser/num_parser.c @@ -48,8 +48,9 @@ tz_parse_num_step(tz_num_parser_buffer *buffers, tz_num_parser_regs *regs, buffers->bytes[lo_idx] |= lo; if (hi_idx >= TZ_NUM_BUFFER_SIZE / 8) { // accept and dismiss a few trailing zeroes - if (hi || cont) + if (hi || cont) { return TZ_ERR_TOO_LARGE; + } regs->size = TZ_NUM_BUFFER_SIZE; } else { buffers->bytes[hi_idx] = hi; diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index d239c0f2e..5b7cec30a 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -223,8 +223,9 @@ push_frame(tz_parser_state *state, tz_operation_parser_step_kind step) { tz_operation_state *op = &state->operation; - if (op->frame >= &op->stack[TZ_OPERATION_STACK_DEPTH - 1]) + if (op->frame >= &op->stack[TZ_OPERATION_STACK_DEPTH - 1]) { tz_raise(TOO_DEEP); + } op->frame++; op->frame->step = step; tz_continue; @@ -329,8 +330,9 @@ tz_step_option(tz_parser_state *state) tz_must(tz_parser_read(state, &present)); if (!present) { if (op->frame->step_option.display_none) { - if (op->frame->step_option.field->skip) + if (op->frame->step_option.field->skip) { tz_raise(INVALID_STATE); + } op->frame->step = TZ_OPERATION_STEP_PRINT; op->frame->step_print.str = (char *)unset_message; } else { @@ -354,8 +356,9 @@ tz_step_tuple(tz_parser_state *state) &op->frame->step_tuple.fields[op->frame->step_tuple.field_index]); // Remaining content from previous section - display this first. - if (regs->oofs > 0) + if (regs->oofs > 0) { tz_stop(IM_FULL); + } if (field->kind == TZ_OPERATION_FIELD_END) { // is_field_complex is reset after reaching the last field @@ -411,8 +414,9 @@ tz_step_size(tz_parser_state *state) tz_operation_state *op = &state->operation; uint8_t b; tz_must(tz_parser_read(state, &b)); - if (op->frame->step_size.size > 255) + if (op->frame->step_size.size > 255) { tz_raise(TOO_LARGE); // enforce 16-bit restriction + } op->frame->step_size.size = op->frame->step_size.size << 8 | b; op->frame->step_size.size_len--; if (op->frame->step_size.size_len <= 0) { @@ -433,8 +437,9 @@ tz_step_tag(tz_parser_state *state) tz_must(tz_parser_read(state, &t)); #ifdef HAVE_SWAP op->last_tag = t; - if (t == TZ_OPERATION_TAG_REVEAL) + if (t == TZ_OPERATION_TAG_REVEAL) { op->nb_reveal++; + } #endif // HAVE_SWAP for (d = tz_operation_descriptors; d->tag != TZ_OPERATION_TAG_END; d++) { if (d->tag == t) { @@ -466,13 +471,15 @@ tz_step_read_micheline(tz_parser_state *state) } tz_micheline_parser_step(state); if (state->errno == TZ_BLO_DONE) { - if (op->frame->stop != 0 && state->ofs != op->frame->stop) + if (op->frame->stop != 0 && state->ofs != op->frame->stop) { tz_raise(TOO_LARGE); + } tz_must(pop_frame(state)); - if (regs->oofs > 0) + if (regs->oofs > 0) { tz_stop(IM_FULL); - else + } else { tz_continue; + } } tz_reraise; } @@ -491,8 +498,9 @@ tz_step_read_num(tz_parser_state *state) if (op->frame->step_read_num.state.stop) { #ifdef HAVE_SWAP uint64_t value; - if (!tz_string_to_mutez(state->buffers.num.decimal, &value)) + if (!tz_string_to_mutez(state->buffers.num.decimal, &value)) { tz_raise(INVALID_DATA); + } switch (op->frame->step_read_num.kind) { case TZ_OPERATION_FIELD_AMOUNT: op->last_amount = value; @@ -517,32 +525,38 @@ tz_step_read_num(tz_parser_state *state) case TZ_OPERATION_FIELD_FEE: case TZ_OPERATION_FIELD_AMOUNT: { int len = 0; - while (str[len]) + while (str[len]) { len++; - if (len == 1 && str[0] == 0) + } + if (len == 1 && str[0] == 0) { // just 0 goto add_currency; + } if (len < 7) { // less than one tez, pad left up to the '0.' int j; int pad = 7 - len; - for (j = len; j >= 0; j--) + for (j = len; j >= 0; j--) { str[j + pad] = str[j]; - for (j = 0; j < pad; j++) + } + for (j = 0; j < pad; j++) { str[j] = '0'; + } len = 7; } int no_decimals = 1; - for (int i = 0; i < 6; i++) + for (int i = 0; i < 6; i++) { no_decimals &= (str[len - 1 - i] == '0'); + } if (no_decimals) { // integral value, don't include the decimal part (no '.'_ str[len - 6] = 0; len -= 6; } else { // more than one tez, add the '.' - for (int i = 0; i < 6; i++) + for (int i = 0; i < 6; i++) { str[len - i] = str[len - i - 1]; + } str[len - 6] = '.'; len++; str[len] = 0; @@ -610,42 +624,52 @@ tz_step_read_bytes(tz_parser_state *state) memcpy(op->source, CAPTURE, 22); __attribute__((fallthrough)); case TZ_OPERATION_FIELD_PKH: - if (tz_format_pkh(CAPTURE, 21, (char *)CAPTURE, sizeof(CAPTURE))) + if (tz_format_pkh(CAPTURE, 21, (char *)CAPTURE, + sizeof(CAPTURE))) { tz_raise(INVALID_TAG); + } break; case TZ_OPERATION_FIELD_PK: if (tz_format_pk(CAPTURE, op->frame->step_read_bytes.len, - (char *)CAPTURE, sizeof(CAPTURE))) + (char *)CAPTURE, sizeof(CAPTURE))) { tz_raise(INVALID_TAG); + } break; case TZ_OPERATION_FIELD_SR: if (tz_format_base58check("sr1", CAPTURE, 20, (char *)CAPTURE, - sizeof(CAPTURE))) + sizeof(CAPTURE))) { tz_raise(INVALID_TAG); + } break; case TZ_OPERATION_FIELD_SRC: if (tz_format_base58check("src1", CAPTURE, 32, (char *)CAPTURE, - sizeof(CAPTURE))) + sizeof(CAPTURE))) { tz_raise(INVALID_TAG); + } break; case TZ_OPERATION_FIELD_PROTO: if (tz_format_base58check("proto", CAPTURE, 32, (char *)CAPTURE, - sizeof(CAPTURE))) + sizeof(CAPTURE))) { tz_raise(INVALID_TAG); + } break; case TZ_OPERATION_FIELD_DESTINATION: memcpy(op->destination, CAPTURE, 22); if (tz_format_address(CAPTURE, 22, (char *)CAPTURE, - sizeof(CAPTURE))) + sizeof(CAPTURE))) { tz_raise(INVALID_TAG); + } break; case TZ_OPERATION_FIELD_OPH: - if (tz_format_oph(CAPTURE, 32, (char *)CAPTURE, sizeof(CAPTURE))) + if (tz_format_oph(CAPTURE, 32, (char *)CAPTURE, + sizeof(CAPTURE))) { tz_raise(INVALID_TAG); + } break; case TZ_OPERATION_FIELD_BH: - if (tz_format_bh(CAPTURE, 32, (char *)CAPTURE, sizeof(CAPTURE))) + if (tz_format_bh(CAPTURE, 32, (char *)CAPTURE, sizeof(CAPTURE))) { tz_raise(INVALID_TAG); + } break; default: tz_raise(INVALID_STATE); @@ -995,8 +1019,9 @@ tz_step_read_soru_messages(tz_parser_state *state) uint16_t index = op->frame->step_read_list.index; // Remaining content from previous message - display this first. - if (regs->oofs > 0) + if (regs->oofs > 0) { tz_stop(IM_FULL); + } if (op->frame->stop == state->ofs) { tz_must(pop_frame(state)); @@ -1071,8 +1096,9 @@ tz_step_read_protos(tz_parser_state *state) uint16_t index = op->frame->step_read_list.index; // Remaining content from previous proto - display this first. - if (regs->oofs > 0) + if (regs->oofs > 0) { tz_stop(IM_FULL); + } if (op->frame->stop == state->ofs) { tz_must(pop_frame(state)); @@ -1109,8 +1135,9 @@ tz_step_print(tz_parser_state *state, bool partial) op->frame->step_print.str++; } else { tz_must(pop_frame(state)); - if (!partial) + if (!partial) { tz_stop(IM_FULL); + } } tz_continue; } @@ -1121,12 +1148,14 @@ tz_operation_parser_step(tz_parser_state *state) tz_operation_state *op = &state->operation; // cannot restart after error - if (TZ_IS_ERR(state->errno)) + if (TZ_IS_ERR(state->errno)) { tz_reraise; + } // nothing else to do - if (op->frame == NULL) + if (op->frame == NULL) { tz_stop(DONE); + } PRINTF( "[DEBUG] operation(frame: %d, offset:%d/%d, ilen: %d, olen: %d, " diff --git a/app/src/parser/parser_state.c b/app/src/parser/parser_state.c index ed415d913..33ff70f6f 100644 --- a/app/src/parser/parser_state.c +++ b/app/src/parser/parser_state.c @@ -104,8 +104,9 @@ tz_parser_put(tz_parser_state *state, char c) { tz_parser_regs *regs = &state->regs; - if (regs->olen < 1) + if (regs->olen < 1) { tz_stop(IM_FULL); + } regs->obuf[regs->oofs] = c; regs->oofs++; regs->olen--; @@ -117,8 +118,9 @@ tz_parser_read(tz_parser_state *state, uint8_t *r) { tz_parser_regs *regs = &state->regs; - if (regs->ilen < 1) + if (regs->ilen < 1) { tz_stop(FEED_ME); + } state->ofs++; regs->ilen--; *r = regs->ibuf[regs->iofs++]; @@ -130,8 +132,9 @@ tz_parser_peek(tz_parser_state *state, uint8_t *r) { tz_parser_regs *regs = &state->regs; - if (regs->ilen < 1) + if (regs->ilen < 1) { tz_stop(FEED_ME); + } *r = regs->ibuf[regs->iofs]; tz_continue; } diff --git a/app/src/parser/parser_state.h b/app/src/parser/parser_state.h index ef1296a93..942e7b234 100644 --- a/app/src/parser/parser_state.h +++ b/app/src/parser/parser_state.h @@ -121,8 +121,9 @@ tz_parser_result tz_parser_set_errno(tz_parser_state *state, #define tz_must(cond) \ do { \ tz_parser_result _err = cond; \ - if (_err) \ + if (_err) { \ tz_return(_err); \ + } \ } while (0) #define tz_continue tz_return(TZ_CONTINUE) #define tz_break tz_return(TZ_BREAK) diff --git a/app/src/ui_home_nbgl.c b/app/src/ui_home_nbgl.c index d41720faa..efdef2532 100644 --- a/app/src/ui_home_nbgl.c +++ b/app/src/ui_home_nbgl.c @@ -81,9 +81,9 @@ navigation_cb_wallet(__attribute__((unused)) uint8_t page, static void controls_callback(int token, __attribute__((unused)) uint8_t index) { - if (token == BLIND_SIGNING_TOKEN) + if (token == BLIND_SIGNING_TOKEN) { toggle_blindsigning(); - else if (token == EXPERT_MODE_TOKEN) { + } else if (token == EXPERT_MODE_TOKEN) { toggle_expert_mode(); } } diff --git a/app/src/ui_settings.c b/app/src/ui_settings.c index da613ae9a..031d08a53 100644 --- a/app/src/ui_settings.c +++ b/app/src/ui_settings.c @@ -54,11 +54,13 @@ ui_settings_init(int16_t page) FUNC_ENTER(("void")); - if (N_settings.blindsigning) + if (N_settings.blindsigning) { bsigning = "ENABLED"; + } - if (N_settings.expert_mode) + if (N_settings.expert_mode) { exp_mode = "ENABLED"; + } tz_ui_stream_init(cb); tz_ui_stream_push(EXPERT_MODE, "Expert mode", exp_mode, diff --git a/app/src/ui_stream.c b/app/src/ui_stream.c index 7f1acbac4..e4a4fa8ca 100644 --- a/app/src/ui_stream.c +++ b/app/src/ui_stream.c @@ -162,8 +162,9 @@ cb(unsigned int button_mask, change_screen_right(); break; case BUTTON_EVT_RELEASED | BUTTON_LEFT | BUTTON_RIGHT: - if (cb_type) + if (cb_type) { s->cb(cb_type); + } if (cb_type & TZ_UI_STREAM_CB_MAINMASK) { global.step = ST_IDLE; ui_home_init(); @@ -201,14 +202,16 @@ display_init(bagl_element_t init[UI_INIT_ARRAY_LEN]) /* If we aren't on the first screen, we can go back */ if (s->current > 0) { /* Unless we can't... */ - if (s->current == s->total - TZ_UI_STREAM_HISTORY_SCREENS + 1) + if (s->current == s->total - TZ_UI_STREAM_HISTORY_SCREENS + 1) { init[1].text = (const char *)&C_icon_go_forbid; - else + } else { init[1].text = (const char *)&C_icon_go_left; + } } /* If we aren't full or aren't on the last page, we can go right */ - if (!s->full || s->current < s->total) + if (!s->full || s->current < s->total) { init[2].text = (const char *)&C_icon_go_right; + } DISPLAY(init, cb, UI_INIT_ARRAY_LEN) FUNC_LEAVE(); @@ -295,10 +298,11 @@ redisplay_screen(tz_ui_layout_type_t layout, uint8_t icon_pos) for (int i = txt_start_line + 1; i < UI_INIT_ARRAY_LEN; i++) { init[i].component = init[icon_pos + 1].component; init[i].component.font_id = BOLD; - if (i == txt_start_line + 1) + if (i == txt_start_line + 1) { init[i].text = s->screens[bucket].title; - else + } else { init[i].text = s->screens[bucket].body[i - 5]; + } init[i].component.x = 8; init[i].component.y = init[txt_start_line].component.y + 16 + 8 + ((i - 4) * 12); @@ -310,8 +314,9 @@ redisplay_screen(tz_ui_layout_type_t layout, uint8_t icon_pos) init[icon_pos].text = find_icon(icon); #ifdef TARGET_NANOS // Make sure text does not overflow on icon line in non-PB layouts. - if (layout != TZ_UI_LAYOUT_HOME_PB) + if (layout != TZ_UI_LAYOUT_HOME_PB) { init[icon_pos - 1].text = NULL; + } #endif } @@ -398,8 +403,9 @@ tz_ui_stream(void) FUNC_ENTER(("void")); tz_ui_stream_t *s = &global.stream; - if (s->pressed_right) + if (s->pressed_right) { succ(); + } redisplay(); FUNC_LEAVE(); @@ -414,8 +420,9 @@ tz_ui_max_line_chars(const char *value, int length) /* Wrap on newline */ const char *tmp = memchr(value, '\n', will_fit); - if (tmp && (tmp - value) <= will_fit) + if (tmp && (tmp - value) <= will_fit) { will_fit = (tmp - value); + } #ifdef TARGET_NANOS will_fit = se_get_cropped_length(value, will_fit, BAGL_WIDTH, @@ -467,8 +474,9 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, } /* drop the previous screen text in our bucket */ - if (s->total > 0 && bucket == (s->last % TZ_UI_STREAM_HISTORY_SCREENS)) + if (s->total > 0 && bucket == (s->last % TZ_UI_STREAM_HISTORY_SCREENS)) { drop_last_screen(); + } push_str(title, strlen(title), &s->screens[bucket].title); @@ -476,8 +484,9 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, size_t length = strlen(value); size_t offset = 0; - if (max != -1) + if (max != -1) { length = MIN(length, (size_t)max); + } s->screens[bucket].cb_type = cb_type; s->screens[bucket].layout_type = layout_type; @@ -487,8 +496,9 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, while (offset < length && line < TZ_UI_STREAM_CONTENTS_LINES) { uint8_t will_fit; - if (value[offset] == '\n') + if (value[offset] == '\n') { offset++; + } will_fit = tz_ui_max_line_chars(&value[offset], length - offset); @@ -507,13 +517,14 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, PRINTF("[DEBUG] tz_ui_stream_pushl(%s, %s, %u)\n", title, value, max); PRINTF("[DEBUG] bucket %d\n", bucket); PRINTF("[DEBUG] title: \"%s\"\n", s->screens[bucket].title); - for (line = 0; line < TZ_UI_STREAM_CONTENTS_LINES; line++) + for (line = 0; line < TZ_UI_STREAM_CONTENTS_LINES; line++) { if (s->screens[bucket].body[line]) { PRINTF("[DEBUG] value[%d]: \"%s\"\n", line, s->screens[bucket].body[line]); } else { PRINTF("[DEBUG] value[%d]: \"\"\n", line); } + } PRINTF("[DEBUG] total: %d -> %d\n", prev_total, s->total); PRINTF("[DEBUG] current: %d -> %d\n", prev_current, s->current); PRINTF("[DEBUG] last: %d -> %d\n", prev_last, s->last); @@ -532,8 +543,9 @@ drop_last_screen(void) TZ_PREAMBLE(("last: %d", s->last)); size_t i; - if (s->screens[bucket].title) + if (s->screens[bucket].title) { TZ_CHECK(ui_strings_drop(&s->screens[bucket].title)); + } for (i = 0; i < TZ_UI_STREAM_CONTENTS_LINES; i++) { if (s->screens[bucket].body[i]) { TZ_CHECK(ui_strings_drop(&s->screens[bucket].body[i])); diff --git a/app/src/ui_stream_nbgl.c b/app/src/ui_stream_nbgl.c index 804d8e966..7381a8182 100644 --- a/app/src/ui_stream_nbgl.c +++ b/app/src/ui_stream_nbgl.c @@ -107,8 +107,9 @@ handle_blindsigning(bool confirm) { TZ_PREAMBLE(("void")); if (confirm) { - if (!N_settings.blindsigning) + if (!N_settings.blindsigning) { toggle_blindsigning(); + } nbgl_useCaseStatus("BLIND SIGNING\nENABLED", true, blindsign_splash); } else { tz_reject_ui(); @@ -157,8 +158,9 @@ handle_expert_mode(bool confirm) { TZ_PREAMBLE(("void")); if (confirm) { - if (!N_settings.expert_mode) + if (!N_settings.expert_mode) { toggle_expert_mode(); + } nbgl_useCaseStatus("EXPERT MODE\nENABLED", true, tz_ui_stream_start); @@ -243,8 +245,9 @@ tz_ui_stream(void) tz_ui_stream_t *s = &global.stream; FUNC_ENTER(("void")); - if (s->stream_cb) + if (s->stream_cb) { s->stream_cb(); + } FUNC_LEAVE(); return; @@ -468,15 +471,18 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, } if (idx > 0 - && 0 == strcmp(title, s->screens[bucket].pairs[idx - 1].item)) + && 0 == strcmp(title, s->screens[bucket].pairs[idx - 1].item)) { append = true; + } - if (!append) + if (!append) { push_str(title, strlen(title), (char **)&s->screens[bucket].pairs[idx].item); + } - if (max != -1) + if (max != -1) { length = MIN(length, (size_t)max); + } if (idx == 0) { s->screens[bucket].cb_type = cb_type; @@ -487,8 +493,9 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, if (append) { bool can_fit = false; ui_strings_can_fit(length, &can_fit); - if (!can_fit) + if (!can_fit) { drop_last_screen(); + } offset = ui_strings_append_last(&value[offset], length, &out); idx--; @@ -575,12 +582,14 @@ drop_last_screen(void) TZ_PREAMBLE(("last: %d", s->last)); for (i = 0; i < s->screens[bucket].nb_pairs; i++) { - if (s->screens[bucket].pairs[i].item) + if (s->screens[bucket].pairs[i].item) { TZ_CHECK( ui_strings_drop((char **)&s->screens[bucket].pairs[i].item)); - if (s->screens[bucket].pairs[i].value) + } + if (s->screens[bucket].pairs[i].value) { TZ_CHECK( ui_strings_drop((char **)&s->screens[bucket].pairs[i].value)); + } } s->screens[bucket].nb_pairs = 0; diff --git a/app/src/ui_strings.c b/app/src/ui_strings.c index 5003f94c9..bcd814a89 100644 --- a/app/src/ui_strings.c +++ b/app/src/ui_strings.c @@ -165,8 +165,9 @@ ui_strings_push(const char *in, size_t len, char **out) s->end = ws + len + 1; - if (s->end > s->internal_end) + if (s->end > s->internal_end) { s->internal_end = s->end; + } *out = ws; PRINTF("[DEBUG] Pushed '%s' to %p\n", *out, *out); @@ -303,8 +304,9 @@ ui_strings_append_last(const char *str, size_t max, char **out) s->end += appended; - if (s->end > s->start) + if (s->end > s->start) { s->internal_end = s->end; + } PRINTF("[DEBUG] appended=%d, end=%p, out=%p, end?=%p\n", appended, s->end, *out, *out + appended); @@ -368,8 +370,9 @@ ui_strings_print(void) PRINTF("[DEBUG] START\tstart->\t%p %s\n", s->start, s->start); while (true) { ui_strings_next(&p); - if (!p) + if (!p) { break; + } PRINTF("[DEBUG] \t\t%p %s\n", p, p); } if (s->end < BUFF_END) { @@ -395,10 +398,11 @@ ui_strings_print(void) PRINTF("[DEBUG] \tstart->\t%p %s\n", p, p); while (true) { ui_strings_next(&p); - if (p >= s->start) + if (p >= s->start) { PRINTF("[DEBUG] \t\t%p %s\n", p, p); - else + } else { break; + } } PRINTF("[DEBUG] END\t\t%p\n", BUFF_END); } else { @@ -407,8 +411,9 @@ ui_strings_print(void) PRINTF("[DEBUG] \tstart->\t%p %s\n", p, p); while (true) { ui_strings_next(&p); - if (!p) + if (!p) { break; + } PRINTF("[DEBUG] \t\t%p %s\n", p, p); } if (s->end < BUFF_END) { diff --git a/app/src/utils.h b/app/src/utils.h index bab8b4cde..db22e0f21 100644 --- a/app/src/utils.h +++ b/app/src/utils.h @@ -21,17 +21,19 @@ PRINTF x; \ PRINTF(") at %s:%u\n", __FILE__, __LINE__); \ PRINTF("[DEBUG] stack = 0x%p (%s)\n", &_tmp, __func__); \ - if (app_stack_canary != 0xDEADBEEFu) \ + if (app_stack_canary != 0xDEADBEEFu) { \ PRINTF("[DEBUG] Stack (0x%p) has been smashed\n", \ &app_stack_canary); \ + } \ } while (0) #define FUNC_LEAVE() \ do { \ - if (app_stack_canary != 0xDEADBEEFu) \ + if (app_stack_canary != 0xDEADBEEFu) { \ PRINTF( \ "[DEBUG] Stack (0x%p) has been smashed " \ "(leaving function)\n", \ &app_stack_canary); \ + } \ PRINTF("[DEBUG] leave %s\n", __func__); \ } while (0) #else diff --git a/tests/unit/ctest/tests_parser.c b/tests/unit/ctest/tests_parser.c index 282ccc024..5e3c75a60 100644 --- a/tests/unit/ctest/tests_parser.c +++ b/tests/unit/ctest/tests_parser.c @@ -98,8 +98,9 @@ check_field_complexity(struct ctest_operation_parser_data *data, char *str, bool already_seen = false; while (true) { - while (!TZ_IS_BLOCKED(tz_operation_parser_step(st))) - ; + while (!TZ_IS_BLOCKED(tz_operation_parser_step(st))) { + // Loop while the result is successful and not blocking + } switch (st->errno) { case TZ_BLO_FEED_ME: @@ -144,11 +145,12 @@ check_field_complexity(struct ctest_operation_parser_data *data, char *str, continue; case TZ_BLO_DONE: - if (fields_check_len != idx + 1) + if (fields_check_len != idx + 1) { CTEST_ERR( "%s:%d all the field have not been seen, %d fields " "expected but got %d seen", __FILE__, __LINE__, (int)fields_check_len, (int)idx); + } ASSERT_TRUE(result); break; diff --git a/tests/unit/parser/micheline_cparse_stubs.c b/tests/unit/parser/micheline_cparse_stubs.c index 3303287b0..9c172c371 100644 --- a/tests/unit/parser/micheline_cparse_stubs.c +++ b/tests/unit/parser/micheline_cparse_stubs.c @@ -41,8 +41,9 @@ micheline_cparse_init(value size) *((tz_parser_state **)Data_abstract_val(r)) = state; tz_micheline_parser_init(state); size_t s = Long_val(size); - if (s >= 0xFFFF) + if (s >= 0xFFFF) { caml_failwith("micheline_cparse_init: size too large"); + } tz_operation_parser_init(state, (uint16_t)s, 1); CAMLreturn(r); } @@ -71,8 +72,9 @@ micheline_cparse_step(value mlstate, value input, value output) state->regs.oofs = oofs; state->regs.olen = olen; - while (!TZ_IS_BLOCKED(tz_micheline_parser_step(state))) - ; + while (!TZ_IS_BLOCKED(tz_micheline_parser_step(state))) { + // Loop while the result is successful and not blocking + } int read = ilen - state->regs.ilen; int written = olen - state->regs.olen; @@ -137,8 +139,9 @@ operation_cparse_step(value mlstate, value input, value output) state->regs.oofs = oofs; state->regs.olen = olen; - while (!TZ_IS_BLOCKED(tz_operation_parser_step(state))) - ; + while (!TZ_IS_BLOCKED(tz_operation_parser_step(state))) { + // Loop while the result is successful and not blocking + } int read = ilen - state->regs.ilen; int written = olen - state->regs.olen; From e097913c585ffda57adcdb00af79496b7a90c700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 13 Feb 2024 14:12:53 +0100 Subject: [PATCH 47/78] Style: explicit the precedence of operators [misra-c2012-12.1] The precedence of operators within expressions should be made explicit --- app/src/apdu_pubkey.c | 4 ++-- app/src/apdu_sign.c | 33 +++++++++++++++--------------- app/src/handle_swap.c | 6 +++--- app/src/keys.h | 3 ++- app/src/parser/formatting.c | 6 +++--- app/src/parser/formatting.h | 6 +++--- app/src/parser/micheline_parser.c | 24 +++++++++++----------- app/src/parser/num_parser.c | 10 ++++----- app/src/parser/operation_parser.c | 15 +++++++------- app/src/ui_stream.c | 34 ++++++++++++++++--------------- app/src/ui_stream_nbgl.c | 30 +++++++++++++-------------- app/src/ui_strings.c | 15 ++++++++------ tests/unit/ctest/tests_parser.c | 12 +++++------ 13 files changed, 103 insertions(+), 95 deletions(-) diff --git a/app/src/apdu_pubkey.c b/app/src/apdu_pubkey.c index 7fa5d4e89..57c76c6ca 100644 --- a/app/src/apdu_pubkey.c +++ b/app/src/apdu_pubkey.c @@ -172,13 +172,13 @@ handle_apdu_get_public_key(command_t *cmd) TZ_PREAMBLE(("cmd=%p", cmd)); TZ_ASSERT(EXC_UNEXPECTED_STATE, - global.step == ST_IDLE || global.step == ST_SWAP_SIGN); + (global.step == ST_IDLE) || (global.step == ST_SWAP_SIGN)); TZ_ASSERT(EXC_WRONG_PARAM, cmd->p1 == 0); // do not expose pks without prompt through U2F (permissionless legacy // comm in browser) TZ_ASSERT(EXC_HID_REQUIRED, - prompt || G_io_apdu_media != IO_APDU_MEDIA_U2F); + prompt || (G_io_apdu_media != IO_APDU_MEDIA_U2F)); global.path_with_curve.derivation_type = cmd->p2; TZ_ASSERT(EXC_WRONG_PARAM, diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index 0a8bb2f2f..7a4ebbe24 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -142,8 +142,8 @@ send_continue(void) { TZ_PREAMBLE(("void")); - APDU_SIGN_ASSERT(global.keys.apdu.sign.step == SIGN_ST_WAIT_USER_INPUT - || global.keys.apdu.sign.step == SIGN_ST_WAIT_DATA); + APDU_SIGN_ASSERT((global.keys.apdu.sign.step == SIGN_ST_WAIT_USER_INPUT) + || (global.keys.apdu.sign.step == SIGN_ST_WAIT_DATA)); APDU_SIGN_ASSERT(!global.keys.apdu.sign.received_last_msg); if (global.keys.apdu.sign.u.clear.received_msg) { @@ -183,8 +183,8 @@ refill_blo_im_full(void) goto end; } else { if (st->field_info.is_field_complex - && global.keys.apdu.sign.u.clear.last_field_index - != st->field_info.field_index) { + && (global.keys.apdu.sign.u.clear.last_field_index + != st->field_info.field_index)) { tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Next field requires", "careful review", TZ_UI_LAYOUT_HOME_BP, TZ_UI_ICON_NONE); @@ -200,8 +200,8 @@ refill_blo_im_full(void) PRINTF("[DEBUG] field=%s complex=%d\n", st->field_info.field_name, st->field_info.is_field_complex); if (st->field_info.is_field_complex - && global.keys.apdu.sign.u.clear.last_field_index - != st->field_info.field_index) { + && (global.keys.apdu.sign.u.clear.last_field_index + != st->field_info.field_index)) { global.keys.apdu.sign.u.clear.last_field_index = st->field_info.field_index; if (!N_settings.expert_mode) { @@ -231,8 +231,9 @@ refill_blo_done(void) tz_parser_state *st = &global.keys.apdu.sign.u.clear.parser_state; TZ_PREAMBLE(("void")); - TZ_ASSERT(EXC_UNEXPECTED_STATE, - global.keys.apdu.sign.received_last_msg && st->regs.ilen == 0); + TZ_ASSERT( + EXC_UNEXPECTED_STATE, + (global.keys.apdu.sign.received_last_msg && st->regs.ilen) == 0); global.keys.apdu.sign.u.clear.received_msg = false; if (st->regs.oofs != 0) { @@ -464,8 +465,8 @@ handle_first_apdu(command_t *cmd) TZ_CHECK(handle_first_apdu_clear(cmd)); - TZ_ASSERT(EXC_UNEXPECTED_STATE, - global.step == ST_CLEAR_SIGN || global.step == ST_SWAP_SIGN); + TZ_ASSERT(EXC_UNEXPECTED_STATE, (global.step == ST_CLEAR_SIGN) + || (global.step == ST_SWAP_SIGN)); io_send_sw(SW_OK); global.keys.apdu.sign.step = SIGN_ST_WAIT_DATA; @@ -581,8 +582,8 @@ handle_data_apdu_clear(command_t *cmd) } while (global.keys.apdu.sign.u.clear.received_msg); } else { TZ_CHECK(refill()); - if (global.keys.apdu.sign.step == SIGN_ST_WAIT_USER_INPUT - && global.step != ST_SWAP_SIGN) { + if ((global.keys.apdu.sign.step == SIGN_ST_WAIT_USER_INPUT) + && (global.step != ST_SWAP_SIGN)) { tz_ui_stream(); } } @@ -739,7 +740,7 @@ handle_apdu_sign(command_t *cmd) if (PKT_IS_FIRST(cmd)) { TZ_ASSERT(EXC_UNEXPECTED_STATE, - global.step == ST_IDLE || global.step == ST_SWAP_SIGN); + (global.step == ST_IDLE) || (global.step == ST_SWAP_SIGN)); memset(&global.keys, 0, sizeof(global.keys)); TZ_CHECK(handle_first_apdu(cmd)); @@ -747,9 +748,9 @@ handle_apdu_sign(command_t *cmd) goto end; } - TZ_ASSERT(EXC_UNEXPECTED_STATE, global.step == ST_BLIND_SIGN - || global.step == ST_CLEAR_SIGN - || global.step == ST_SWAP_SIGN); + TZ_ASSERT(EXC_UNEXPECTED_STATE, (global.step == ST_BLIND_SIGN) + || (global.step == ST_CLEAR_SIGN) + || (global.step == ST_SWAP_SIGN)); TZ_ASSERT(EXC_INVALID_INS, return_hash == global.keys.apdu.sign.return_hash); TZ_CHECK(handle_data_apdu(cmd)); diff --git a/app/src/handle_swap.c b/app/src/handle_swap.c index 21ecff369..4c88bef1e 100644 --- a/app/src/handle_swap.c +++ b/app/src/handle_swap.c @@ -52,8 +52,8 @@ swap_handle_check_address(check_address_parameters_t *params) goto bail; } - if (params->address_parameters_length == 0 - || params->address_parameters == NULL) { + if ((params->address_parameters_length == 0) + || (params->address_parameters == NULL)) { PRINTF("[ERROR] Address parameters is null\n"); goto bail; } @@ -201,7 +201,7 @@ swap_check_validity(void) PRINTF("[DEBUG] batch_index = %u, nb_reveal=%d, tag=%d\n", op->batch_index, op->nb_reveal, op->last_tag); TZ_ASSERT(EXC_REJECT, op->nb_reveal <= 1); - TZ_ASSERT(EXC_REJECT, op->batch_index - op->nb_reveal == 1); + TZ_ASSERT(EXC_REJECT, (op->batch_index - op->nb_reveal) == 1); TZ_ASSERT(EXC_REJECT, op->last_tag == TZ_OPERATION_TAG_TRANSACTION); TZ_ASSERT(EXC_REJECT, op->last_amount == G_swap_params.amount); TZ_ASSERT(EXC_REJECT, op->last_fee == G_swap_params.fee); diff --git a/app/src/keys.h b/app/src/keys.h index d9a1084fd..84c8a27ec 100644 --- a/app/src/keys.h +++ b/app/src/keys.h @@ -67,5 +67,6 @@ void sign(derivation_type_t derivation_type, const bip32_path_t *path, static inline bool check_derivation_type(derivation_type_t code) { - return (code >= DERIVATION_TYPE_ED25519 && code < DERIVATION_TYPE_MAX); + return ((code >= DERIVATION_TYPE_ED25519) + && (code < DERIVATION_TYPE_MAX)); } diff --git a/app/src/parser/formatting.c b/app/src/parser/formatting.c index 0b51ff45d..01cbc6696 100644 --- a/app/src/parser/formatting.c +++ b/app/src/parser/formatting.c @@ -217,7 +217,7 @@ tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen) memset(obuf, 0, obuf_len); - while (zcount < l && !n[zcount]) { + while ((zcount < l) && !n[zcount]) { ++zcount; } @@ -258,7 +258,7 @@ tz_format_decimal(const uint8_t *n, size_t l, char *obuf, size_t olen) memset(obuf, 0, obuf_len); - while (zcount < l && !n[l - zcount - 1]) { + while ((zcount < l) && !n[l - zcount - 1]) { ++zcount; } @@ -400,7 +400,7 @@ tz_format_base58check(const char *sprefix, const uint8_t *data, size_t size, /* In order to avoid vla, we have a maximum buffer size of 64 */ uint8_t prepared[64]; - if (prefix_len + size + 4 > sizeof(prepared)) { + if ((prefix_len + size + 4) > sizeof(prepared)) { PRINTF( "[WARNING] tz_format_base58check() failed: fixed size " "array is too small need: %u\n", diff --git a/app/src/parser/formatting.h b/app/src/parser/formatting.h index 38d6c2275..121e714e2 100644 --- a/app/src/parser/formatting.h +++ b/app/src/parser/formatting.h @@ -193,13 +193,13 @@ typedef enum { // output buffer `obuf` must be at least `DECIMAL_BUFFER_SIZE(l)` // (caller responsibility). int tz_format_decimal(const uint8_t *n, size_t l, char *obuf, size_t olen); -#define TZ_DECIMAL_BUFFER_SIZE(_l) ((_l)*241 / 100 + 1) +#define TZ_DECIMAL_BUFFER_SIZE(_l) ((((_l)*241) / 100) + 1) // Formats a data `n` of size `l` in base58 using Tezos' alphabet // order (same as Bitcoin). The output buffer `obuf` must be at least // `BASE58_BUFFER_SIZE(l)` (caller responsibility). int tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen); -#define TZ_BASE58_BUFFER_SIZE(_l) ((_l)*138 / 100 + 1) +#define TZ_BASE58_BUFFER_SIZE(_l) ((((_l)*138) / 100) + 1) // Looks up the prefix from the provided string (arg1), e.g. "B", // "o", "expr", "tz2", etc. This indexes into a table which finds @@ -212,7 +212,7 @@ int tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen); int tz_format_base58check(const char *prefix, const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); #define TZ_BASE58CHECK_BUFFER_SIZE(_l, _p) \ - TZ_BASE58_BUFFER_SIZE((_p) + (_l) + 4) + TZ_BASE58_BUFFER_SIZE(((_p) + (_l)) + 4) // Some Tezos-specific base58check formatters. These functions // deconstruct the Tezos binary header to figure out the kind within diff --git a/app/src/parser/micheline_parser.c b/app/src/parser/micheline_parser.c index 4644b0a04..36be70674 100644 --- a/app/src/parser/micheline_parser.c +++ b/app/src/parser/micheline_parser.c @@ -102,9 +102,9 @@ print_escaped(tz_parser_state *state, uint8_t b) case '\n': strncpy(buf,"\\n",TZ_CAPTURE_BUFFER_SIZE); break; case '\t': strncpy(buf,"\\t",TZ_CAPTURE_BUFFER_SIZE); break; default: - buf[0] = '0' + b/100; - buf[1] = '0' + (b/10)%10; - buf[2] = '0' + b%10; + buf[0] = '0' + (b/100); + buf[1] = '0' + ((b/10)%10); + buf[2] = '0' + (b%10); buf[3] = 0; break; } @@ -131,7 +131,7 @@ tag_selection(tz_parser_state *state, uint8_t t) case TZ_MICHELINE_TAG_INT: m->frame->step = TZ_MICHELINE_STEP_INT; tz_parse_num_state_init(&state->buffers.num, &m->frame->step_int); - for (int i = 0; i < TZ_NUM_BUFFER_SIZE / 8; i++) { + for (int i = 0; i < (TZ_NUM_BUFFER_SIZE / 8); i++) { state->buffers.num.bytes[i] = 0; } break; @@ -160,12 +160,12 @@ tag_selection(tz_parser_state *state, uint8_t t) nargs = (t - 3) >> 1; annot = (~t & 1); wrap = (m->frame > m->stack) - && m->frame[-1].step == TZ_MICHELINE_STEP_PRIM - && (nargs > 0 || annot); + && (m->frame[-1].step == TZ_MICHELINE_STEP_PRIM) + && ((nargs > 0) || annot); goto common_prim; case TZ_MICHELINE_TAG_PRIM_N: wrap = (m->frame > m->stack) - && m->frame[-1].step == TZ_MICHELINE_STEP_PRIM; + && (m->frame[-1].step == TZ_MICHELINE_STEP_PRIM); nargs = 3; annot = true; common_prim: @@ -233,7 +233,7 @@ tz_micheline_parser_step(tz_parser_state *state) if (m->frame->step_size.size > 255) { tz_raise(TOO_LARGE); // enforce 16-bit restriction } - m->frame->step_size.size = m->frame->step_size.size << 8 | b; + m->frame->step_size.size = (m->frame->step_size.size << 8) | b; if (m->frame->stop == state->ofs) { m->frame[-1].stop = state->ofs + m->frame->step_size.size; tz_must(pop_frame(state)); @@ -298,7 +298,7 @@ tz_micheline_parser_step(tz_parser_state *state) tz_must(pop_frame(state)); } else { tz_must(tz_parser_peek(state, &b)); - if (b >= 0x20 && b < 0x80 && b != '\"' && b != '\\') { + if ((b >= 0x20) && (b < 0x80) && (b != '\"') && (b != '\\')) { tz_must(parser_put(state, b)); tz_parser_skip(state); } else { @@ -352,9 +352,9 @@ tz_micheline_parser_step(tz_parser_state *state) } break; case TZ_MICHELINE_STEP_PRIM: - if (m->frame->step_prim.nargs == 0 - || (m->frame->step_prim.nargs == 3 - && m->frame->stop == state->ofs)) { + if ((m->frame->step_prim.nargs == 0) + || ((m->frame->step_prim.nargs == 3) + && (m->frame->stop == state->ofs))) { if (m->frame->step_prim.annot) { m->frame->step_prim.annot = false; tz_must(push_frame(state, TZ_MICHELINE_STEP_ANNOT)); diff --git a/app/src/parser/num_parser.c b/app/src/parser/num_parser.c index 9f307d3c7..67f41decf 100644 --- a/app/src/parser/num_parser.c +++ b/app/src/parser/num_parser.c @@ -33,7 +33,7 @@ tz_parse_num_step(tz_num_parser_buffer *buffers, tz_num_parser_regs *regs, { uint8_t v, cont, s; cont = b >> 7; - if (regs->size == 0 && !natural) { + if ((regs->size == 0) && !natural) { v = b & 0x3F; regs->sign = (b >> 6) & 1; s = 6; @@ -46,7 +46,7 @@ tz_parse_num_step(tz_num_parser_buffer *buffers, tz_num_parser_regs *regs, int lo_idx = regs->size / 8; int hi_idx = lo_idx + 1; buffers->bytes[lo_idx] |= lo; - if (hi_idx >= TZ_NUM_BUFFER_SIZE / 8) { + if (hi_idx >= (TZ_NUM_BUFFER_SIZE / 8)) { // accept and dismiss a few trailing zeroes if (hi || cont) { return TZ_ERR_TOO_LARGE; @@ -81,18 +81,18 @@ tz_parse_nat_step(tz_num_parser_buffer *buffers, tz_num_parser_regs *regs, bool tz_string_to_mutez(const char *str, uint64_t *res) { - if (str == NULL || res == NULL) { + if ((str == NULL) || (res == NULL)) { PRINTF("[ERROR] Null parameter\n"); return false; } *res = 0; for (int i = 0; str[i] != '\0'; i++) { - if (str[i] < '0' || str[i] > '9') { + if ((str[i] < '0') || (str[i] > '9')) { PRINTF("[ERROR] Non-digit character: %c\n", str[i]); return false; } - *res = *res * 10 + (str[i] - '0'); + *res = (*res * 10) + (str[i] - '0'); } return true; diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 5b7cec30a..8fbf23552 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -417,7 +417,7 @@ tz_step_size(tz_parser_state *state) if (op->frame->step_size.size > 255) { tz_raise(TOO_LARGE); // enforce 16-bit restriction } - op->frame->step_size.size = op->frame->step_size.size << 8 | b; + op->frame->step_size.size = (op->frame->step_size.size << 8) | b; op->frame->step_size.size_len--; if (op->frame->step_size.size_len <= 0) { op->frame[-1].stop = state->ofs + op->frame->step_size.size; @@ -471,7 +471,7 @@ tz_step_read_micheline(tz_parser_state *state) } tz_micheline_parser_step(state); if (state->errno == TZ_BLO_DONE) { - if (op->frame->stop != 0 && state->ofs != op->frame->stop) { + if ((op->frame->stop != 0) && (state->ofs != op->frame->stop)) { tz_raise(TOO_LARGE); } tz_must(pop_frame(state)); @@ -528,7 +528,7 @@ tz_step_read_num(tz_parser_state *state) while (str[len]) { len++; } - if (len == 1 && str[0] == 0) { + if ((len == 1) && (str[0] == 0)) { // just 0 goto add_currency; } @@ -593,7 +593,7 @@ tz_step_read_int32(tz_parser_state *state) uint32_t *value = &op->frame->step_read_int32.value; if (op->frame->step_read_int32.ofs < 4) { tz_must(tz_parser_read(state, &b)); - *value = *value << 8 | b; + *value = (*value << 8) | b; op->frame->step_read_int32.ofs++; } else { snprintf((char *)CAPTURE, sizeof(CAPTURE), "%d", *value); @@ -737,7 +737,7 @@ tz_step_read_binary(tz_parser_state *state) if (state->ofs == op->frame->stop) { CAPTURE[op->frame->step_read_string.ofs] = 0; tz_must(tz_print_string(state)); - } else if (op->frame->step_read_string.ofs + 2 + } else if ((op->frame->step_read_string.ofs + 2) >= TZ_CAPTURE_BUFFER_SIZE) { CAPTURE[op->frame->step_read_string.ofs] = 0; op->frame->step_read_string.ofs = 0; @@ -1120,8 +1120,9 @@ tz_step_read_protos(tz_parser_state *state) static tz_parser_result tz_step_print(tz_parser_state *state, bool partial) { - if (state->operation.frame->step != TZ_OPERATION_STEP_PRINT - && state->operation.frame->step != TZ_OPERATION_STEP_PARTIAL_PRINT) { + if ((state->operation.frame->step != TZ_OPERATION_STEP_PRINT) + && (state->operation.frame->step + != TZ_OPERATION_STEP_PARTIAL_PRINT)) { PRINTF("[DEBUG] expected step %s or step %s but got step %s)\n", STRING_STEP(TZ_OPERATION_STEP_PRINT), STRING_STEP(TZ_OPERATION_STEP_PARTIAL_PRINT), diff --git a/app/src/ui_stream.c b/app/src/ui_stream.c index e4a4fa8ca..00d7f5d22 100644 --- a/app/src/ui_stream.c +++ b/app/src/ui_stream.c @@ -122,7 +122,7 @@ pred(void) tz_ui_stream_t *s = &global.stream; FUNC_ENTER(("void")); - if (s->current >= 1 && s->current > s->last) { + if ((s->current >= 1) && (s->current > s->last)) { s->current--; } FUNC_LEAVE(); @@ -202,14 +202,14 @@ display_init(bagl_element_t init[UI_INIT_ARRAY_LEN]) /* If we aren't on the first screen, we can go back */ if (s->current > 0) { /* Unless we can't... */ - if (s->current == s->total - TZ_UI_STREAM_HISTORY_SCREENS + 1) { + if (s->current == (s->total - TZ_UI_STREAM_HISTORY_SCREENS + 1)) { init[1].text = (const char *)&C_icon_go_forbid; } else { init[1].text = (const char *)&C_icon_go_left; } } /* If we aren't full or aren't on the last page, we can go right */ - if (!s->full || s->current < s->total) { + if (!s->full || (s->current < s->total)) { init[2].text = (const char *)&C_icon_go_right; } @@ -276,29 +276,30 @@ redisplay_screen(tz_ui_layout_type_t layout, uint8_t icon_pos) = 3; /// first three lines are for black rectangle, left screen icon /// and right screen icon. - if (layout == TZ_UI_LAYOUT_BP || layout == TZ_UI_LAYOUT_HOME_BP) { + if ((layout == TZ_UI_LAYOUT_BP) || (layout == TZ_UI_LAYOUT_HOME_BP)) { // Change the contents to bold. for (int i = txt_start_line + 1; i < icon_pos; i++) { init[i].component.font_id = BOLD; } - } else if (layout == TZ_UI_LAYOUT_NP || layout == TZ_UI_LAYOUT_HOME_NP) { + } else if ((layout == TZ_UI_LAYOUT_NP) + || (layout == TZ_UI_LAYOUT_HOME_NP)) { // Set title to Regular. init[txt_start_line].component.font_id = REGULAR; } else if (layout == TZ_UI_LAYOUT_HOME_PB) { // Icon will be at txt_start_line. // modify the x,y coordinates for index txt_start_line to end. init[txt_start_line].component = init[icon_pos].component; - init[txt_start_line].component.x = BAGL_WIDTH / 2 - 8; + init[txt_start_line].component.x = (BAGL_WIDTH / 2) - 8; #ifdef TARGET_NANOS - init[txt_start_line].component.y = BAGL_HEIGHT / 2 - 14; + init[txt_start_line].component.y = (BAGL_HEIGHT / 2) - 14; #else - init[txt_start_line].component.y = BAGL_HEIGHT / 2 - 20; + init[txt_start_line].component.y = (BAGL_HEIGHT / 2) - 20; #endif icon_pos = txt_start_line; for (int i = txt_start_line + 1; i < UI_INIT_ARRAY_LEN; i++) { init[i].component = init[icon_pos + 1].component; init[i].component.font_id = BOLD; - if (i == txt_start_line + 1) { + if (i == (txt_start_line + 1)) { init[i].text = s->screens[bucket].title; } else { init[i].text = s->screens[bucket].body[i - 5]; @@ -323,15 +324,15 @@ redisplay_screen(tz_ui_layout_type_t layout, uint8_t icon_pos) // if the screen layout type is home , set the left and right arrows to // middle of screen. if (layout & TZ_UI_LAYOUT_HOME_MASK) { - init[1].component.y = BAGL_HEIGHT / 2 - 3; - init[2].component.y = BAGL_HEIGHT / 2 - 3; + init[1].component.y = (BAGL_HEIGHT / 2) - 3; + init[2].component.y = (BAGL_HEIGHT / 2) - 3; // as icon_pos = txt_start_line in TZ_UI_LAYOUT_HOME_PB layout, // following changes dont affect it. for (int i = txt_start_line; i < icon_pos; i++) { init[i].component.x = 8; init[i].component.width = 112; init[i].component.y - = BAGL_HEIGHT / 2 - 3 + ((i - txt_start_line) * 13); + = (BAGL_HEIGHT / 2) - 3 + ((i - txt_start_line) * 13); } } @@ -369,7 +370,7 @@ change_screen_right(void) TZ_PREAMBLE(("void")); s->pressed_right = true; - if (!s->full && s->current == s->total) { + if (!s->full && (s->current == s->total)) { PRINTF("[DEBUG] Looping in change_screen_right\n"); s->cb(TZ_UI_STREAM_CB_REFILL); PRINTF("[DEBUG] step=%d\n", global.keys.apdu.sign.step); @@ -466,7 +467,7 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, s->total++; int bucket = s->total % TZ_UI_STREAM_HISTORY_SCREENS; - if (s->total > 0 + if ((s->total > 0) && (s->current % TZ_UI_STREAM_HISTORY_SCREENS) == bucket) { PRINTF( "[ERROR] PANIC!!!! Overwriting current screen, some bad things " @@ -474,7 +475,8 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, } /* drop the previous screen text in our bucket */ - if (s->total > 0 && bucket == (s->last % TZ_UI_STREAM_HISTORY_SCREENS)) { + if ((s->total > 0) + && (bucket == (s->last % TZ_UI_STREAM_HISTORY_SCREENS))) { drop_last_screen(); } @@ -493,7 +495,7 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, s->screens[bucket].icon = icon; int line = 0; - while (offset < length && line < TZ_UI_STREAM_CONTENTS_LINES) { + while ((offset < length) && (line < TZ_UI_STREAM_CONTENTS_LINES)) { uint8_t will_fit; if (value[offset] == '\n') { diff --git a/app/src/ui_stream_nbgl.c b/app/src/ui_stream_nbgl.c index 7381a8182..56015b81c 100644 --- a/app/src/ui_stream_nbgl.c +++ b/app/src/ui_stream_nbgl.c @@ -325,7 +325,7 @@ tz_ui_nav_cb(uint8_t page, nbgl_pageContent_t *content) "global.step= %d\n", s->pressed_right, s->current, s->total, s->full, global.step); - while ((s->total < 0 || (s->current == s->total && !s->full)) + while (((s->total < 0) || ((s->current == s->total) && !s->full)) && (st->errno < TZ_ERR_INVALID_TAG)) { PRINTF("tz_ui_nav_cb: Looping...\n"); tz_ui_continue(); @@ -451,17 +451,17 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, size_t offset = 0; size_t length = strlen(value); - if (s->total >= 0 - && (s->current % TZ_UI_STREAM_HISTORY_SCREENS) == bucket) { + if ((s->total >= 0) + && ((s->current % TZ_UI_STREAM_HISTORY_SCREENS) == bucket)) { PRINTF( "[ERROR] PANIC!!!! Overwriting current screen, some bad things " "are happening\n"); } - if ((cb_type == TZ_UI_STREAM_CB_CANCEL - || cb_type == TZ_UI_STREAM_CB_EXPERT_MODE_ENABLE - || cb_type == TZ_UI_STREAM_CB_EXPERT_MODE_FIELD) - && idx > 0) { + if (((cb_type == TZ_UI_STREAM_CB_CANCEL) + || (cb_type == TZ_UI_STREAM_CB_EXPERT_MODE_ENABLE) + || (cb_type == TZ_UI_STREAM_CB_EXPERT_MODE_FIELD)) + && (idx > 0)) { PRINTF("[DEBUG] PUSH_TO_NEXT: %x\n", cb_type); push_to_next = true; } else { @@ -470,8 +470,8 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, PRINTF("[ERROR] PANIC!!! we pushing to a screen that's full"); } - if (idx > 0 - && 0 == strcmp(title, s->screens[bucket].pairs[idx - 1].item)) { + if ((idx > 0) + && (0 == strcmp(title, s->screens[bucket].pairs[idx - 1].item))) { append = true; } @@ -525,7 +525,7 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, if (push_to_next) { /* We need to move to the next screen, retry */ - if (append && offset > 0) { + if (append && (offset > 0)) { ui_strings_drop_last(&out); } else { ui_strings_drop_last( @@ -539,12 +539,12 @@ tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, } if (push_to_next - || (!append && ++(s->screens[bucket].nb_pairs) == max_pairs) - || (append && offset == 0)) { + || (!append && (++(s->screens[bucket].nb_pairs) == max_pairs)) + || (append && (offset == 0))) { s->total++; - if (s->total > 0 - && s->total % TZ_UI_STREAM_HISTORY_SCREENS - == s->last % TZ_UI_STREAM_HISTORY_SCREENS) { + if ((s->total > 0) + && ((s->total % TZ_UI_STREAM_HISTORY_SCREENS) + == (s->last % TZ_UI_STREAM_HISTORY_SCREENS))) { drop_last_screen(); } } diff --git a/app/src/ui_strings.c b/app/src/ui_strings.c index bcd814a89..2ced007dd 100644 --- a/app/src/ui_strings.c +++ b/app/src/ui_strings.c @@ -95,13 +95,16 @@ ui_strings_fit_up_to(size_t len, char **write_start) } else if (s->start < s->end) { /* start < end */ size_t chars_at_start = MIN((size_t)(s->start - BUFF_START), len + 1); - chars_at_start - = chars_at_start > 0 ? chars_at_start - 1 : chars_at_start; + if (chars_at_start > 0) { + chars_at_start--; + } size_t chars_at_end = MIN((size_t)(BUFF_END - s->end), len + 1); - chars_at_end = chars_at_end > 0 ? chars_at_end - 1 : chars_at_end; + if (chars_at_end > 0) { + chars_at_end--; + } - if (chars_at_end == len || chars_at_end >= chars_at_start) { + if ((chars_at_end == len) || (chars_at_end >= chars_at_start)) { *write_start = s->end; out_len = chars_at_end; } else { @@ -236,7 +239,7 @@ ui_strings_drop_last(char **in) size_t len = strlen(*in); TZ_ASSERT(EXC_MEMORY_ERROR, (len > 0)); TZ_ASSERT(EXC_MEMORY_ERROR, (!ui_strings_is_empty())); - TZ_ASSERT(EXC_MEMORY_ERROR, (*in + len == s->end - 1)); + TZ_ASSERT(EXC_MEMORY_ERROR, ((*in + len) == (s->end - 1))); /* Internal checks */ TZ_ASSERT(EXC_MEMORY_ERROR, (s->start < s->internal_end)); TZ_ASSERT(EXC_MEMORY_ERROR, (s->end <= s->internal_end)); @@ -320,7 +323,7 @@ bool ui_strings_is_empty(void) { tz_ui_strings_t *s = UI_STRINGS; - return s->start == s->end && s->count == 0; /* check COUNT is zero! */ + return (s->start == s->end) && (s->count == 0); /* check COUNT is zero! */ } #ifdef TEZOS_DEBUG diff --git a/tests/unit/ctest/tests_parser.c b/tests/unit/ctest/tests_parser.c index 5e3c75a60..4721255c2 100644 --- a/tests/unit/ctest/tests_parser.c +++ b/tests/unit/ctest/tests_parser.c @@ -58,7 +58,7 @@ refill(struct ctest_operation_parser_data *data) { data->ilen = 0; while ( - (data->str_ofs < data->str_len || data->ilen < data->max_ilen) + ((data->str_ofs < data->str_len) || (data->ilen < data->max_ilen)) && sscanf(data->str + data->str_ofs, "%2hhx", &data->ibuf[data->ilen]) == 1) { data->str_ofs += 2; @@ -118,10 +118,10 @@ check_field_complexity(struct ctest_operation_parser_data *data, char *str, } if (strstr(st->field_info.field_name, fields_check[idx].name) != NULL) { - if (fields_check[idx].complex - != st->field_info.is_field_complex - || fields_check[idx].field_index - != st->field_info.field_index) { + if ((fields_check[idx].complex + != st->field_info.is_field_complex) + || (fields_check[idx].field_index + != st->field_info.field_index)) { CTEST_LOG( "%s:%d '%s' field expected to have complex: %s " "index: %d but " @@ -145,7 +145,7 @@ check_field_complexity(struct ctest_operation_parser_data *data, char *str, continue; case TZ_BLO_DONE: - if (fields_check_len != idx + 1) { + if (fields_check_len != (idx + 1)) { CTEST_ERR( "%s:%d all the field have not been seen, %d fields " "expected but got %d seen", From bee67e792e861d0815607262374e0383a9db57a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Tue, 13 Feb 2024 14:23:03 +0100 Subject: [PATCH 48/78] Header guard: add the missing header guard to handle_swap.h to prevent it from being included twice --- app/src/handle_swap.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/handle_swap.h b/app/src/handle_swap.h index c1e6cc202..f20a3a041 100644 --- a/app/src/handle_swap.h +++ b/app/src/handle_swap.h @@ -20,4 +20,6 @@ See the License for the specific language governing permissions and limitations under the License. */ +#pragma once + void swap_check_validity(void); From c82f2717140235fb417b2b09b499764834e14571 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Tue, 13 Feb 2024 17:14:14 +0000 Subject: [PATCH 49/78] Remove unused Ledger flags APPLICATION_FLAG_GLOBAL_PIN, APPLICATION_FLAG_BOLOS_SETTINGS --- app/Makefile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/Makefile b/app/Makefile index a842c50e0..47d50889a 100644 --- a/app/Makefile +++ b/app/Makefile @@ -135,10 +135,6 @@ CFLAGS += -Wwrite-strings ######################################## # See SDK `include/appflags.h` for the purpose of each permission #HAVE_APPLICATION_FLAG_DERIVE_MASTER = 1 -ifneq ($(TARGET_NAME), TARGET_NANOS) -HAVE_APPLICATION_FLAG_GLOBAL_PIN = 1 -HAVE_APPLICATION_FLAG_BOLOS_SETTINGS = 1 -endif HAVE_APPLICATION_FLAG_LIBRARY = 1 ######################################## From 3712724eae1ad1056e63465341d16080f49af0a7 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Mon, 12 Feb 2024 16:19:07 +0000 Subject: [PATCH 50/78] Remove unnecessary comments --- app/src/apdu.c | 2 -- app/src/apdu.h | 2 -- app/src/apdu_sign.c | 5 +---- app/src/globals.h | 2 -- app/src/keys.c | 2 -- app/src/keys.h | 2 -- app/src/ui_stream.h | 4 +--- app/src/ui_strings.c | 3 --- tests/integration/test_runtime.sh | 1 - 9 files changed, 2 insertions(+), 21 deletions(-) diff --git a/app/src/apdu.c b/app/src/apdu.c index 9b97fc4a3..4715ede40 100644 --- a/app/src/apdu.c +++ b/app/src/apdu.c @@ -1,7 +1,5 @@ /* Tezos Ledger application - Some common primitives and some command handlers - TODO: split this file (apdu primitives and apdu handlers) - Copyright 2023 Nomadic Labs Copyright 2023 Trilitech diff --git a/app/src/apdu.h b/app/src/apdu.h index 5d6c85842..467567f78 100644 --- a/app/src/apdu.h +++ b/app/src/apdu.h @@ -1,7 +1,5 @@ /* Tezos Ledger application - Some common primitives and some command handlers - TODO: split this file (apdu primitives and apdu handlers) - Copyright 2023 Nomadic Labs With code excerpts from: diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index 7a4ebbe24..be7738ffc 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -115,11 +115,10 @@ sign_packet(void) &global.path_with_curve.bip32_path, bufs[0].ptr, bufs[0].size, sig, &bufs[1].size)); - /* If we aren't returning the hash, zero its buffer... */ + /* If we aren't returning the hash, zero its buffer. */ if (!global.keys.apdu.sign.return_hash) { bufs[0].size = 0; } - io_send_response_buffers(bufs, 2, SW_OK); global.step = ST_IDLE; @@ -724,8 +723,6 @@ handle_data_apdu_blind(void) STRLCPY(hash, obuf); continue_blindsign_cb(); #endif - - /* XXXrcd: the logic here need analysis. */ TZ_POSTAMBLE; } #undef FINAL_HASH diff --git a/app/src/globals.h b/app/src/globals.h index b0510da81..dc38e1e61 100644 --- a/app/src/globals.h +++ b/app/src/globals.h @@ -118,5 +118,3 @@ extern const settings_t N_settings_real; extern unsigned int app_stack_canary; // From SDK extern unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; - -// extern const uint32_t mainnet_chain_id = 0x7A06A770 // NetXdQprcVkpaWU diff --git a/app/src/keys.c b/app/src/keys.c index d5a7d5079..6991a3b34 100644 --- a/app/src/keys.c +++ b/app/src/keys.c @@ -1,7 +1,5 @@ /* Tezos Ledger application - Signature primitives - TODO: cleanup/refactor - Copyright 2023 Nomadic Labs Copyright 2023 Functori diff --git a/app/src/keys.h b/app/src/keys.h index 84c8a27ec..e5e587d66 100644 --- a/app/src/keys.h +++ b/app/src/keys.h @@ -1,7 +1,5 @@ /* Tezos Ledger application - Signature primitives - TODO: cleanup/refactor - Copyright 2023 Nomadic Labs With code excerpts from: diff --git a/app/src/ui_stream.h b/app/src/ui_stream.h index c320c26e7..564a47f44 100644 --- a/app/src/ui_stream.h +++ b/app/src/ui_stream.h @@ -151,9 +151,7 @@ typedef struct { int16_t total; int16_t last; bool full; - // FIXME: workaround for issue with non-local control flow. Remove once - // fixed see !66 - bool pressed_right; + bool pressed_right; #ifdef HAVE_NBGL tz_ui_stream_display_t current_screen; char verify_address[TZ_BASE58CHECK_BUFFER_SIZE(20, 3)]; diff --git a/app/src/ui_strings.c b/app/src/ui_strings.c index 2ced007dd..00bad70f0 100644 --- a/app/src/ui_strings.c +++ b/app/src/ui_strings.c @@ -136,9 +136,6 @@ ui_strings_can_fit(size_t len, bool *can_fit) /* @param in: ptr to char[] to copy into the buffer @param in_len: number of of chars to copy. in_len <= strlen(in) @param out: will be set to the start of the char[] in the buffer - - // TODO: for future, when appending is a possibility - @param out_len: strlen(out) 0 < out_len <= in_len */ void ui_strings_push(const char *in, size_t len, char **out) diff --git a/tests/integration/test_runtime.sh b/tests/integration/test_runtime.sh index 81d2da678..025d2bf8c 100644 --- a/tests/integration/test_runtime.sh +++ b/tests/integration/test_runtime.sh @@ -65,7 +65,6 @@ compare_strings() { STR2="$2" if [ "nanox" = "$TARGET" ]; then - # TODO: raise issue on speculos? STR1="$(echo $1 | sed 's/Parsing errorERR//g')" STR2="$(echo $2 | sed 's/Parsing errorERR//g')" fi From 3ba5d1a8538346173c664d7a389d13db1d50cb54 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Fri, 9 Feb 2024 16:29:18 +0000 Subject: [PATCH 51/78] Reset entire buffer not just its size --- app/src/apdu_sign.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index be7738ffc..4dabf90b0 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -117,8 +117,10 @@ sign_packet(void) /* If we aren't returning the hash, zero its buffer. */ if (!global.keys.apdu.sign.return_hash) { + memset((void *)bufs[0].ptr, 0, bufs[0].size); bufs[0].size = 0; } + io_send_response_buffers(bufs, 2, SW_OK); global.step = ST_IDLE; From f3b8ef489c6e850c832e01d48ae299f3765ee635 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Mon, 12 Feb 2024 09:10:41 +0000 Subject: [PATCH 52/78] - Initialize pressed_right to 0. --- app/src/ui_stream.c | 11 ++++++----- app/src/ui_stream_nbgl.c | 14 ++++++-------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/app/src/ui_stream.c b/app/src/ui_stream.c index 00d7f5d22..f3a0f9584 100644 --- a/app/src/ui_stream.c +++ b/app/src/ui_stream.c @@ -50,11 +50,12 @@ tz_ui_stream_init(void (*cb)(tz_ui_cb_type_t cb_type)) FUNC_ENTER(("cb=%p", cb)); memset(s, 0x0, sizeof(*s)); - s->cb = cb; - s->full = false; - s->current = 0; - s->total = -1; - s->last = 0; + s->cb = cb; + s->full = false; + s->current = 0; + s->pressed_right = false; + s->total = -1; + s->last = 0; ui_strings_init(); diff --git a/app/src/ui_stream_nbgl.c b/app/src/ui_stream_nbgl.c index 56015b81c..6788a6098 100644 --- a/app/src/ui_stream_nbgl.c +++ b/app/src/ui_stream_nbgl.c @@ -273,11 +273,12 @@ tz_ui_stream_init(void (*cb)(tz_ui_cb_type_t cb_type)) FUNC_ENTER(("cb=%p", cb)); memset(s, 0x0, sizeof(*s)); - s->cb = cb; - s->full = false; - s->last = 0; - s->current = -1; - s->total = -1; + s->cb = cb; + s->full = false; + s->last = 0; + s->current = -1; + s->total = -1; + s->pressed_right = false; ui_strings_init(); @@ -347,9 +348,6 @@ tz_ui_nav_cb(uint8_t page, nbgl_pageContent_t *content) s->pressed_right, s->current, s->total, s->full, global.step); if (global.step == ST_ERROR) { - // TODO: this is handled by change_screen_right except we disable it - // to use it here. We should make ui_stream fully compatible with - // exception.h global.step = ST_IDLE; ui_home_init(); result = false; From aa79b0670a359ade138aeb1f0fe41479b7625fb5 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Mon, 12 Feb 2024 13:28:21 +0000 Subject: [PATCH 53/78] Remove redundant global.step check --- app/src/apdu_sign.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/apdu_sign.c b/app/src/apdu_sign.c index 4dabf90b0..501c1f219 100644 --- a/app/src/apdu_sign.c +++ b/app/src/apdu_sign.c @@ -488,15 +488,14 @@ handle_first_apdu_clear(__attribute__((unused)) command_t *cmd) #endif tz_ui_stream_init(stream_cb); global.step = ST_CLEAR_SIGN; - if (global.step == ST_CLEAR_SIGN) { + #ifdef TARGET_NANOS - tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Review operation", "", - TZ_UI_LAYOUT_HOME_PB, TZ_UI_ICON_EYE); -#elif defined(HAVE_BAGL) - tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Review", "operation", + tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Review operation", "", TZ_UI_LAYOUT_HOME_PB, TZ_UI_ICON_EYE); +#elif defined(HAVE_BAGL) + tz_ui_stream_push(TZ_UI_STREAM_CB_NOCB, "Review", "operation", + TZ_UI_LAYOUT_HOME_PB, TZ_UI_ICON_EYE); #endif - } #ifdef HAVE_SWAP } else { PRINTF("[DEBUG] If called from SWAP : global.step =%d\n", From 4da7ac47e81849e95e709b7f91a2cc9df9ab7ab2 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Mon, 12 Feb 2024 16:17:32 +0000 Subject: [PATCH 54/78] Fix unsigned int treated as int. --- app/src/parser/operation_parser.c | 4 ++-- app/src/parser/operation_state.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 8fbf23552..40bf2420c 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -419,7 +419,7 @@ tz_step_size(tz_parser_state *state) } op->frame->step_size.size = (op->frame->step_size.size << 8) | b; op->frame->step_size.size_len--; - if (op->frame->step_size.size_len <= 0) { + if (op->frame->step_size.size_len == 0) { op->frame[-1].stop = state->ofs + op->frame->step_size.size; tz_must(pop_frame(state)); } @@ -590,7 +590,7 @@ tz_step_read_int32(tz_parser_state *state) ASSERT_STEP(state, READ_INT32); tz_operation_state *op = &state->operation; uint8_t b; - uint32_t *value = &op->frame->step_read_int32.value; + int32_t *value = &op->frame->step_read_int32.value; if (op->frame->step_read_int32.ofs < 4) { tz_must(tz_parser_read(state, &b)); *value = (*value << 8) | b; diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index a9ec5efa8..eae58b6dd 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -147,8 +147,8 @@ typedef struct { uint8_t skip : 1, natural : 1; } step_read_num; struct { - uint32_t value; - uint8_t skip : 1, ofs : 3; + int32_t value; + uint8_t skip : 1, ofs : 3; } step_read_int32; struct { uint16_t ofs; From e6688c8900ede1303054c034b59cfb1bd5b728c4 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Wed, 14 Feb 2024 11:11:16 +0000 Subject: [PATCH 55/78] Add new Oxford2 entrypoints --- app/src/parser/operation_parser.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 8fbf23552..5bcf464a7 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -788,6 +788,22 @@ tz_step_read_smart_entrypoint(tz_parser_state *state) strlcpy((char *)CAPTURE, "deposit", sizeof(CAPTURE)); tz_must(tz_print_string(state)); break; + case 6: + strlcpy((char *)CAPTURE, "stake", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; + case 7: + strlcpy((char *)CAPTURE, "unstake", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; + case 8: + strlcpy((char *)CAPTURE, "finalize_unstake", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; + case 9: + strlcpy((char *)CAPTURE, "set_delegate_parameters", sizeof(CAPTURE)); + tz_must(tz_print_string(state)); + break; case 0xFF: op->frame->step = TZ_OPERATION_STEP_READ_STRING; op->frame->step_read_string.ofs = 0; From 81c230bbaaf8b6dcb7c7109200ab1f9cda181a1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 14 Feb 2024 13:11:23 +0100 Subject: [PATCH 56/78] Parser: reduce TZ_FIELD_NAME_SIZE size to a more appropriate size --- app/src/parser/parser_state.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/parser/parser_state.h b/app/src/parser/parser_state.h index 942e7b234..a530c8010 100644 --- a/app/src/parser/parser_state.h +++ b/app/src/parser/parser_state.h @@ -41,7 +41,7 @@ typedef struct { // Parser state -#define TZ_FIELD_NAME_SIZE 80 +#define TZ_FIELD_NAME_SIZE 30 #define TZ_CAPTURE_BUFFER_SIZE 256 typedef enum { From b9312475f0f0e716d6a9b06c3a40982f4bb8dc56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 14 Feb 2024 13:14:29 +0100 Subject: [PATCH 57/78] Makefile: build the app with the latest app-builder version --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 889e35b14..fc1ca058d 100644 --- a/Makefile +++ b/Makefile @@ -25,8 +25,8 @@ docker_speculos: $(DOCKER) image tag $(LEDGERHQ)/speculos speculos docker_ledger_app_builder: - $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:3.14.0 - $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:3.14.0 \ + $(DOCKER) pull $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:latest + $(DOCKER) image tag $(LEDGERHQ)/ledger-app-builder/ledger-app-dev-tools:latest \ ledger-app-builder docker_ledger_app_ocaml: From e243bdc6a9571774a6b2ee93e5bd22b0e2ca7140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Palmer=20S=C3=A9bastien?= Date: Wed, 14 Feb 2024 17:08:38 +0100 Subject: [PATCH 58/78] Bump up the ledger-sdk in CI Co-authored-by: Ajinkya Rajandekar --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0b09579b7..2aa900c70 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: device: [nanos, nanosp, nanox, stax] runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:3.14.0 + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest steps: - name: Checkout uses: actions/checkout@v3 From 44957f4fbcf28d98d1b3e7ab985ef8d3e95ae73f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 14 Feb 2024 17:25:31 +0100 Subject: [PATCH 59/78] CodeQL: make strlcpy explicit --- app/src/handle_swap.c | 1 + app/src/parser/operation_parser.c | 2 ++ app/src/ui_strings.c | 1 + 3 files changed, 4 insertions(+) diff --git a/app/src/handle_swap.c b/app/src/handle_swap.c index 4c88bef1e..9f7a8a48d 100644 --- a/app/src/handle_swap.c +++ b/app/src/handle_swap.c @@ -24,6 +24,7 @@ #include #include +#include #include #include "handle_swap.h" diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 89bd9339c..2936818ee 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -16,6 +16,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +#include + #include "operation_parser.h" #include "micheline_parser.h" #include "num_parser.h" diff --git a/app/src/ui_strings.c b/app/src/ui_strings.c index 00bad70f0..11bd52f68 100644 --- a/app/src/ui_strings.c +++ b/app/src/ui_strings.c @@ -16,6 +16,7 @@ #include #include +#include #include "globals.h" #include "ui_strings.h" From 6494d357bff50fee343c25b6cbd250885c54581a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 14 Feb 2024 17:36:24 +0100 Subject: [PATCH 60/78] CodeQL: make all the enumeration items explicit if items other than the first are defined --- app/src/parser/micheline_state.h | 14 +++++++------- app/src/parser/parser_state.h | 22 +++++++++++----------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/src/parser/micheline_state.h b/app/src/parser/micheline_state.h index 2a2e60c4a..50b016423 100644 --- a/app/src/parser/micheline_state.h +++ b/app/src/parser/micheline_state.h @@ -50,13 +50,13 @@ typedef enum { } tz_micheline_parser_step_kind; typedef enum { - TZ_CAP_STREAM_ANY = 0, - TZ_CAP_STREAM_BYTES, - TZ_CAP_STREAM_INT, - TZ_CAP_STREAM_STRING, - TZ_CAP_ADDRESS, - TZ_CAP_LIST = 62, - TZ_CAP_OR + TZ_CAP_STREAM_ANY = 0, + TZ_CAP_STREAM_BYTES = 1, + TZ_CAP_STREAM_INT = 2, + TZ_CAP_STREAM_STRING = 3, + TZ_CAP_ADDRESS = 4, + TZ_CAP_LIST = 62, + TZ_CAP_OR = 63 } tz_micheline_capture_kind; typedef struct { diff --git a/app/src/parser/parser_state.h b/app/src/parser/parser_state.h index a530c8010..eb6e51f0e 100644 --- a/app/src/parser/parser_state.h +++ b/app/src/parser/parser_state.h @@ -47,19 +47,19 @@ typedef struct { typedef enum { // success and non blocking, should loop again TZ_CONTINUE = 0, // fall through rest of current step - TZ_BREAK, // signals caller to return, errno should be CONTINUE + TZ_BREAK = 1, // signals caller to return, errno should be CONTINUE // success but parsing blocked - TZ_BLO_DONE = 100, // parsing complete - TZ_BLO_FEED_ME, // blocked on read from input - TZ_BLO_IM_FULL, // blocked on output space + TZ_BLO_DONE = 100, // parsing complete + TZ_BLO_FEED_ME = 101, // blocked on read from input + TZ_BLO_IM_FULL = 102, // blocked on output space // everything below is an error - TZ_ERR_INVALID_TAG = 200, - TZ_ERR_INVALID_OP, - TZ_ERR_INVALID_DATA, - TZ_ERR_UNSUPPORTED, - TZ_ERR_TOO_LARGE, - TZ_ERR_TOO_DEEP, - TZ_ERR_INVALID_STATE, + TZ_ERR_INVALID_TAG = 200, + TZ_ERR_INVALID_OP = 201, + TZ_ERR_INVALID_DATA = 202, + TZ_ERR_UNSUPPORTED = 203, + TZ_ERR_TOO_LARGE = 204, + TZ_ERR_TOO_DEEP = 205, + TZ_ERR_INVALID_STATE = 206, } tz_parser_result; #define TZ_IS_BLOCKED(code) (code >= 100) #define TZ_IS_ERR(code) (code >= 200) From 7a2ff5e86cd121c57e54beb8510672949c84cb82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Wed, 14 Feb 2024 18:35:54 +0100 Subject: [PATCH 61/78] CodeQL: short tz_step_read_num switch case --- app/src/parser/operation_parser.c | 104 ++++++++++++++++-------------- 1 file changed, 55 insertions(+), 49 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 2936818ee..1f185ff86 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -486,6 +486,60 @@ tz_step_read_micheline(tz_parser_state *state) tz_reraise; } +static void +tz_format_amount(char *str) +{ + int len = 0; + while (str[len]) { + len++; + } + if ((len == 1) && (str[0] == 0)) { + // just 0 + goto add_currency; + } + if (len < 7) { + // less than one tez, pad left up to the '0.' + int j; + int pad = 7 - len; + for (j = len; j >= 0; j--) { + str[j + pad] = str[j]; + } + for (j = 0; j < pad; j++) { + str[j] = '0'; + } + len = 7; + } + int no_decimals = 1; + for (int i = 0; i < 6; i++) { + no_decimals &= (str[len - 1 - i] == '0'); + } + if (no_decimals) { + // integral value, don't include the decimal part (no '.'_ + str[len - 6] = 0; + len -= 6; + } else { + // more than one tez, add the '.' + for (int i = 0; i < 6; i++) { + str[len - i] = str[len - i - 1]; + } + str[len - 6] = '.'; + len++; + str[len] = 0; + // drop trailing non significant zeroes + while (str[len - 1] == '0') { + len--; + str[len] = 0; + } + } +add_currency: + str[len] = ' '; + str[len + 1] = 'X'; + str[len + 2] = 'T'; + str[len + 3] = 'Z'; + len += 4; + str[len] = 0; +} + /* Read a number */ static tz_parser_result tz_step_read_num(tz_parser_state *state) @@ -526,55 +580,7 @@ tz_step_read_num(tz_parser_state *state) break; case TZ_OPERATION_FIELD_FEE: case TZ_OPERATION_FIELD_AMOUNT: { - int len = 0; - while (str[len]) { - len++; - } - if ((len == 1) && (str[0] == 0)) { - // just 0 - goto add_currency; - } - if (len < 7) { - // less than one tez, pad left up to the '0.' - int j; - int pad = 7 - len; - for (j = len; j >= 0; j--) { - str[j + pad] = str[j]; - } - for (j = 0; j < pad; j++) { - str[j] = '0'; - } - len = 7; - } - int no_decimals = 1; - for (int i = 0; i < 6; i++) { - no_decimals &= (str[len - 1 - i] == '0'); - } - if (no_decimals) { - // integral value, don't include the decimal part (no '.'_ - str[len - 6] = 0; - len -= 6; - } else { - // more than one tez, add the '.' - for (int i = 0; i < 6; i++) { - str[len - i] = str[len - i - 1]; - } - str[len - 6] = '.'; - len++; - str[len] = 0; - // drop trailing non significant zeroes - while (str[len - 1] == '0') { - len--; - str[len] = 0; - } - } - add_currency: - str[len] = ' '; - str[len + 1] = 'X'; - str[len + 2] = 'T'; - str[len + 3] = 'Z'; - len += 4; - str[len] = 0; + tz_format_amount(str); break; } default: From 16c9630b9997edb1c6006f733f88d49832c47487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 15 Feb 2024 10:25:48 +0100 Subject: [PATCH 62/78] Documentation: add documentation for formatting.(c|h) --- app/src/parser/formatting.c | 101 ++++++++++++----- app/src/parser/formatting.h | 212 +++++++++++++++++++++++++++--------- 2 files changed, 232 insertions(+), 81 deletions(-) diff --git a/app/src/parser/formatting.c b/app/src/parser/formatting.c index 01cbc6696..d3de8c62d 100644 --- a/app/src/parser/formatting.c +++ b/app/src/parser/formatting.c @@ -16,12 +16,16 @@ #include "formatting.h" -// Should be kept in sync with the last protocol update, including -// order, currently defined in the `michelson_v1_primitives.ml` file -// in the Tezos protocol code. -// -// NEVER REORDER elements of this array as the index is used as a -// selector by `michelson_op_name`. +/** + * @brief Ordered array of names for michelson primitives + * + * Should be kept in sync with the last protocol update, including + * order, currently defined in the `michelson_v1_primitives.ml` file + * in the Tezos protocol code. + * + * NEVER REORDER elements of this array as the index is used as a + * selector by `michelson_op_name`. + */ const char *const tz_michelson_op_names_ordered[TZ_LAST_MICHELSON_OPCODE + 1] = { "parameter", // 0 @@ -203,6 +207,15 @@ tz_michelson_op_name(uint8_t op_code) static const char tz_b58digits_ordered[] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +/** + * @brief Get the base58 format of a number + * + * @param n: input number + * @param l: length of the input buffer + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + */ int tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen) { @@ -291,15 +304,49 @@ tz_format_decimal(const uint8_t *n, size_t l, char *obuf, size_t olen) // package does not publish their C header file for others to use, so // we are forced to piggy import the external definitions in order to // access them. + +/** + * @brief This struct represents the sha256 context + */ struct sha256_ctx { uint64_t sz; uint8_t buf[128]; uint32_t h[8]; }; + +/** + * @brief Initialize a sha256 context + * + * @param ctx: sha256 context + */ extern void digestif_sha256_init(struct sha256_ctx *ctx); + +/** + * @brief Update the sha256 context with data + * + * @param ctx: sha256 context + * @param data: data + * @param size: length of the data + */ extern void digestif_sha256_update(struct sha256_ctx *ctx, uint8_t *data, uint32_t size); + +/** + * @brief Finalize to digest the sha256 context + * + * @param ctx: sha256 context + * @param out: output buffer + */ extern void digestif_sha256_finalize(struct sha256_ctx *ctx, uint8_t *out); + +/** + * @brief Get the hash sha256 of a data + * + * @param data: data + * @param size: length of the data + * @param out: output buffer + * @param size_out: length of the output buffer + */ static void cx_hash_sha256(uint8_t *data, size_t size, uint8_t *out, size_t size_out) { @@ -312,26 +359,6 @@ cx_hash_sha256(uint8_t *data, size_t size, uint8_t *out, size_t size_out) } #endif -/* - * find_prefix() is passed in: - * s: the prefix we are looking for - * p: an out parameter which is the binary prefix we matched - * pl: another out parameter: the length of the returned binary prefix - * dl: the data length which we got - * - * To save lines and make things easier to read and modify, we implement - * find_prefix() as a series of invocations of the macro B58_PREFIX(). - * This macro takes 4 arguments: which correspond the the arguments of - * our function directly. It matches the textual prefixes and if they - * do match, it sets the output parameters and validates that the length - * is correct. - * - * find_prefix() returns successfully if it finds a definition and the - * length is correct. - * - * We turn off clang format for this so that we can line everything up. - */ - // clang-format off #define B58_PREFIX(_s, _p, _pl, _dl) do { \ if (!strcmp((_s), s)) { \ @@ -344,6 +371,26 @@ cx_hash_sha256(uint8_t *data, size_t size, uint8_t *out, size_t size_out) } \ } while (0) +/** + * @brief Get base58 prefix information + * + * To save lines and make things easier to read and modify, we + * implement find_prefix() as a series of invocations of the + * macro B58_PREFIX(). This macro takes 4 arguments: which + * correspond the the arguments of our function directly. It + * matches the textual prefixes and if they do match, it sets + * the output parameters and validates that the length is + * correct. + * + * find_prefix() returns successfully if it finds a definition + * and the length is correct. + * + * @param s: prefix we are looking for + * @param p: an out parameter which is the binary prefix we matched + * @param pl: another out parameter: the length of the returned binary prefix + * @param dl: data length which we got + * @return int: 0 on success + */ static int find_prefix(const char *s, const uint8_t **p, size_t *pl, size_t dl) { @@ -459,14 +506,12 @@ tz_format_pk(const uint8_t *data, size_t size, char *obuf, size_t olen) return tz_format_base58check(prefix, data + 1, size - 1, obuf, olen); } -/* Deprecated, use tz_format_base58check("o", ...) instead */ int tz_format_oph(const uint8_t *data, size_t size, char *obuf, size_t olen) { return tz_format_base58check("o", data, size, obuf, olen); } -/* Deprecated, use tz_format_base58check("B", ...) instead */ int tz_format_bh(const uint8_t *data, size_t size, char *obuf, size_t olen) { diff --git a/app/src/parser/formatting.h b/app/src/parser/formatting.h index 121e714e2..0436ca1e9 100644 --- a/app/src/parser/formatting.h +++ b/app/src/parser/formatting.h @@ -18,18 +18,34 @@ #include "compat.h" -// Returns the human readable name of a Michelson op_code if valid -// (`op_code <= LAST_MICHELSON_OPCODE`), or `NULL`. This function -// needs to be updated when new michelson instructions are added via a -// Tezos protocol upgrade to support new opcodes, the existing opcodes -// are guaranteed to stay unchanged, so not updating does not break -// security. -const char *tz_michelson_op_name(uint8_t op_code); +/** + * @brief Last Michelson operation code + * + * Should be kept in sync with the last protocol update. + */ #define TZ_LAST_MICHELSON_OPCODE 154 -// Should be kept in sync with the last protocol update, including -// order, currently defined in the `michelson_v1_primitives.ml` file -// in the Tezos protocol code. +/** + * @brief Get the human readable name of a Michelson op_code if valid + * (`op_code <= TZ_LAST_MICHELSON_OPCODE`), or `NULL`. + * + * This function needs to be updated when new michelson + * instructions are added via a Tezos protocol upgrade to + * support new opcodes, the existing opcodes are guaranteed to + * stay unchanged, so not updating does not break security. + * + * @param op_code: code of the michelson primitive + * @return const char*: name of the michelson primitive + */ +const char *tz_michelson_op_name(uint8_t op_code); + +/** + * @brief Enumeration of all Michelson operation code + * + * Should be kept in sync with the last protocol update, including + * order, currently defined in the `michelson_v1_primitives.ml` file + * in the Tezos protocol code. + */ typedef enum { TZ_MICHELSON_OP_parameter = 0, TZ_MICHELSON_OP_storage = 1, @@ -188,63 +204,153 @@ typedef enum { TZ_MICHELSON_OP_TICKET = 154 } tz_michelson_opcode; -// Formats a positive number of arbitrary to decimal. The number is -// stored in little-endian order in the first `l` bytes of `n`. The -// output buffer `obuf` must be at least `DECIMAL_BUFFER_SIZE(l)` -// (caller responsibility). -int tz_format_decimal(const uint8_t *n, size_t l, char *obuf, size_t olen); #define TZ_DECIMAL_BUFFER_SIZE(_l) ((((_l)*241) / 100) + 1) -// Formats a data `n` of size `l` in base58 using Tezos' alphabet -// order (same as Bitcoin). The output buffer `obuf` must be at least -// `BASE58_BUFFER_SIZE(l)` (caller responsibility). -int tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen); +/** + * @brief Formats a positive number of arbitrary to decimal. + * + * The number is stored in little-endian order in the first `l` + * bytes of `n`. The output buffer `obuf` must be at least + * `TZ_DECIMAL_BUFFER_SIZE(l)` (caller responsibility). + * + * @param n: input number + * @param l: length of the input number + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + */ +int tz_format_decimal(const uint8_t *n, size_t l, char *obuf, size_t olen); + #define TZ_BASE58_BUFFER_SIZE(_l) ((((_l)*138) / 100) + 1) -// Looks up the prefix from the provided string (arg1), e.g. "B", -// "o", "expr", "tz2", etc. This indexes into a table which finds -// the appropriate binary prefix and the data length which is required. -// Will return an error if the lengths do not match. Then it will -// add the provided prefix, append the four first bytes of a -// double-sha256 of this concatenation, and call `format_base58`. The -// output buffer `obuf` must be at least `BASE58CHECK_BUFFER_SIZE(l, -// prefix_len)` (caller responsibility). -int tz_format_base58check(const char *prefix, const uint8_t *ibuf, - size_t ilen, char *obuf, size_t olen); +/** + * @brief Formats a data `n` of size `l` in base58 using Tezos' + * alphabet order (same as Bitcoin). + * + * The output buffer `obuf` must be at least + * `BASE58_BUFFER_SIZE(l)` (caller responsibility). + * + * @param n: input data + * @param l: length of the input data + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + */ +int tz_format_base58(const uint8_t *n, size_t l, char *obuf, size_t olen); + #define TZ_BASE58CHECK_BUFFER_SIZE(_l, _p) \ TZ_BASE58_BUFFER_SIZE(((_p) + (_l)) + 4) -// Some Tezos-specific base58check formatters. These functions -// deconstruct the Tezos binary header to figure out the kind within -// the type (e.g. the curve for keys), check the length, and feed the -// appropriate prefix to `format_base58check`. These function need to -// be updated when new formats are added via a Tezos protocol upgrade. - -// size 21: tag(1) + pkh(20) -// tag 0: tz1(36) -// tag 1: tz2(36) -// tag 2: tz3(36) -// tag 3: tz4(36) +/** + * @brief Looks up the prefix from the provided string (arg1), + * e.g. "B", "o", "expr", "tz2", etc. + * + * This indexes into a table which finds the appropriate binary + * prefix and the data length which is required. Will return an + * error if the lengths do not match. Then it will add the + * provided prefix, append the four first bytes of a + * double-sha256 of this concatenation, and call + * `format_base58`. The output buffer `obuf` must be at least + * `TZ_BASE58CHECK_BUFFER_SIZE(l, prefix_len)` (caller + * responsibility). + * + * @param prefix: base58 prefix + * @param ibuf: input buffer + * @param ilen: length of the input buffer + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + */ +int tz_format_base58check(const char *prefix, const uint8_t *ibuf, + size_t ilen, char *obuf, size_t olen); + +/** + * Some Tezos-specific base58check formatters. These functions + * deconstruct the Tezos binary header to figure out the kind within + * the type (e.g. the curve for keys), check the length, and feed the + * appropriate prefix to `format_base58check`. These function need to + * be updated when new formats are added via a Tezos protocol upgrade. + */ + +/** + * @brief Get the public key hash format + * + * size 21: tag(1) + pkh(20) + * tag 0: tz1(36) + * tag 1: tz2(36) + * tag 2: tz3(36) + * tag 3: tz4(36) + * + * @param ibuf: input buffer + * @param ilen: length of the input buffer + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + */ int tz_format_pkh(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); -// size 32, o(51) +/** + * @brief Get the public key hash format + * + * size 32, o(51) + * + * @param ibuf: input buffer + * @param ilen: length of the input buffer + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + * + * @deprecated Use tz_format_base58check("o", ...) instead + */ int tz_format_oph(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); -// size 32, B(51) +/** + * @brief Get the public key hash format + * + * size 32, B(51) + * + * @param ibuf: input buffer + * @param ilen: length of the input buffer + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + * + * @deprecated Use tz_format_base58check("B", ...) instead + */ int tz_format_bh(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); -// size 22: tag(1) + data(21) -// tag 0: tag(1) + pkh(20) (tz1, tz2, tz3, tz4, see format_pkh) -// tag 1: txrolluph(20) + padding(1), KT1(36) -// tag 2: txrolluph(20) + padding(1), txr1(36) -// tag 3: rolluph(20) + padding(1), scr1(36) -// tag 4: zkrolluph(20) + padding(1), zkr1(36) +/** + * @brief Get the public key hash format + * + * size 22: tag(1) + data(21) + * tag 0: tag(1) + pkh(20) (tz1, tz2, tz3, tz4, see format_pkh) + * tag 1: txrolluph(20) + padding(1), KT1(36) + * tag 2: txrolluph(20) + padding(1), txr1(36) + * tag 3: rolluph(20) + padding(1), scr1(36) + * tag 4: zkrolluph(20) + padding(1), zkr1(36) + * + * @param ibuf: input buffer + * @param ilen: length of the input buffer + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + */ int tz_format_address(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); -// size 33/34/49: tag(1) + data(32/33/48) -// tag 0: pk(32), edpk(54) -// tag 1: pk(33), sppk(55) -// tag 2: pk(33), p2pk(55) -// tag 3: pk(48), BLpk(76) +/** + * @brief Get the address format + * + * size 33/34/49: tag(1) + data(32/33/48) + * tag 0: pk(32), edpk(54) + * tag 1: pk(33), sppk(55) + * tag 2: pk(33), p2pk(55) + * tag 3: pk(48), BLpk(76) + * + * @param ibuf: input buffer + * @param ilen: length of the input buffer + * @param obuf: output buffer + * @param olen: length of the output buffer + * @return int: 0 on success + */ int tz_format_pk(const uint8_t *ibuf, size_t ilen, char *obuf, size_t olen); From 32c4a08e8e1492426e98758c0ca06b03266b2655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 15 Feb 2024 11:39:12 +0100 Subject: [PATCH 63/78] Documentation: add documentation for parser_state.(c|h) --- app/src/parser/parser_state.c | 7 ++ app/src/parser/parser_state.h | 203 +++++++++++++++++++++++++--------- 2 files changed, 160 insertions(+), 50 deletions(-) diff --git a/app/src/parser/parser_state.c b/app/src/parser/parser_state.c index 33ff70f6f..14d1d1221 100644 --- a/app/src/parser/parser_state.c +++ b/app/src/parser/parser_state.c @@ -18,9 +18,16 @@ #include "parser_state.h" +/** + * @brief Helper to handle parser result case + */ #define TZ_LABEL(_x) \ case TZ_##_x: \ return #_x + +/** + * @brief Helper to handle blocking parser result case + */ #define BLO_LABEL(_x) \ case TZ_BLO_##_x: \ return #_x diff --git a/app/src/parser/parser_state.h b/app/src/parser/parser_state.h index eb6e51f0e..891c65c92 100644 --- a/app/src/parser/parser_state.h +++ b/app/src/parser/parser_state.h @@ -24,84 +24,179 @@ // Parser buffers and buffer handling registers +/** + * @brief This struct represents the parser register. + * + * It contains an output and an input buffers + */ typedef struct { - // update `ibuf`, `iofs` and `ilen` at once with `parser_regs_refill` - // invariant between two refills: - // `iofs + ilen` = (constant) number of readable bytes in `ibuf` - uint8_t *ibuf; // input buffer - size_t iofs; // current offset - size_t ilen; // remaining bytes readable in input - // update `obuf`, `oofs` and `olen` at once with `parser_regs_flush` - // invariant between two refills: - // `oofs + olen` = (constant) number of readable bytes in `obuf` - char *obuf; // output buffer - size_t oofs; // current offset - size_t olen; // remaining bytes writable in output + /// update `ibuf`, `iofs` and `ilen` at once with `parser_regs_refill` + /// invariant between two refills: + /// `iofs + ilen` = (constant) number of readable bytes in `ibuf` + uint8_t *ibuf; /// input buffer + size_t iofs; /// current offset + size_t ilen; /// remaining bytes readable in input + /// update `obuf`, `oofs` and `olen` at once with `parser_regs_flush` + /// invariant between two refills: + /// `oofs + olen` = (constant) number of readable bytes in `obuf` + char *obuf; /// output buffer + size_t oofs; /// current offset + size_t olen; /// remaining bytes writable in output } tz_parser_regs; // Parser state -#define TZ_FIELD_NAME_SIZE 30 -#define TZ_CAPTURE_BUFFER_SIZE 256 +#define TZ_FIELD_NAME_SIZE 30 /// Size of the field name buffer +#define TZ_CAPTURE_BUFFER_SIZE 256 /// Size of the capture buffer +/** + * @brief Enumeration of all kinds of results meaningful to the parser + */ typedef enum { - // success and non blocking, should loop again - TZ_CONTINUE = 0, // fall through rest of current step - TZ_BREAK = 1, // signals caller to return, errno should be CONTINUE - // success but parsing blocked - TZ_BLO_DONE = 100, // parsing complete - TZ_BLO_FEED_ME = 101, // blocked on read from input - TZ_BLO_IM_FULL = 102, // blocked on output space - // everything below is an error - TZ_ERR_INVALID_TAG = 200, - TZ_ERR_INVALID_OP = 201, - TZ_ERR_INVALID_DATA = 202, - TZ_ERR_UNSUPPORTED = 203, - TZ_ERR_TOO_LARGE = 204, - TZ_ERR_TOO_DEEP = 205, - TZ_ERR_INVALID_STATE = 206, + /// success and non blocking, should loop again + TZ_CONTINUE = 0, /// fall through rest of current step + TZ_BREAK = 1, /// signals caller to return, errno should be CONTINUE + /// success but parsing blocked + TZ_BLO_DONE = 100, /// parsing complete + TZ_BLO_FEED_ME = 101, /// blocked on read from input + TZ_BLO_IM_FULL = 102, /// blocked on output space + /// everything below is an error + TZ_ERR_INVALID_TAG = 200, /// an invalid tag has been found + TZ_ERR_INVALID_OP + = 201, /// an invalid michelson operation has been found + TZ_ERR_INVALID_DATA = 202, /// a data has been considered as invalid + TZ_ERR_UNSUPPORTED = 203, /// a non-supported action has been triggered + TZ_ERR_TOO_LARGE = 204, /// too large data has been found + TZ_ERR_TOO_DEEP = 205, /// too deep data has been found + TZ_ERR_INVALID_STATE = 206, /// parser is in an invalid state } tz_parser_result; -#define TZ_IS_BLOCKED(code) (code >= 100) -#define TZ_IS_ERR(code) (code >= 200) +#define TZ_IS_BLOCKED(code) \ + (code >= 100) /// If the result is a blocking result +#define TZ_IS_ERR(code) (code >= 200) /// If the result is an error + +/** + * @brief Get the human readable name of a parser result + * + * @param code: parser result + * @return const char*: name of the parser result + */ const char *tz_parser_result_name(tz_parser_result code); +/** + * @brief This struct represents the parser state. + */ typedef struct { - tz_parser_regs regs; + tz_parser_regs regs; /// parser register - // common fields to communicate with caller - tz_parser_result errno; + /// common fields to communicate with caller + tz_parser_result errno; /// current parser result struct { - char field_name[TZ_FIELD_NAME_SIZE]; - bool is_field_complex; - int field_index; - } field_info; - // common singleton buffers - int ofs; + char field_name[TZ_FIELD_NAME_SIZE]; /// name of the last field + /// parsed + bool is_field_complex; /// if the last field parsed is considered + /// too complex for a common user + int field_index; /// index of the last field parsed + } field_info; /// information of the last field parsed + // common singleton buffers + int ofs; /// offset for the parser struct { - tz_num_parser_buffer num; - uint8_t capture[TZ_CAPTURE_BUFFER_SIZE]; + tz_num_parser_buffer num; /// number parser buffer + uint8_t capture[TZ_CAPTURE_BUFFER_SIZE]; /// capture buffer is used + /// to store string values } buffers; - // input type specific state - tz_micheline_state micheline; - tz_operation_state operation; + /// input type specific state + tz_micheline_state micheline; /// micheline parser state + tz_operation_state operation; /// operation parser state } tz_parser_state; +/** + * @brief Initialize a parser state + * + * @param state: parser state + */ void tz_parser_init(tz_parser_state *state); + +/** + * @brief Flush what has been parsed + * + * @param state: parser state + * @param obuf: ouput buffer + * @param olen: length of the output buffer + */ void tz_parser_flush(tz_parser_state *state, char *obuf, size_t olen); + +/** + * @brief Flush a part of what has been parsed + * + * @param state: parser state + * @param obuf: ouput buffer + * @param olen: length of the output buffer + * @param up_to: length of what we want to flush up to + */ void tz_parser_flush_up_to(tz_parser_state *state, char *obuf, size_t olen, size_t up_to); + +/** + * @brief Refill what should be parsed + * + * @param state: parser state + * @param ibuf: input buffer + * @param ilen: length of the input buffer + */ void tz_parser_refill(tz_parser_state *state, uint8_t *ibuf, size_t ilen); + +/** + * @brief Skip to next byte + * + * @param state: parser state + */ void tz_parser_skip(tz_parser_state *state); +/** + * @brief Put a character at the end of was has been parsed + * + * @param state: parser state + * @param c: character + * @return tz_parser_result: parser result + */ tz_parser_result tz_parser_put(tz_parser_state *state, char c); + +/** + * @brief Read a bytes + * + * @param state: parser state + * @param out: output character pointer + * @return tz_parser_result: parser result + */ tz_parser_result tz_parser_read(tz_parser_state *state, uint8_t *out); + +/** + * @brief Peek a bytes + * + * @param state: parser state + * @param out: output character pointer + * @return tz_parser_result: parser result + */ tz_parser_result tz_parser_peek(tz_parser_state *state, uint8_t *out); // error handling utils +/** + * @brief Set and raise a parser result + * + * @param state: parser state + * @param code: parser result to set + * @return tz_parser_result: parser result raised + */ tz_parser_result tz_parser_set_errno(tz_parser_state *state, tz_parser_result code); + +/** + * @brief Set a parser result and raise + * + * Expect a `state` variable + */ #ifdef TEZOS_DEBUG #define tz_return(e) \ do { \ @@ -115,9 +210,16 @@ tz_parser_result tz_parser_set_errno(tz_parser_state *state, #else #define tz_return(e) return tz_parser_set_errno(state, e) #endif -#define tz_raise(e) tz_return(TZ_ERR_##e) -#define tz_stop(e) tz_return(TZ_BLO_##e) -#define tz_reraise return state->errno + +#define tz_raise(e) tz_return(TZ_ERR_##e) /// Raise an parser error +#define tz_stop(e) tz_return(TZ_BLO_##e) /// Stop the parser +#define tz_reraise return state->errno /// Re-raise the parser result + +/** + * @brief Raise if the condition did not continue + * + * Usually used to ensure that the parser did not raise any error + */ #define tz_must(cond) \ do { \ tz_parser_result _err = cond; \ @@ -125,5 +227,6 @@ tz_parser_result tz_parser_set_errno(tz_parser_state *state, tz_return(_err); \ } \ } while (0) -#define tz_continue tz_return(TZ_CONTINUE) -#define tz_break tz_return(TZ_BREAK) + +#define tz_continue tz_return(TZ_CONTINUE) /// continue parsing +#define tz_break tz_return(TZ_BREAK) /// break parsing From d2b3274813cb394047c2a407101f3d8ab2fc42dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 15 Feb 2024 12:04:49 +0100 Subject: [PATCH 64/78] Documentation: add documentation for number parser --- app/src/parser/num_parser.h | 45 +++++++++++++++++++++++++++++++++++-- app/src/parser/num_state.h | 19 +++++++++++----- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/app/src/parser/num_parser.h b/app/src/parser/num_parser.h index d46bf3124..9944e5d29 100644 --- a/app/src/parser/num_parser.h +++ b/app/src/parser/num_parser.h @@ -19,14 +19,55 @@ #include "parser_state.h" -void tz_parse_num_state_init(tz_num_parser_buffer *buffers, - tz_num_parser_regs *regs); +/** + * @brief Initialize a num state buffer and a num state regs + * + * @param buffers: number parser buffers + * @param regs: number parser register + */ +void tz_parse_num_state_init(tz_num_parser_buffer *buffers, + tz_num_parser_regs *regs); + +/** + * @brief Parse one byte + * + * @param buffers: number parser buffers + * @param regs: number parser register + * @param b: byte to parse + * @param natural: if the number to read is natural + * @return tz_parser_result: parser result + */ tz_parser_result tz_parse_num_step(tz_num_parser_buffer *buffers, tz_num_parser_regs *regs, uint8_t b, bool natural); + +/** + * @brief Parse one byte to read an integer + * + * @param buffers: number parser buffers + * @param regs: number parser register + * @param b: byte to parse + * @return tz_parser_result: parser result + */ tz_parser_result tz_parse_int_step(tz_num_parser_buffer *buffers, tz_num_parser_regs *regs, uint8_t b); + +/** + * @brief Parse one byte to read a natural number + * + * @param buffers: number parser buffers + * @param regs: number parser register + * @param b: byte to parse + * @return tz_parser_result: parser result + */ tz_parser_result tz_parse_nat_step(tz_num_parser_buffer *buffers, tz_num_parser_regs *regs, uint8_t b); +/** + * @brief format a buffer to mutez number + * + * @param in: intput buffer + * @param out: output number + * @return bool: success + */ bool tz_string_to_mutez(const char *in, uint64_t *out); diff --git a/app/src/parser/num_state.h b/app/src/parser/num_state.h index 363e2ac14..60a4b0da9 100644 --- a/app/src/parser/num_state.h +++ b/app/src/parser/num_state.h @@ -18,14 +18,23 @@ #include "formatting.h" +/** + * @brief This struct represents the register for the parser of a number + * + * The parser is a one-by-one byte reader. + */ typedef struct { - uint16_t size; - uint8_t sign : 1, stop : 1; + uint16_t size; /// size of the number + uint8_t sign : 1; /// sign ot the number + uint8_t stop : 1; /// number as been fully parsed } tz_num_parser_regs; -#define TZ_NUM_BUFFER_SIZE 256 +#define TZ_NUM_BUFFER_SIZE 256 /// Size of the number buffer +/** + * @brief This struct represents the output buffers for the parser of a number + */ typedef struct { - uint8_t bytes[TZ_NUM_BUFFER_SIZE / 8]; - char decimal[TZ_DECIMAL_BUFFER_SIZE(TZ_NUM_BUFFER_SIZE / 8)]; + uint8_t bytes[TZ_NUM_BUFFER_SIZE / 8]; /// bytes + char decimal[TZ_DECIMAL_BUFFER_SIZE(TZ_NUM_BUFFER_SIZE / 8)]; /// decimal } tz_num_parser_buffer; From 7317abb68afb96ea4f90d00ef77b22313404999f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 15 Feb 2024 14:02:19 +0100 Subject: [PATCH 65/78] Documentation: add documentation for micheline parser --- app/src/parser/micheline_parser.c | 41 +++++++++++++++ app/src/parser/micheline_parser.h | 14 ++++- app/src/parser/micheline_state.h | 87 ++++++++++++++++++++----------- 3 files changed, 112 insertions(+), 30 deletions(-) diff --git a/app/src/parser/micheline_parser.c b/app/src/parser/micheline_parser.c index 36be70674..a7209c77c 100644 --- a/app/src/parser/micheline_parser.c +++ b/app/src/parser/micheline_parser.c @@ -49,6 +49,13 @@ tz_micheline_parser_init(tz_parser_state *state) m->stack[0].step = TZ_MICHELINE_STEP_TAG; } +/** + * @brief Push a new frame onto the micheline parser stack + * + * @param state: parser state + * @param step: step of the new frame + * @return tz_parser_result: parser result + */ static tz_parser_result push_frame(tz_parser_state *state, tz_micheline_parser_step_kind step) { @@ -62,6 +69,12 @@ push_frame(tz_parser_state *state, tz_micheline_parser_step_kind step) tz_continue; } +/** + * @brief Pop the micheline parser stack + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result pop_frame(tz_parser_state *state) { @@ -75,6 +88,12 @@ pop_frame(tz_parser_state *state) tz_continue; } +/** + * @brief Ask to read a 4-bytes size + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result begin_sized(tz_parser_state *state) { @@ -88,6 +107,13 @@ begin_sized(tz_parser_state *state) tz_continue; } +/** + * @brief Ask to print an escape character + * + * @param state: parser state + * @param b: escape character + * @return tz_parser_result: parser result + */ static tz_parser_result print_escaped(tz_parser_state *state, uint8_t b) { @@ -112,6 +138,13 @@ print_escaped(tz_parser_state *state, uint8_t b) tz_continue; } +/** + * @brief Print a character + * + * @param state: parser state + * @param c: character + * @return tz_parser_result: parser result + */ static tz_parser_result parser_put(tz_parser_state *state, char c) { @@ -119,6 +152,14 @@ parser_put(tz_parser_state *state, char c) return tz_parser_put(state, c); } +/** + * @brief Plan the steps required to read the micheline value + * associated to the micheline tag + * + * @param state: parser state + * @param t: micheline tag + * @return tz_parser_result: parser result + */ static tz_parser_result tag_selection(tz_parser_state *state, uint8_t t) { diff --git a/app/src/parser/micheline_parser.h b/app/src/parser/micheline_parser.h index d331dcfeb..29073a014 100644 --- a/app/src/parser/micheline_parser.h +++ b/app/src/parser/micheline_parser.h @@ -18,5 +18,17 @@ #include "parser_state.h" -void tz_micheline_parser_init(tz_parser_state *state); +/** + * @brief Initialize a micheline parser state + * + * @param state: parser state + */ +void tz_micheline_parser_init(tz_parser_state *state); + +/** + * @brief Apply one step to the micheline parser + * + * @param state: parser state + * @return tz_parser_result: parser result + */ tz_parser_result tz_micheline_parser_step(tz_parser_state *state); diff --git a/app/src/parser/micheline_state.h b/app/src/parser/micheline_state.h index 50b016423..d77ddaf5a 100644 --- a/app/src/parser/micheline_state.h +++ b/app/src/parser/micheline_state.h @@ -18,8 +18,11 @@ #include "num_state.h" -#define TZ_MICHELINE_STACK_DEPTH 45 +#define TZ_MICHELINE_STACK_DEPTH 45 /// Maximum micheline depth handled +/** + * @brief Enumeration of all micheline tags + */ typedef enum { TZ_MICHELINE_TAG_INT, TZ_MICHELINE_TAG_STRING, @@ -34,6 +37,9 @@ typedef enum { TZ_MICHELINE_TAG_BYTES } tz_micheline_tag; +/** + * @brief Enumeration of all micheline parser step + */ typedef enum { TZ_MICHELINE_STEP_TAG, TZ_MICHELINE_STEP_PRIM_OP, @@ -49,6 +55,9 @@ typedef enum { TZ_MICHELINE_STEP_PRINT_CAPTURE } tz_micheline_parser_step_kind; +/** + * @brief + */ typedef enum { TZ_CAP_STREAM_ANY = 0, TZ_CAP_STREAM_BYTES = 1, @@ -59,45 +68,65 @@ typedef enum { TZ_CAP_OR = 63 } tz_micheline_capture_kind; +/** + * @brief This struct represents the frame of the parser of micheline + * + * A frame contains the next step to be performed and its + * corresponding context + */ typedef struct { - tz_micheline_parser_step_kind step : 4; - uint16_t stop; + tz_micheline_parser_step_kind step : 4; /// step + uint16_t stop; /// stop offset union { struct { - uint16_t size; - } step_size; // TZ_MICHELINE_STEP_SIZE + uint16_t size; /// size read + } step_size; /// TZ_MICHELINE_STEP_SIZE struct { - uint8_t first : 1; - } step_seq; // TZ_MICHELINE_STEP_SEQ + uint8_t first : 1; /// if read first byte + } step_seq; /// TZ_MICHELINE_STEP_SEQ struct { - uint8_t first : 1, has_rem_half : 1; - uint8_t rem_half; - } step_bytes; // TZ_MICHELINE_STEP_BYTES + uint8_t first : 1; /// if read first byte + uint8_t has_rem_half : 1; /// if half the byte remains to print + uint8_t rem_half; /// remaining half of the byte + } step_bytes; /// TZ_MICHELINE_STEP_BYTES struct { - uint8_t first : 1; - } step_string; // TZ_MICHELINE_STEP_STRING + uint8_t first : 1; /// if read first byte + } step_string; /// TZ_MICHELINE_STEP_STRING struct { - uint8_t first : 1; - } step_annot; // TZ_MICHELINE_STEP_ANNOT - tz_num_parser_regs step_int; // TZ_MICHELINE_STEP_INT, - // TZ_MICHELINE_STEP_PRINT_INT + uint8_t first : 1; /// if read first byte + } step_annot; /// TZ_MICHELINE_STEP_ANNOT + tz_num_parser_regs step_int; /// number parser register + /// TZ_MICHELINE_STEP_INT, + /// TZ_MICHELINE_STEP_PRINT_INT struct { - uint8_t op; - uint8_t ofs; - uint8_t nargs : 2, wrap : 1, spc : 1, annot : 1, first : 1; - } step_prim; // TZ_MICHELINE_STEP_PRIM_OP, - // TZ_MICHELINE_STEP_PRIM_NAME, - // TZ_MICHELINE_STEP_PRIM + uint8_t op; /// prim op + uint8_t ofs; /// offset + uint8_t nargs : 2; /// number of arguments + uint8_t wrap : 1; /// if wrap in a prim + uint8_t spc : 1; /// if has space + uint8_t annot : 1; /// if need to read an annotation + uint8_t first : 1; /// if read first byte + } step_prim; /// TZ_MICHELINE_STEP_PRIM_OP, + /// TZ_MICHELINE_STEP_PRIM_NAME, + /// TZ_MICHELINE_STEP_PRIM struct { - int ofs; - } step_capture; // TZ_MICHELINE_STEP_CAPTURE_BYTES, - // TZ_MICHELINE_STEP_PRINT_CAPTURE - tz_micheline_capture_kind - step_capturing; // TZ_MICHELINE_STEP_CAPTURING + int ofs; /// offset of the capture buffer + } step_capture; /// TZ_MICHELINE_STEP_CAPTURE_BYTES, + /// TZ_MICHELINE_STEP_PRINT_CAPTURE }; } tz_micheline_parser_frame; +/** + * @brief This struct represents the parser of micheline + * + * The parser is a one-by-one byte reader. It uses a stack + * automaton, for which each frame of the stack represents the + * reading states of the different layers of the micheline + * value read. + */ typedef struct { - tz_micheline_parser_frame stack[TZ_MICHELINE_STACK_DEPTH]; - tz_micheline_parser_frame *frame; // init == stack, NULL when done + tz_micheline_parser_frame + stack[TZ_MICHELINE_STACK_DEPTH]; /// stack of frames + tz_micheline_parser_frame *frame; /// current frame + /// init == stack, NULL when done } tz_micheline_state; From c11fc8ace79a909ed087f18d4be2f0987e3b0502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Thu, 15 Feb 2024 17:05:52 +0100 Subject: [PATCH 66/78] Documentation: add documentation for operations parser --- app/src/parser/operation_parser.c | 233 ++++++++++++++++++++++++++---- app/src/parser/operation_parser.h | 31 ++++ app/src/parser/operation_state.h | 182 +++++++++++++++-------- 3 files changed, 358 insertions(+), 88 deletions(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 1f185ff86..4139be093 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -52,6 +52,10 @@ const char *const tz_operation_parser_step_name[] = {"OPTION", "READ_BALLOT", "READ_PROTOS"}; +/** + * @brief Get the string format of an operations step + * + */ #define STRING_STEP(step) \ (const char *)PIC(tz_operation_parser_step_name[step]) @@ -60,12 +64,29 @@ const char *const tz_operation_parser_step_name[] = {"OPTION", // clang-format off // Default .skip=false, .complex=false + +/** + * @brief Helper to create an operation field descriptor + * + * @required name: name of the field + * @required kind: kind of the field + * + * By default .skip=false, .complex=false + */ #define TZ_OPERATION_FIELD(name_v, kind_v, ...) \ {.name=name_v, .kind=kind_v, __VA_ARGS__} -#define TZ_OPERATION_LAST_FIELD {0} +#define TZ_OPERATION_LAST_FIELD {0} /// Empty field with an END step -// Default .skip=false, .complex=false +/** + * @brief Helper to create an operation option field descriptor + * + * @required name: name of the option field + * @required field: field of the option field + * @required display_none: display if is none + * + * By default .skip=false, .complex=false + */ #define TZ_OPERATION_OPTION_FIELD(name_v, field_v, display_none, ...) \ {.name=name_v, .kind=TZ_OPERATION_FIELD_OPTION, \ .field_option={ \ @@ -74,6 +95,12 @@ const char *const tz_operation_parser_step_name[] = {"OPTION", }, \ __VA_ARGS__} +/** + * @brief Helper to create an operation tuple field descriptor + * + * @required name: name of the tuple field + * @required fields: fields of the tuple field + */ #define TZ_OPERATION_TUPLE_FIELD(name_v, ...) \ {.name=name_v, .kind=TZ_OPERATION_FIELD_TUPLE, \ .field_tuple={ \ @@ -84,6 +111,12 @@ const char *const tz_operation_parser_step_name[] = {"OPTION", } \ } +/** + * @brief Helper to create an operation descriptor + * + * @required name: name of the operation + * @required fields: fields of the operation + */ #define TZ_OPERATION_FIELDS(name, ...) \ const tz_operation_field_descriptor name[] = { __VA_ARGS__, TZ_OPERATION_LAST_FIELD} @@ -104,6 +137,9 @@ TZ_OPERATION_FIELDS(failing_noop_fields, TZ_OPERATION_FIELD("Message", TZ_OPERATION_FIELD_BINARY) ); +/** + * @brief Set of fields for manager operations + */ #define TZ_OPERATION_MANAGER_OPERATION_FIELDS \ TZ_OPERATION_FIELD("Source", TZ_OPERATION_FIELD_SOURCE), \ TZ_OPERATION_FIELD("Fee", TZ_OPERATION_FIELD_FEE), \ @@ -197,6 +233,9 @@ TZ_OPERATION_FIELDS(soru_origin_fields, TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, .complex=true) ); +/** + * @brief Array of all handled operations + */ const tz_operation_descriptor tz_operation_descriptors[] = { {TZ_OPERATION_TAG_PROPOSALS, "Proposals", proposals_fields }, {TZ_OPERATION_TAG_BALLOT, "Ballot", ballot_fields }, @@ -217,9 +256,16 @@ const tz_operation_descriptor tz_operation_descriptors[] = { }; // clang-format on -static const char *expression_name = "Expression"; -static const char *unset_message = "Field unset"; +static const char *expression_name = "Expression"; /// title for micheline +static const char *unset_message = "Field unset"; /// title for unset field +/** + * @brief Push a new frame onto the operations parser stack + * + * @param state: parser state + * @param step: step of the new frame + * @return tz_parser_result: parser result + */ static tz_parser_result push_frame(tz_parser_state *state, tz_operation_parser_step_kind step) { @@ -233,6 +279,12 @@ push_frame(tz_parser_state *state, tz_operation_parser_step_kind step) tz_continue; } +/** + * @brief Pop the operations parser stack + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result pop_frame(tz_parser_state *state) { @@ -294,9 +346,14 @@ tz_operation_parser_init(tz_parser_state *state, uint16_t size, * the size of the buffer. This allows us to more idiomatically * check the size of buffers. */ - #define CAPTURE (state->buffers.capture) +/** + * @brief Ask to print what has been captured + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_print_string(tz_parser_state *state) { @@ -311,6 +368,9 @@ tz_print_string(tz_parser_state *state) tz_continue; } +/** + * @brief Helper to assert the current step + */ #define ASSERT_STEP(state, expected_step) \ do { \ tz_operation_parser_step_kind step = (state)->operation.frame->step; \ @@ -322,7 +382,14 @@ tz_print_string(tz_parser_state *state) } \ } while (0) -/* Update the state in order to read the field if it is present */ +/** + * @brief Try to read an optionnal field + * + * If the field is present, ask to read it. + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_option(tz_parser_state *state) { @@ -347,7 +414,12 @@ tz_step_option(tz_parser_state *state) tz_continue; } -/* Update the state in order to read the fields in a field tuple */ +/** + * @brief Ask to read remaining fields of a tuple field + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_tuple(tz_parser_state *state) { @@ -376,6 +448,15 @@ tz_step_tuple(tz_parser_state *state) /* Update the state in order to read an operation or a micheline expression * based on a magic byte */ +/** + * @brief Read a magic byte and plan nexts steps + * + * The magic byte identifies if the data to read is a micheline + * expression or a batch of operations + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_magic(tz_parser_state *state) { @@ -408,7 +489,12 @@ tz_step_magic(tz_parser_state *state) tz_continue; } -/* Read a 4-byte size */ +/** + * @brief Read a 4-bytes size + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_size(tz_parser_state *state) { @@ -428,7 +514,13 @@ tz_step_size(tz_parser_state *state) tz_continue; } -/* Update the state in order to read an operation based on a tag byte */ +/** + * @brief Find the operation associated to the operation tag and ask + * to read its fields + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_tag(tz_parser_state *state) { @@ -458,7 +550,12 @@ tz_step_tag(tz_parser_state *state) tz_raise(INVALID_TAG); } -/* Read a micheline expression */ +/** + * @brief Read a micheline expression + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_micheline(tz_parser_state *state) { @@ -486,6 +583,11 @@ tz_step_read_micheline(tz_parser_state *state) tz_reraise; } +/** + * @brief Format a string as an amount + * + * @param str: string to format + */ static void tz_format_amount(char *str) { @@ -540,7 +642,12 @@ tz_format_amount(char *str) str[len] = 0; } -/* Read a number */ +/** + * @brief Read a number + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_num(tz_parser_state *state) { @@ -591,7 +698,12 @@ tz_step_read_num(tz_parser_state *state) tz_continue; } -/* Read an int32 */ +/** + * @brief Read an int32 + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_int32(tz_parser_state *state) { @@ -611,7 +723,12 @@ tz_step_read_int32(tz_parser_state *state) tz_continue; } -/* Read bytes */ +/** + * @brief Read bytes + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_bytes(tz_parser_state *state) { @@ -688,7 +805,12 @@ tz_step_read_bytes(tz_parser_state *state) tz_continue; } -/* Update the state in order to read a batch of operations */ +/** + * @brief Plan the steps to read a batch of operations + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_branch(tz_parser_state *state) { @@ -699,8 +821,11 @@ tz_step_branch(tz_parser_state *state) tz_continue; } -/* Update the state in order to read the next operation in a batch of - * operations +/** + * @brief Ask to read remaining operations of a batch of operations + * + * @param state: parser state + * @return tz_parser_result: parser result */ static tz_parser_result tz_step_batch(tz_parser_state *state) @@ -718,7 +843,12 @@ tz_step_batch(tz_parser_state *state) tz_continue; } -/* Read a string */ +/** + * @brief Read a string + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_string(tz_parser_state *state) { @@ -736,7 +866,12 @@ tz_step_read_string(tz_parser_state *state) tz_continue; } -/* Read a binary */ +/** + * @brief Read a binary + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_binary(tz_parser_state *state) { @@ -763,7 +898,12 @@ tz_step_read_binary(tz_parser_state *state) tz_continue; } -/* Read an entrypoint */ +/** + * @brief Read a smart entrypoint + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_smart_entrypoint(tz_parser_state *state) { @@ -825,9 +965,14 @@ tz_step_read_smart_entrypoint(tz_parser_state *state) tz_continue; } -/* Update the state in order to read a field of an operation based on its kind - * If the field is not ignored, update the field_info with the field - * information +/** + * @brief Plan the steps required to read the current operation field + * + * Update the current field info only if the field is not + * ignored + * + * @param state: parser state + * @return tz_parser_result: parser result */ static tz_parser_result tz_step_field(tz_parser_state *state) @@ -1001,7 +1146,12 @@ tz_step_field(tz_parser_state *state) tz_continue; } -/* Read a public key */ +/** + * @brief Read a public key + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_pk(tz_parser_state *state) { @@ -1031,7 +1181,12 @@ tz_step_read_pk(tz_parser_state *state) tz_continue; } -/* Read soru messages */ +/** + * @brief Read soru messages + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_soru_messages(tz_parser_state *state) { @@ -1063,7 +1218,12 @@ tz_step_read_soru_messages(tz_parser_state *state) tz_continue; } -/* Read a soru kind */ +/** + * @brief Read a soru kind + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_soru_kind(tz_parser_state *state) { @@ -1084,7 +1244,12 @@ tz_step_read_soru_kind(tz_parser_state *state) tz_continue; } -/* Read a ballot */ +/** + * @brief Read a ballot + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_ballot(tz_parser_state *state) { @@ -1108,7 +1273,12 @@ tz_step_read_ballot(tz_parser_state *state) tz_continue; } -/* Read protocols */ +/** + * @brief Read a protocol list + * + * @param state: parser state + * @return tz_parser_result: parser result + */ static tz_parser_result tz_step_read_protos(tz_parser_state *state) { @@ -1138,8 +1308,13 @@ tz_step_read_protos(tz_parser_state *state) tz_continue; } -/* Print a string - * if partial is true, then the string is not yet complete +/** + * @brief Print a string + * + * @param state: parser state + * @param partial: If partial true, then the string is not yet + * complete + * @return tz_parser_result: parser result */ static tz_parser_result tz_step_print(tz_parser_state *state, bool partial) diff --git a/app/src/parser/operation_parser.h b/app/src/parser/operation_parser.h index 1777c3804..afe790a72 100644 --- a/app/src/parser/operation_parser.h +++ b/app/src/parser/operation_parser.h @@ -19,7 +19,38 @@ #include "parser_state.h" #define TZ_UNKNOWN_SIZE 0xFFFFu + +/** + * @brief Initialize a operations parser state + * + * As operations can be very large, the size of the data to + * parse can be unknown in that case size can be set to + * `TZ_UNKNOWN_SIZE`. The size can then be set with + * `tz_operation_parser_set_size` + * + * @param state: parser state + * @param size: size of operations + * @param skip_magic: set it to false if a magic byte needs to be + * analysed to find out whether the bytes represent + * a micheline expression or a batch of + * operations. Otherwise, it will assume that the + * bytes represent a batch of operations. + */ void tz_operation_parser_init(tz_parser_state *state, uint16_t size, bool skip_magic); + +/** + * @brief Set the operations size + * + * @param state: parser state + * @param size: size of operations + */ void tz_operation_parser_set_size(tz_parser_state *state, uint16_t size); + +/** + * @brief Apply one step to the operations parser + * + * @param state: parser state + * @return tz_parser_result: parser result + */ tz_parser_result tz_operation_parser_step(tz_parser_state *state); diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index eae58b6dd..9f7ba3467 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -19,6 +19,9 @@ #include "num_state.h" +/** + * @brief Enumeration of all operations tags + */ typedef enum { TZ_OPERATION_TAG_END = 0, TZ_OPERATION_TAG_PROPOSALS = 5, @@ -38,6 +41,9 @@ typedef enum { TZ_OPERATION_TAG_SORU_EXE_MSG = 206 } tz_operation_tag; +/** + * @brief Enumeration of all operations parser step + */ typedef enum { TZ_OPERATION_STEP_OPTION, TZ_OPERATION_STEP_TUPLE, @@ -63,6 +69,9 @@ typedef enum { TZ_OPERATION_STEP_READ_PROTOS } tz_operation_parser_step_kind; +/** + * @brief Enumeration of all operations fields + */ typedef enum { TZ_OPERATION_FIELD_END = 0, // not for use in field descriptors TZ_OPERATION_FIELD_OPTION, @@ -93,93 +102,148 @@ typedef enum { struct tz_operation_field_descriptor; +/** + * @brief This struct represents the field descriptor of an option field + */ typedef struct { - const struct tz_operation_field_descriptor *field; - uint8_t display_none : 1; + const struct tz_operation_field_descriptor *field; /// field descriptor + uint8_t display_none : 1; /// display if is none } tz_operation_option_field_descriptor; +/** + * @brief This struct represents the descriptor of field + */ typedef struct tz_operation_field_descriptor { - const char *name; - tz_operation_field_kind kind : 5; + const char *name; /// name + tz_operation_field_kind kind : 5; /// kind union { - tz_operation_option_field_descriptor field_option; + tz_operation_option_field_descriptor + field_option; /// field of the option + /// TZ_OPERATION_FIELD_OPTION + struct { - const struct tz_operation_field_descriptor *fields; - } field_tuple; + const struct tz_operation_field_descriptor + *fields; /// fields of the tuple + } field_tuple; /// TZ_OPERATION_FIELD_TUPLE }; - uint8_t skip : 1, complex : 1; + uint8_t skip : 1; /// if the field is not printed + uint8_t complex : 1; /// if the field is considered too complex for a + /// common user } tz_operation_field_descriptor; +/** + * @brief This struct represents the descriptor of operations + */ typedef struct { - tz_operation_tag tag; - const char *name; - const tz_operation_field_descriptor *fields; + tz_operation_tag tag; /// tag + const char *name; /// name + const tz_operation_field_descriptor *fields; /// fields } tz_operation_descriptor; +/** + * @brief This struct represents the frame of the parser of operations + * + * A frame contains the next step to be performed and its + * corresponding context + */ typedef struct { - tz_operation_parser_step_kind step : 5; - uint16_t stop; + tz_operation_parser_step_kind step : 5; /// step + uint16_t stop; /// stop offset union { - tz_operation_option_field_descriptor step_option; + tz_operation_option_field_descriptor + step_option; /// option field + /// TZ_OPERATION_STEP_OPTION struct { - uint8_t size_len; - uint16_t size; - } step_size; + uint8_t size_len; /// number of bytes to read + uint16_t size; /// current parsed value + } step_size; /// TZ_OPERATION_STEP_SIZE struct { - const tz_operation_field_descriptor *field; - } step_field; + const tz_operation_field_descriptor + *field; /// field that need to be read + } step_field; /// TZ_OPERATION_STEP_FIELD struct { - const tz_operation_field_descriptor *fields; - uint8_t field_index; - } step_tuple; + const tz_operation_field_descriptor + *fields; /// fields of the tuple + uint8_t field_index; /// index of the current field to read + } step_tuple; /// TZ_OPERATION_STEP_TUPLE struct { - const char *str; - } step_print; + const char *str; /// string to print + } step_print; /// TZ_OPERATION_STEP_PRINT + /// TZ_OPERATION_STEP_PARTIAL_PRINT struct { - uint16_t ofs; - uint16_t len; - tz_operation_field_kind kind : 5; - uint8_t skip : 1; - } step_read_bytes; + uint16_t ofs; /// current bytes buffer offset + uint16_t len; /// expected bytes length + tz_operation_field_kind + kind : 5; /// kind of field + /// TZ_OPERATION_FIELD_SOURCE + /// TZ_OPERATION_FIELD_PKH + /// TZ_OPERATION_FIELD_PK + /// TZ_OPERATION_FIELD_SR + /// TZ_OPERATION_FIELD_SRC + /// TZ_OPERATION_FIELD_PROTO + /// TZ_OPERATION_FIELD_DESTINATION + /// TZ_OPERATION_FIELD_OPH + /// TZ_OPERATION_FIELD_BH + uint8_t skip : 1; /// if the field is skipped + } step_read_bytes; /// TZ_OPERATION_STEP_READ_BYTES struct { - tz_num_parser_regs state; - tz_operation_field_kind kind : 5; - uint8_t skip : 1, natural : 1; - } step_read_num; + tz_num_parser_regs state; /// number parser register + tz_operation_field_kind kind : 5; /// what kind of field + /// TZ_OPERATION_FIELD_NAT + /// TZ_OPERATION_FIELD_FEE + /// TZ_OPERATION_FIELD_AMOUNT + /// TZ_OPERATION_FIELD_INT + uint8_t skip : 1; /// if the field is skipped + uint8_t natural : 1; /// if its a natural number + } step_read_num; /// TZ_OPERATION_STEP_READ_NUM struct { - int32_t value; - uint8_t skip : 1, ofs : 3; - } step_read_int32; + int32_t value; /// current value parsed + uint8_t skip : 1; /// if the field is skipped + uint8_t ofs : 3; /// number offset + } step_read_int32; /// TZ_OPERATION_STEP_READ_INT32 struct { - uint16_t ofs; - uint8_t skip : 1; - } step_read_string; + uint16_t ofs; /// current buffer string offset + uint8_t skip : 1; /// if the field is skipped + } step_read_string; /// TZ_OPERATION_STEP_READ_STRING + /// TZ_OPERATION_STEP_READ_BINARY struct { - const char *name; - uint8_t inited : 1; - uint8_t skip : 1; - } step_read_micheline; + const char *name; /// field name + uint8_t + inited : 1; /// if the parser micheline has been initialize + uint8_t skip : 1; /// if the field is skipped + } step_read_micheline; /// TZ_OPERATION_STEP_READ_MICHELINE struct { - const char *name; - uint16_t index; - uint8_t skip : 1; - } step_read_list; + const char *name; /// field name + uint16_t index; /// current index in the list + uint8_t skip : 1; /// if the field is skipped + } step_read_list; /// TZ_OPERATION_STEP_READ_PROTOS + /// TZ_OPERATION_STEP_READ_SORU_MESSAGES }; } tz_operation_parser_frame; -#define TZ_OPERATION_STACK_DEPTH 6 +#define TZ_OPERATION_STACK_DEPTH 6 /// Maximum operations depth handled +/** + * @brief This struct represents the parser of operations + * + * The parser is a one-by-one byte reader. It uses a stack + * automaton, for which each frame of the stack represents the + * reading states of the different layers of the operations + * value read. + */ typedef struct { - tz_operation_parser_frame stack[TZ_OPERATION_STACK_DEPTH]; - tz_operation_parser_frame *frame; // init == stack, NULL when done - uint8_t seen_reveal : 1; // check at most one reveal - uint8_t source[22]; // check consistent source in batch - uint8_t destination[22]; // saved for entrypoint dispatch - uint16_t batch_index; // to print a sequence number + tz_operation_parser_frame + stack[TZ_OPERATION_STACK_DEPTH]; /// stack of frames + tz_operation_parser_frame *frame; /// current frame + /// init == stack, NULL when done + uint8_t seen_reveal : 1; /// check at most one reveal + uint8_t source[22]; /// check consistent source in batch + uint8_t destination[22]; /// saved for entrypoint dispatch + uint16_t batch_index; /// to print a sequence number #ifdef HAVE_SWAP - tz_operation_tag last_tag; - uint16_t nb_reveal; - uint64_t last_fee; - uint64_t last_amount; -#endif // HAVE_SWAP + tz_operation_tag last_tag; /// last operations tag encountered + uint16_t nb_reveal; /// number of reveal encountered + uint64_t last_fee; /// last fee encountered + uint64_t last_amount; /// last amount encountered +#endif // HAVE_SWAP } tz_operation_state; From 3aec7111da16cba41843417ec9be1b4ae0f123be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 16 Feb 2024 10:17:36 +0100 Subject: [PATCH 67/78] Parser: add the riscv SORU_KIND --- app/src/parser/operation_parser.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 4139be093..086a34f9a 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -1237,6 +1237,9 @@ tz_step_read_soru_kind(tz_parser_state *state) case 1: strlcpy((char *)CAPTURE, "wasm_2_0_0", sizeof(CAPTURE)); break; + case 2: /// Present in encoding, not activated in Oxford + strlcpy((char *)CAPTURE, "riscv", sizeof(CAPTURE)); + break; default: tz_raise(INVALID_TAG); } From 0ed0a91ad08aa92a8c90c82f1075c3f44f87aee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 16 Feb 2024 10:22:20 +0100 Subject: [PATCH 68/78] Parser: remove the `Proof` field of soru origination fields --- app/src/parser/operation_parser.c | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index 086a34f9a..c80d97667 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -229,7 +229,6 @@ TZ_OPERATION_FIELDS(soru_origin_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND), TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, .complex=true), - TZ_OPERATION_FIELD("Proof", TZ_OPERATION_FIELD_BINARY, .complex=true), TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, .complex=true) ); From afdd42c68acd2a637e6e563bcbb9c39e0ba8fc98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 16 Feb 2024 11:45:08 +0100 Subject: [PATCH 69/78] Parser: add the `Whitelist` field to soru origination fields --- app/src/parser/operation_parser.c | 57 +++++++++++++++++- app/src/parser/operation_state.h | 4 +- .../test_sign_sc_rollup_originate/00030.png | Bin 426 -> 386 bytes .../test_sign_sc_rollup_originate/00031.png | Bin 450 -> 536 bytes .../test_sign_sc_rollup_originate/00032.png | Bin 427 -> 538 bytes .../test_sign_sc_rollup_originate/00033.png | Bin 457 -> 518 bytes .../test_sign_sc_rollup_originate/00034.png | Bin 456 -> 539 bytes .../test_sign_sc_rollup_originate/00035.png | Bin 440 -> 388 bytes .../test_sign_sc_rollup_originate/00036.png | Bin 437 -> 544 bytes .../test_sign_sc_rollup_originate/00037.png | Bin 437 -> 503 bytes .../test_sign_sc_rollup_originate/00038.png | Bin 455 -> 400 bytes .../test_sign_sc_rollup_originate/00039.png | Bin 446 -> 404 bytes .../test_sign_sc_rollup_originate/00040.png | Bin 453 -> 0 bytes .../test_sign_sc_rollup_originate/00041.png | Bin 337 -> 0 bytes .../no_whitelist/00000.png | Bin 0 -> 395 bytes .../no_whitelist/00001.png | Bin 0 -> 446 bytes .../no_whitelist/00002.png | Bin 0 -> 481 bytes .../no_whitelist/00003.png | Bin 0 -> 482 bytes .../no_whitelist/00004.png | Bin 0 -> 311 bytes .../no_whitelist/00005.png | Bin 0 -> 359 bytes .../no_whitelist/00006.png | Bin 0 -> 288 bytes .../{00042.png => no_whitelist/00007.png} | Bin .../no_whitelist/00008.png | Bin 0 -> 385 bytes .../no_whitelist/00009.png | Bin 0 -> 402 bytes .../no_whitelist/00010.png | Bin 0 -> 406 bytes .../no_whitelist/00011.png | Bin 0 -> 377 bytes .../no_whitelist/00012.png | Bin 0 -> 402 bytes .../no_whitelist/00013.png | Bin 0 -> 394 bytes .../no_whitelist/00014.png | Bin 0 -> 418 bytes .../no_whitelist/00015.png | Bin 0 -> 410 bytes .../no_whitelist/00016.png | Bin 0 -> 414 bytes .../no_whitelist/00017.png | Bin 0 -> 424 bytes .../no_whitelist/00018.png | Bin 0 -> 391 bytes .../no_whitelist/00019.png | Bin 0 -> 411 bytes .../no_whitelist/00020.png | Bin 0 -> 382 bytes .../no_whitelist/00021.png | Bin 0 -> 423 bytes .../no_whitelist/00022.png | Bin 0 -> 400 bytes .../no_whitelist/00023.png | Bin 0 -> 417 bytes .../no_whitelist/00024.png | Bin 0 -> 440 bytes .../no_whitelist/00025.png | Bin 0 -> 420 bytes .../no_whitelist/00026.png | Bin 0 -> 424 bytes .../no_whitelist/00027.png | Bin 0 -> 411 bytes .../no_whitelist/00028.png | Bin 0 -> 397 bytes .../no_whitelist/00029.png | Bin 0 -> 499 bytes .../{00043.png => no_whitelist/00030.png} | Bin .../{00044.png => no_whitelist/00031.png} | Bin .../with_whitelist/00000.png | Bin 0 -> 395 bytes .../with_whitelist/00001.png | Bin 0 -> 446 bytes .../with_whitelist/00002.png | Bin 0 -> 481 bytes .../with_whitelist/00003.png | Bin 0 -> 482 bytes .../with_whitelist/00004.png | Bin 0 -> 311 bytes .../with_whitelist/00005.png | Bin 0 -> 359 bytes .../with_whitelist/00006.png | Bin 0 -> 288 bytes .../with_whitelist/00007.png | Bin 0 -> 499 bytes .../with_whitelist/00008.png | Bin 0 -> 385 bytes .../with_whitelist/00009.png | Bin 0 -> 402 bytes .../with_whitelist/00010.png | Bin 0 -> 406 bytes .../with_whitelist/00011.png | Bin 0 -> 377 bytes .../with_whitelist/00012.png | Bin 0 -> 402 bytes .../with_whitelist/00013.png | Bin 0 -> 394 bytes .../with_whitelist/00014.png | Bin 0 -> 418 bytes .../with_whitelist/00015.png | Bin 0 -> 410 bytes .../with_whitelist/00016.png | Bin 0 -> 414 bytes .../with_whitelist/00017.png | Bin 0 -> 424 bytes .../with_whitelist/00018.png | Bin 0 -> 391 bytes .../with_whitelist/00019.png | Bin 0 -> 411 bytes .../with_whitelist/00020.png | Bin 0 -> 382 bytes .../with_whitelist/00021.png | Bin 0 -> 423 bytes .../with_whitelist/00022.png | Bin 0 -> 400 bytes .../with_whitelist/00023.png | Bin 0 -> 417 bytes .../with_whitelist/00024.png | Bin 0 -> 440 bytes .../with_whitelist/00025.png | Bin 0 -> 420 bytes .../with_whitelist/00026.png | Bin 0 -> 424 bytes .../with_whitelist/00027.png | Bin 0 -> 411 bytes .../with_whitelist/00028.png | Bin 0 -> 397 bytes .../with_whitelist/00029.png | Bin 0 -> 499 bytes .../with_whitelist/00030.png | Bin 0 -> 386 bytes .../with_whitelist/00031.png | Bin 0 -> 536 bytes .../with_whitelist/00032.png | Bin 0 -> 538 bytes .../with_whitelist/00033.png | Bin 0 -> 518 bytes .../with_whitelist/00034.png | Bin 0 -> 539 bytes .../with_whitelist/00035.png | Bin 0 -> 388 bytes .../with_whitelist/00036.png | Bin 0 -> 544 bytes .../with_whitelist/00037.png | Bin 0 -> 503 bytes .../with_whitelist/00038.png | Bin 0 -> 400 bytes .../with_whitelist/00039.png | Bin 0 -> 404 bytes .../test_sign_sc_rollup_originate/00014.png | Bin 1007 -> 413 bytes .../test_sign_sc_rollup_originate/00015.png | Bin 1029 -> 793 bytes .../test_sign_sc_rollup_originate/00016.png | Bin 939 -> 841 bytes .../test_sign_sc_rollup_originate/00017.png | Bin 542 -> 828 bytes .../test_sign_sc_rollup_originate/00018.png | Bin 413 -> 459 bytes .../no_whitelist/00000.png | Bin 0 -> 463 bytes .../no_whitelist/00001.png | Bin 0 -> 485 bytes .../no_whitelist/00002.png | Bin 0 -> 728 bytes .../no_whitelist/00003.png | Bin 0 -> 330 bytes .../no_whitelist/00004.png | Bin 0 -> 387 bytes .../no_whitelist/00005.png | Bin 0 -> 316 bytes .../no_whitelist/00006.png | Bin 0 -> 542 bytes .../no_whitelist/00007.png | Bin 0 -> 805 bytes .../no_whitelist/00008.png | Bin 0 -> 838 bytes .../no_whitelist/00009.png | Bin 0 -> 845 bytes .../no_whitelist/00010.png | Bin 0 -> 847 bytes .../no_whitelist/00011.png | Bin 0 -> 923 bytes .../no_whitelist/00012.png | Bin 0 -> 424 bytes .../no_whitelist/00013.png | Bin 0 -> 542 bytes .../no_whitelist/00014.png | Bin 0 -> 413 bytes .../{00019.png => no_whitelist/00015.png} | Bin .../with_whitelist/00000.png | Bin 0 -> 463 bytes .../with_whitelist/00001.png | Bin 0 -> 485 bytes .../with_whitelist/00002.png | Bin 0 -> 728 bytes .../with_whitelist/00003.png | Bin 0 -> 330 bytes .../with_whitelist/00004.png | Bin 0 -> 387 bytes .../with_whitelist/00005.png | Bin 0 -> 316 bytes .../with_whitelist/00006.png | Bin 0 -> 542 bytes .../with_whitelist/00007.png | Bin 0 -> 805 bytes .../with_whitelist/00008.png | Bin 0 -> 838 bytes .../with_whitelist/00009.png | Bin 0 -> 845 bytes .../with_whitelist/00010.png | Bin 0 -> 847 bytes .../with_whitelist/00011.png | Bin 0 -> 923 bytes .../with_whitelist/00012.png | Bin 0 -> 424 bytes .../with_whitelist/00013.png | Bin 0 -> 542 bytes .../with_whitelist/00014.png | Bin 0 -> 413 bytes .../with_whitelist/00015.png | Bin 0 -> 793 bytes .../with_whitelist/00016.png | Bin 0 -> 841 bytes .../with_whitelist/00017.png | Bin 0 -> 828 bytes .../with_whitelist/00018.png} | Bin .../test_sign_sc_rollup_originate/00014.png | Bin 1007 -> 413 bytes .../test_sign_sc_rollup_originate/00015.png | Bin 1029 -> 793 bytes .../test_sign_sc_rollup_originate/00016.png | Bin 939 -> 841 bytes .../test_sign_sc_rollup_originate/00017.png | Bin 542 -> 828 bytes .../test_sign_sc_rollup_originate/00018.png | Bin 413 -> 459 bytes .../no_whitelist/00000.png | Bin 0 -> 463 bytes .../no_whitelist/00001.png | Bin 0 -> 485 bytes .../no_whitelist/00002.png | Bin 0 -> 728 bytes .../no_whitelist/00003.png | Bin 0 -> 330 bytes .../no_whitelist/00004.png | Bin 0 -> 387 bytes .../no_whitelist/00005.png | Bin 0 -> 316 bytes .../no_whitelist/00006.png | Bin 0 -> 542 bytes .../no_whitelist/00007.png | Bin 0 -> 805 bytes .../no_whitelist/00008.png | Bin 0 -> 838 bytes .../no_whitelist/00009.png | Bin 0 -> 845 bytes .../no_whitelist/00010.png | Bin 0 -> 847 bytes .../no_whitelist/00011.png | Bin 0 -> 923 bytes .../no_whitelist/00012.png | Bin 0 -> 424 bytes .../no_whitelist/00013.png | Bin 0 -> 542 bytes .../no_whitelist/00014.png | Bin 0 -> 413 bytes .../no_whitelist/00015.png | Bin 0 -> 459 bytes .../with_whitelist/00000.png | Bin 0 -> 463 bytes .../with_whitelist/00001.png | Bin 0 -> 485 bytes .../with_whitelist/00002.png | Bin 0 -> 728 bytes .../with_whitelist/00003.png | Bin 0 -> 330 bytes .../with_whitelist/00004.png | Bin 0 -> 387 bytes .../with_whitelist/00005.png | Bin 0 -> 316 bytes .../with_whitelist/00006.png | Bin 0 -> 542 bytes .../with_whitelist/00007.png | Bin 0 -> 805 bytes .../with_whitelist/00008.png | Bin 0 -> 838 bytes .../with_whitelist/00009.png | Bin 0 -> 845 bytes .../with_whitelist/00010.png | Bin 0 -> 847 bytes .../with_whitelist/00011.png | Bin 0 -> 923 bytes .../with_whitelist/00012.png | Bin 0 -> 424 bytes .../with_whitelist/00013.png | Bin 0 -> 542 bytes .../with_whitelist/00014.png | Bin 0 -> 413 bytes .../with_whitelist/00015.png | Bin 0 -> 793 bytes .../with_whitelist/00016.png | Bin 0 -> 841 bytes .../with_whitelist/00017.png | Bin 0 -> 828 bytes .../with_whitelist/00018.png | Bin 0 -> 459 bytes .../nano/test_sign_sc_rollup_originate.py | 41 +++++++++---- 167 files changed, 88 insertions(+), 14 deletions(-) delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00040.png delete mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00041.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00000.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00001.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00002.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00003.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00004.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00005.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00006.png rename tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/{00042.png => no_whitelist/00007.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00008.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00009.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00010.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00011.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00012.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00013.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00014.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00015.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00016.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00017.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00018.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00019.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00020.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00021.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00022.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00023.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00024.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00025.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00026.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00027.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00028.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00029.png rename tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/{00043.png => no_whitelist/00030.png} (100%) rename tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/{00044.png => no_whitelist/00031.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00000.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00001.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00002.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00003.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00004.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00005.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00006.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00007.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00008.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00009.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00010.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00011.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00012.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00013.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00014.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00015.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00016.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00017.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00018.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00019.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00020.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00021.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00022.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00023.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00024.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00025.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00026.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00027.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00028.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00029.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00030.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00031.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00032.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00033.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00034.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00035.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00036.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00037.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00038.png create mode 100644 tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00039.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00000.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00001.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00002.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00003.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00004.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00005.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00006.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00007.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00008.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00009.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00010.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00011.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00012.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00013.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00014.png rename tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/{00019.png => no_whitelist/00015.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00000.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00001.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00002.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00003.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00004.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00005.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00006.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00007.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00008.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00009.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00010.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00011.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00012.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00013.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00014.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00015.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00016.png create mode 100644 tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00017.png rename tests/integration/nano/snapshots/{nanox/test_sign_sc_rollup_originate/00019.png => nanosp/test_sign_sc_rollup_originate/with_whitelist/00018.png} (100%) create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00000.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00001.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00002.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00003.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00004.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00005.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00006.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00007.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00008.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00009.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00010.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00011.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00012.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00013.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00014.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00015.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00000.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00001.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00002.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00003.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00004.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00005.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00006.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00007.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00008.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00009.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00010.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00011.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00012.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00013.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00014.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00015.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00016.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00017.png create mode 100644 tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00018.png diff --git a/app/src/parser/operation_parser.c b/app/src/parser/operation_parser.c index c80d97667..9703d2ca6 100644 --- a/app/src/parser/operation_parser.c +++ b/app/src/parser/operation_parser.c @@ -50,7 +50,8 @@ const char *const tz_operation_parser_step_name[] = {"OPTION", "READ_SORU_MESSAGES", "READ_SORU_KIND", "READ_BALLOT", - "READ_PROTOS"}; + "READ_PROTOS", + "READ_PKH_LIST"}; /** * @brief Get the string format of an operations step @@ -229,7 +230,10 @@ TZ_OPERATION_FIELDS(soru_origin_fields, TZ_OPERATION_MANAGER_OPERATION_FIELDS, TZ_OPERATION_FIELD("Kind", TZ_OPERATION_FIELD_SORU_KIND), TZ_OPERATION_FIELD("Kernel", TZ_OPERATION_FIELD_BINARY, .complex=true), - TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, .complex=true) + TZ_OPERATION_FIELD("Parameters", TZ_OPERATION_FIELD_EXPR, .complex=true), + TZ_OPERATION_OPTION_FIELD("Whitelist", + TZ_OPERATION_FIELD("Whitelist", TZ_OPERATION_FIELD_PKH_LIST), + .display_none=false) ); /** @@ -1134,6 +1138,16 @@ tz_step_field(tz_parser_state *state) op->frame->step_read_string.skip = field->skip; break; } + case TZ_OPERATION_FIELD_PKH_LIST: { + op->frame->step = TZ_OPERATION_STEP_READ_PKH_LIST; + op->frame->step_read_list.name = name; + op->frame->step_read_list.index = 0; + op->frame->step_read_list.skip = field->skip; + tz_must(push_frame(state, TZ_OPERATION_STEP_SIZE)); + op->frame->step_size.size = 0; + op->frame->step_size.size_len = 4; + break; + } case TZ_OPERATION_FIELD_BALLOT: { op->frame->step = TZ_OPERATION_STEP_READ_BALLOT; op->frame->step_read_string.skip = field->skip; @@ -1180,6 +1194,42 @@ tz_step_read_pk(tz_parser_state *state) tz_continue; } +/** + * @brief Read a list of public key hash + * + * @param state: parser state + * @return tz_parser_result: parser result + */ +static tz_parser_result +tz_step_read_pkh_list(tz_parser_state *state) +{ + ASSERT_STEP(state, READ_PKH_LIST); + tz_operation_state *op = &state->operation; + tz_parser_regs *regs = &state->regs; + uint8_t skip = op->frame->step_read_list.skip; + const char *name = op->frame->step_read_list.name; + uint16_t index = op->frame->step_read_list.index; + + // Remaining content from previous public key hash - display this first. + if (regs->oofs > 0) { + tz_stop(IM_FULL); + } + + if (op->frame->stop == state->ofs) { + tz_must(pop_frame(state)); + } else { + op->frame->step_read_list.index++; + tz_must(push_frame(state, TZ_OPERATION_STEP_READ_BYTES)); + snprintf(state->field_info.field_name, TZ_FIELD_NAME_SIZE, "%s (%d)", + name, index); + op->frame->step_read_bytes.kind = TZ_OPERATION_FIELD_PKH; + op->frame->step_read_bytes.skip = skip; + op->frame->step_read_bytes.ofs = 0; + op->frame->step_read_bytes.len = 21; + } + tz_continue; +} + /** * @brief Read soru messages * @@ -1427,6 +1477,9 @@ tz_operation_parser_step(tz_parser_state *state) case TZ_OPERATION_STEP_READ_PROTOS: tz_must(tz_step_read_protos(state)); break; + case TZ_OPERATION_STEP_READ_PKH_LIST: + tz_must(tz_step_read_pkh_list(state)); + break; case TZ_OPERATION_STEP_PRINT: case TZ_OPERATION_STEP_PARTIAL_PRINT: tz_must(tz_step_print( diff --git a/app/src/parser/operation_state.h b/app/src/parser/operation_state.h index 9f7ba3467..f741f1bb9 100644 --- a/app/src/parser/operation_state.h +++ b/app/src/parser/operation_state.h @@ -66,7 +66,8 @@ typedef enum { TZ_OPERATION_STEP_READ_SORU_MESSAGES, TZ_OPERATION_STEP_READ_SORU_KIND, TZ_OPERATION_STEP_READ_BALLOT, - TZ_OPERATION_STEP_READ_PROTOS + TZ_OPERATION_STEP_READ_PROTOS, + TZ_OPERATION_STEP_READ_PKH_LIST } tz_operation_parser_step_kind; /** @@ -97,6 +98,7 @@ typedef enum { TZ_OPERATION_FIELD_BH, TZ_OPERATION_FIELD_SORU_MESSAGES, TZ_OPERATION_FIELD_SORU_KIND, + TZ_OPERATION_FIELD_PKH_LIST, TZ_OPERATION_FIELD_BALLOT } tz_operation_field_kind; diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00030.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00030.png index 1d7b32953660bc6deb9c7715d2c6e8f1f7efb3bd..7ba8f0d1000cede0949e0bd52e661c2647e98243 100644 GIT binary patch delta 359 zcmV-t0hs=(1A+sPB!5XsL_t(|ob8#*4ul{KMRDT%{|CF6S&%fev zD8g)EG{1wLZr|Y%AH_$xCM4^^LfwDIkT<%3_87ZjG(oKNQ7Bvt9dFS=rA=y(wxUyN zqDHR?eV^!=JLDr^j{5OY;xBMH#G6|-scI>tU~V8><(~8INq;sS5!q!UV5s`y^$ImX z?aNIe3JuFPRyzB_$H8vh=pU7^szFMPO--z8HllX*)r33bB`6ypPvXAr!g54kJedQ+ zlpIjMJ}pG8A24YvF+bB4)kcus?U;sXQ!D@g)Uhp&U%BKdS5Hx_%cmml+l#Wb3Tt&D zKJbOxnw7yKvS6(U4_I3T!RWcxv3120E)!5*4Eq+e6$c3@Z>Wt9y*ix^5}-W<)?e0`~nB(CO5DnKk_=$lZO~#Tt zIWIvlxg26+11pTf5SkP>i|}v7z!rKd^n7qjaHz}K>**`p uefHK&_bXRBgb+dqA%qY@2qA?0J#R|~4T>=^&0+um00{s|MNUMnLSTYb)xRJB diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00031.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00031.png index b5323069bc2c30d3c670b6336b418a1983dacdad..8644702b6cc19292c53b7e86b2e7417a7d5f5277 100644 GIT binary patch delta 510 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 iilQirq9}@@z`OzHE2>hozs~nG%D0%6C=`wN zk`L73?trk?FSOd%xK2r$yDhBKiLe5a;)BKk(X6iqY_TI&seb{!J>*sH`oCmF93RBd zWG#0i-&2qpTmeDfs2L`p3n9c|6aHU5z(kLQaR`-Q2q7e;>{Yg#K}}vF!}_;;wH6C4 znF&t%P7W1q1{3bnvASZ_xy+`1yjZHge~_S7IbyA<`Afivgzk0PvX9;CWmTBcyDt6O z%U5?GYpMCYoPXiO5m87Rw9jL#Ayf14(seaH;0Uq!+if$hNjJJxwN(jz%g?R=6_Gbp zMBc;)9FevC&A002ovPDHLkV1i``&lUgx diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00034.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00034.png index af0b0b8dbb90b0c32c828d30e7a915d0ca141aee..dae717760f03b98e8f1f79f4afc2c9519a88bf54 100644 GIT binary patch delta 513 zcmV+c0{;ET1DgbpB!A*bL_t(|ob8y&j>8}fK;3Hk{~z2#dq6_oF)k!%7v?`Hfk;Gqq7dhYbBO6>3x4f8coih zGRb*|9dxsB%pNbEgEFGhPG_bn%`s*N%?zrVR=_^*`zh}~?|*sSeP@-IDx^)8(i$ut zvWDWiBH&a201|-fbAO85MxX8q`=Bv+S_5k|0nMFZ0|<)ke?#q9?;+4cr(4kS7%U_a zwqcO2XV3#+bqwVDPkE%*5bLgyjRjA`ZGf#EZt+X1wu?F~A&$Tg=Yd`1A2O_fqM*oc z8$jDG8}$$R&VQ(?cQ`+N8(|qQuTm`SmNB-4;v}4~8#fkwi*QTBX?hddvE^8l6mH4y z59JS48UT<0SZ8F>1=ToBU2m~Gl^sIQNyk#oYj$IQG5v2f^XRr130S9;}WR{hokWLa6~ny%ZoY__DV z3(*8OHLY+3SoW#8wyM~z8h40X6Xhf`E!ZLPwl6fsDu8`Ushjxihir9+WEJTf$)-79 zAHQ(&h1(WZ)nbukmG3GBNy>3WQ4~c{6h%=KMR5*aT4#$u>~MiG00000NkvXXu0mjf DV*2%o delta 430 zcmV;f0a5;&1jqxBB!7=dL_t(|ob8y)5`!QNMWIvw|ASrF1v3LAxGNG+}f!Q7}FX2BFfiNj0yzjA<$9);_$RD&UekPxCbX!R^ro`t>l{&F>I<*&V4 zB`hbS-jT&AyoTb*oxk|I8`Fv@*O*T ztio}$+&nN?dw(~NmVpy{H}q8Q_=AmFR_e1ep?!Xf7X0j^{!~8=IT}y5xMieY<7kX! zp1A{Vk_!s!=<;fz4hO2hDn>4hq7YSEHsh8$Pk`uXqwWr3k%zSOnqf^)d(ksM0JhO3$H|G-{s7bFd|wO|7d%>QK{K^^MzQ>1%k9!XY)m2dh1)gpe19FUm^cf0X#vVmA`^-rY}J&7!d#f00000000000I&c*&wJqu+DtJ100000NkvXX Hu0mjfvjwT& delta 414 zcmV;P0b%}x1Goc_B!7QNL_t(|ob8#*62l+}MYWUs{|9H0E}Tgb5Q(uPo!+xbQ30qWM?kjNLQ z64iLsLTT{bKGL05>mZ)>`8u-R8ZHmC-JY$7)>zr!mfM>BTNShCX0%mfV!ju`7}Oynp+y0jDNl)LKg@Tb&A9S335W(LDfr4DQNX+FJKc#wdaN3wRD&KWxqF zRNGSce1ARQrpLn6x2>0eiFd+G)qv(N9c0u{PI;F@iS~cMbpG=M==0kA0_e4bu?VZ( zq&2idcZg>-yOenP7>uo)o;ZAECkg-n000000000002dhI4Qi_(@T_D`t^fc407*qo IM6N<$f(?4c3jhEB diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00036.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00036.png index 2ad0b2ec4b5e02d2e628048eac6a92dbec4d4ff9..12c797a15ac7a7aaf694b2352181eaf03cf68bb1 100644 GIT binary patch delta 518 zcmV+h0{Q*51E2(uB!A~gL_t(|ob8#xlEWYfhDoP={|D}&J-Fi_{323KHyys&LuwRI z5TZ-8iPw`}&*oYD6n)^pn4*}qLZE2b#%*9tnB##(m6r0hH?Y2)T~Iz&)03vxS{uJ) zO^}c~=w!@c2h}V-?c>qJHK9e(b{ajQG|kqz7c*KF?GD(t`hRxF+wC>3>)Q3U7Zg%D zYiWhyj->u>4!}c!h#Ci+ANy0p5`C;Hc)Sv(^}((8VvQ#1XV_1~*1w^4uGh)VlKUs0 z+193@b(tySk?Py=YS5A-yqCRX>5sIH#G!n^S@AjXPq3KQL`jP%cw{MQ(| zGkm;AybK+X{C_Hkx1&BTiO-B$JdCew5lYU42uJBgr*`|OJZoD|ju;M?YhZyP-FOfZ zbSaxvC%W0vJlYMVtL`4`3y=2gUG{*3p}Szv#Sq&Iwyeb)lKm?U`)VX;za6A@h>>z3 z{0W6?v04k%rAH05dmj9a{vm`G5M0J_L|nk^zY1F{-+vjfqIgW2O0YZTh|XB118nMA zXg|%SrkHD|5@YW}z$0@f=>GwQ^N(#OUxXBO-#(q9{|D%2SbX>euV)&1eS0O>u5~f? z5Si)#f3=+BuSDaNs=TZDU%l4GoUO zKX~+-T480BynpXNu1J>~0kBrORX3>pPHpicVU;8Hs*XN%$5f&;9chbdh~0BI0P&v# zX|TL6n<~~HgC$BtN7`cDpcqZD07zG!cav-${^xJv8w2^r)e__^e=tMr80r_t;W2dT zc;~2D`{ULvE@M>y%CjtVFW zD!?Y54|qPh|E$Q`s2y{Pa@I0|?8`Q818dS8cU@Hb(rT@aSUWqRw6DaHCg)ljzhq7{ zA%99EXAC<)v*@sod$+DZn-poM(^8ct**f-SMz5mZ0sCg(Uw`uccU;#vch>e&g|x;} zT4T5)!QRaY=u!ZH&H>l2{V8&RK9?0DUP;sY;AT~<(FAscJtG!>L+w;=kew;_Up}#| z4?)X)u#kk?hE7_mF2W!Oz-k}JVN4AS_Yljjk-$Qm(KNvNvTdpcx>XVB!-M?W7`iik zy(pp#9Z>u#M}Jq6!EQGEotH4Bs6lVej&>G;TakWb-PMpCY0q|ydxaD?;V;6Usko5g zL{GJMI$}$L_7-G;=L&pEW3>qhsxHzMF~*@lZ>^}KwI0-*KYlUN*XkG%715sP zmD9oywKE~;jfVleov8QQk3C!ml8WX4b+lLo0Z%v*7FJ>zbB*>0>=jnC=UftAJ5-wA z9vXgg9cdxCLQqAR}%Kha>-+7$LGh)q9}@@D2k#eilQirqWEE6Qh1Jy T=DaKj00000NkvXXu0mjfTvz4i delta 411 zcmV;M0c8I71GNK?B!7HKL_t(|ob8y&a>OtQL~&~T{~zpwb5NCHK}&;{iAbg2$%8#@ z1Q;!c1mwPopU1gOa9(OPU%;luzl&ADO2awM{n1B(H3_({{fw|`)PZ!dXB>HkaLh?9dj zo~)$|a@m4laRtQY26mW$DKsT+CgH!81Ka4WF%F>`3?YPw9MwCjliJ4Ww}@G=TZ?*; zGCl|1CRrdB!5>)L_t(|ob8y)62c%1MN`NA{|9$b7dQ+gfzSvogZGRJ0C)knmlW%e3vuP zguInOl|76gs+Deg+cUo=?NFqim6576$e`Z6(qU;CU~^fRs)?>wMw&dyKZa>e z_umW9ifI6_DsJ1;3Y3wVm$fj*tXzALc|FL?D+?p*HM{0RdkX?LGPeQP8_tTEWNrie z0pc}uHewL0=>CKVc%11YpoDxfNgteX4ZW4hEpy@v=vu%A0000000000001^0`sLYB T;}4sa00000NkvXXu0mjf&?u+Q delta 429 zcmV;e0aE^u1IGi9B!7-cL_t(|ob8$0lEWYfhOyJU{{!bDy>P}Vr;yZEI`e;5yNWCV z5^)P9AoTiJUS%04-6iDSdnp2MDfS`#N) ztdKg%PU5<9Dt~rcfV%6Pf08C%OTO~t=cfh*T2SXS_y>h)R`bz%;jxmpy%YschP6r^ zan{=0Jpm1;0)9eM*lU&sFqufbic7L3Y*kRtnSa~>$YnRIpGYLeQ!M;p$E5u~0Q`_E zC5Y@I9=QnmV*L|H|K!8}fgq_v){U11o^nez**ai$VXtMs)Lqy5M zjQJ-Df*=TjAeiPl={k1@;p1m_0P8@rKJk_)4|;*qGNXee&j3!>pp>vfJ9+8vik-Q`#HcZe_z0Gt$)IzVQ;v91E$I0{%u4K zcCvUD0$L2e7izz zvY=8@?>^dqt#ZlESCeCIUb)3|0%qbE?mN8eO&VdDe%B4h=oG|f!(s|9=qXWIVnL4x zZ$ke^7iDPlHq=@b$Cg}c5$4M3=TwE X+B?mmC6U&%00000NkvXXu0mjfZUnWr delta 420 zcmV;V0bBl*1HJ>0B!7iTL_t(|ob8xFlEfegMRlrk{{v@{URdQAz#o#POJ?f7RU(QA zgs8P7j5e|URYWB^I1>o4%8*0+5Kla~cv}ds@(I`5v zrEc1Wa{$tMzcE_h^STu2?y<2iC&L#|j2H|7$mV@BVVfVd$bU@mq zl3318K9?Xfxe}sdV^)}iAyg@@e!_n%2D;Ge#yq4dFoY0NN}Wo~}^j6!-L-4aPbR5XTY6sMk#31%D{xt3MN+ zcV{72Y!8&ohJUo&zqyBm0hoP{MeY3h^y7nQH($+JJl}iBmQEQ2c6Eneb(m^XBhfT?fqH)O8`7;{@y_p*H}DsD!H|> zGrN_^1)q?L;aDe_MT~N4)*EXe1?G)b1#d$MA%qY@2pu7W5JCtc5xfET>=Ts{of;tk O0000JqsOV2r&CQi4}N}4Yf=rP0QjP{x781E{u7hk z{)0q2mYQ%wo$eOw09H@1>g3e42F|?!1FF&XLg2{}+VMN!5w3mEOjQ@dpNwd!08Ur_ z6ss|g`&CQ*y;^Url=(I1*;jzCW6)!lH5a@vpNuzQ>~tTK_NKjd3>B80(+wO*u8D1*|!p_1lY5`qb9}sJ%7R|zeQBSC?57DChbEn0BrUPt@pLALy+lijWryE84wH& z8UfIT)^!{)1295?eo~)%$a^Hf?;sQi#V|Exo2~~-!Mfh17=ti%N zI6yTRLI?rkXiGJ=oE`QN%bNprmpiqDGf6b}!(eRlM{eNq7o<34`{vLM_+ZYP@m6+P z&Zd3Pf-q(S#tc}6mZZ)M)O!Cf0Z_9%!1_Oc+(`6xpg}hZVbNy{(?wXk()OqaP8UK5 jA%qY@2qAjLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6S$_u4Ga$4n45M#%3cOOZj{ZJ$PSYF3~h+Y2L|$bV^j7`t_7_XZ?l zLJXN`3&*Z(8-fIylGe`ZM0%tTG^Q`Aa1`WBAOeCCTnAbj3L7FrYFkUZze~V4*rbkx zX-P=#{H4G}hAD^yh%apRn4Z=Xf}1fy?WCz};h;P!y&D95PfoKGoPH9z5A2evR*dQ(W62Dyqzg!Nge zm|5V#g_cQdmsI5Juk3;27s7}Z55@>!#q>tyfwg5+>qbZf=%sy%i&-kp5CT(>eyMq$ z(NmH>fhf1gJ_k&^{BXM1a3&-Ij7v;6;i2pM(VQmj2m6owsZH1$Wrx2!*(vDn2{{P| oFzaYt6h%=KMNt$*Q51zMFR$ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00002.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7980241856323a359afabb952612c53e1ab67b GIT binary patch literal 481 zcmV<70UrK|P)rCxSAdzGG?uW#eH+$K*l(v!s`4{OtpN@9oTmtm3uig!#u@&wWLPvk7QC?>!? z`XtBO7{Q_0!t=E z%&g|=evyLd31%+)R%s*FrN4?Z`Zl6FIkLzeeUa8SGO;P^C$k{$xsnpwvKovUGAQ_y zwzmcOVijL}qFl1>okBWSI!;ny|h3m|u2!=8kFx)&aHx*qv@ZJ#)OQ z6waXEc_?B!J6v%Z1D1f3+H9Am%-&}Jp}UX&AU`z$-Q%$<)5-@y5ClOG1VIo4L9miP XekfXGIc1__00000NkvXXu0mjfQvBJV literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00003.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..97eab5d99deeae5058b969d5401bab38b91bf938 GIT binary patch literal 482 zcmV<80UiE{P)a#U2H40TL`Z@#eu*>xkKKYC7Ik42f%KmnGk^3!3T|R4&ex+DR`KAXhKrHbi(`gav zA!!}L)PJ(=X<=F0eh6>hU;qGMfKs&8ho(wH%b@yJc9vt4-rLgCcSLrbYT1_)$&4CC zHG0OAua{%lNtmNiIM(VJj`dSGg1Cy9!!KYcsyf<>1nQL?EgO8fCyEettYwGQISB=# z1SCV3qPL-_%dLIOjH`bMGm%(M9beKf8Cr)$q&g89Oiz>m>AtFC%{FOm6jsa2ct)+M zvuLmOCL(mc0E3IRAWC1EG1xvnH1qAZIuejv*Cu-rjKJYf<1~4KR58 zm;a5ExUWZ}*bGk@yI=Rc8YMJbFGx%)kh__CNB!$#`>u;h7W_xzYEMfYI-aq`tM28; zC3dr06&~H=*3X%ClIz0j1AD$nIh?E(-ORORiszEcX|uK`_Ib2M?QQzS&C>racb4b} z#V3yUHd)PNu1V`S_*ie1NWXILGwnFXT>&~9Ihom}b=*69i+P#B{ZDaIx2uZezA|n# zak!`c>_WW%-Bn-Cn*Nh{pTS=6WObeEgX||cUOy-9Ic70A=dW7H^6h>MZok@>`!=*} z{cX!H{P)8a&IR{H>-)Q3AA5O1`{TT6avZ<+&+34IcLj|9-6s0$8R*FXLxRE6)z4*} HQ$iB}B3_GW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00005.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..78b15b726690a1189cf8af3276b49e8f35fd069c GIT binary patch literal 359 zcmV-t0hs=YP)?FMG^0r2hj%3)QiO0?c%9R?OntNYU~L z6V}&JeJydE4J(k^fsU|WF3F1}nz^}Np=^eUF8&BGSXl!)s$Usc^QP84{0{!AnsP!% zx!f-D9!#Z$4rvl?F=41ntB_G1n%j~OdTv2odaxQn3$#}>iZ|D&mN2c zzS8)_zXdrbjxL~;(q~aJ09p_sgb+dqA%qY@2qA>roiE=-x0^M5;l=;}002ovPDHLk FV1nMpm@)tW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00006.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..303483945e61b92a733b46d6df42175773978ddb GIT binary patch literal 288 zcmV+*0pI?KP)b4u57QZGorZarXkQ$Y=0FqvL2biyl7DS)l+wO}+)$ mbQh96f(8Hp00000px_C((rK|+dB8RR0000cltq9C z?9`%-Syy>zez+RiX;Q>|D)MFXL*k_8aRtH^|BG{$N zkc-p^D5&m8H!)Gy>G9`DU4pmo0Z$%2hjjInpNKk~k^<3fU;jCcj?9DR4D*(sS&(s`}pLij8pqG$!| z5dA=KMhmycaMdcw whH?*(l0MI$K86AS0000000000008Fk2VB291SG0gEdT%j07*qoM6N<$g2V8x*Z=?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00010.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..70bcb24d8e867442134dac65136bf87b1b51fa23 GIT binary patch literal 406 zcmV;H0crk;P)h65?%V9_27qgf;S{jlIvluj;FkT&@b!`J@L_ zZa+U^!<(2P!2kdNBdJe}j~e5&pxQa@69t|V4Yi9sir->>Wv95N6FgICw=825Yb$P# zxwbKS>i4S6S)EgJF|0f~M~$VkpbyZi9{B#EqB#r7_yf@Pf_Su`Wu&%cuO3AmTRD(| z44q&KI+b2>#cc*7wCIsgCw07*qoM6N<$f~SwJ At^fc4 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00011.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..0720f431fdd0883d0c52124d295ab32967f7ce5f GIT binary patch literal 377 zcmV-<0fzpGP)bWsF`q=*JuhtHdcDD205dhGO-1$Z&C)cNTw z6Q+CM0=qFv)4N>{(%khlMZ$h)=8w5;Z8(wSXGS>#R*rty&)MlTplatO!-?dhgouh6 zutM|`$r&l!5yfHMa3bYA*rXTJsK&@4zue$bltC_2kkt9X!Q}TIp(1W^g69={i!sZmu=;v~a4jm4h1A-2SbR61#`Z6x7;< zs577myRxwkJ#zzMh)@4D;IYxS@mm?{D$Z)5tL2dri-$?>Z5aRn000000000005F9w XxZN)M5`$@g00000NkvXXu0mjfK}W4w literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00012.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..17c59ecff7968be07a8ebc47010789576f6ce613 GIT binary patch literal 402 zcmV;D0d4+?P)u2qB-w|bZxNAnoY&=c(!XrLSI1U5 zznpE-^ci}IeRV|3yKM)l4!ul~beu|kt9`BGLQ0&9dIs#A{dBa|sToi<_>tp6^e7RL zY6k3({Xz+5l`-6`Aw-cnHs^C@WC^(-UXDh_-wM)Odz;D&D*dyN%Ql+`11BqXu|h0} z81V{eKrj6iS2`}2ZDtGBTJJ3AG2pw7&nhEZ9di~Ww@Q$hN#|G)FJA-3JgOccWfL3N zCeoUxi(Xjwc@{99H;vs$Lhk>%1eGf6l;e5I2)z>Y0Fb&dPZ`0y0DZ`gTi#hVq822c w5x5fHI3jHZwxNU&LI@#*5JCtcgpfJ>0_!SF;E)I@X#fBK07*qoM6N<$f=wN--T(jq literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00013.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..b3219b3b23b4a7bf6aeba601ba88bd894c0732df GIT binary patch literal 394 zcmV;50d@X~P);4~#lX^LTM@AL~znx>k zG=^MYpBbg?!BTaSAF8eldLR|4iIHl|6ut`39ckVCsK% znhhs$LV^JR0EW{llY5Qvnp3q>nkqFiP-5vz>a>lk>l&!+TC&P==vH*RBx|em)h4OB zVN_PE6gLF9x1ja>@!3GU1#zm0A_(>LVrjXgqko%8I{cL>(IGV&#vEwEzOr~xd8qkH z$I@4uPG<`0Om2ei6lA$vjJklV>}wVC_W(p+#c&L*9@k2bz=@R;M1&07*qoM6N<$g6?yun*aa+ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00014.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..5acbd69b1805491a83521edd31c83ef4985dc0ba GIT binary patch literal 418 zcmV;T0bTxyP)WZ`G+8P_p=5;6nH)A);yq zMCkoODW=!m8KYo3a3S?P*m^%KLyVEbKAkWWbtl&n)NA~o;bZ?X{hm2l11QXYkZCri z`Qv9g@JB=t7ytlZB;Bmu1Q_QdxzRRm6q-DSkC8_`VfEaM%$|BY6>_-NU%gY2yJ=&8 zZ7g&{;hsF6sBGbOkI&q@xQ{a%5$Sh9kHItO?%kG*?{mam5YI)dK7R4i_|S+5737#mAk3?NvCVb{v;m-yD0000000000003CR7wF$JBEcBwM*si- M07*qoM6N<$f?)Qx(*OVf literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00015.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..132f26c2a053caecb5a3019e768d261fb7d3c451 GIT binary patch literal 410 zcmV;L0cHM)P)WMV>hAE^l8_NG&enkNZ5~-`D3nID^4WYnNdc-%H9t<&rWPX)y8Xz6UkQz5fu@z zg7*{27|q=g!(dx+B4r$G+KXvaYvho3ceoU#lgkvOP5#H^YyUBRkDTlQw9Ge%u);L{ z{B$ec#0m)p001(A`iAX+#u-OEF|lTST0}w#?>EU9%VUpiVg9OVE-s>uxN+4&qvH1T zV{~{?VvOaPh36!}w)ZBhh)BK*qH#6cvp4+_RZVplWRFJ|LbXY2ti*PczYXhIR2h?k zn5Hc}jag?38kHz)E$vufv=MuD3eWObO9VUs@s_ls4cpr;D{0000000000005Z67pGN3&Gp@{sQ>@~07*qoM6N<$ Ef-SVP3;+NC literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00016.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..b544e3a1efd3ac52bc2dec19d0b9a199e4e590cd GIT binary patch literal 414 zcmV;P0b%}$P)3X%j1u%EWk^VmBCME znK0dh7T8T`G=11|l5*EeilqH$$sf6{RGdihlTl~D%F$1IyE-)!N;+>TPK3`ABC0ZA zh3FTGGgi1W9f$jh6RGoHvtCR?%#lML?rE;0({o?TvLy=}LtEC0)c7!_ zQ*Rlzxl3~0mPf1H5>EN!cXG5I+8Ll4d+Z+Zm@Rdul??sK>O9;&|J@(pFQb1Wp0!BT zGv8Q;Gby}y#Pl5dVz%z`kWQW~hr0y;0000000000007{5zRid{_k%U!cmMzZ07*qo IM6N<$g3a!`@c;k- literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00017.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00017.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2a684395302cb32f7f6ae54f927c55426e3620 GIT binary patch literal 424 zcmV;Z0ayNsP)@3hI6Qmyu)t-^4w0vj!kcA7rYH zY5w_{HhhQ(35F0t1gTqNoQA4njz0A?ck!S2@stet0qSk;sAgF;s`H*~CgtiyOt;aE zjXy(vJS9VVKGZC&rj-L|-vzx*wv`JAp3op+w-R_YptKrHn$1T@Kaee zO;+BvHdBzkfiVor9{hG*dnWR#Hg<_K7ugBQqYA*-449y~`ppsQ6jQA?wl=f&;SN|u zsOUrGwAtumpabOPyYaG0pDvm6qYM2DiLJ+@(4*O}oDf0?A%qY@2qAN#ZSkL znXaK^*rm{D`m*IF<*KJ664t#X|KxpT$B8688TkqDZ2hnvz0+YsN#(VU6XCmrh_Vyl z!TO1$jArggMd5nKiR9;C(JH1P_Q)>p9?%uJk#iTME&gHn-v1f9M^5ela`PWV4uNU> z+3D_h6CNB4001z8T2o90RGvsO)|RiKN}54?LurE;B~3aH&Sli6nL|L$O)PIVi$oh) zRu%g;OGObOqk01TbNaL?rbRu`atCOBkv l000000000000017!57nlDGfZ9Lcst4002ovPDHLkV1hU2rr!Vn literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00019.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00019.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed8f5a21585c38288816c99287cb0ebb4f06eec GIT binary patch literal 411 zcmV;M0c8G(P)GCEm4tQ0@(&D${ z#!YLeIrgYb+P-YLNxA7MM8bK^;#Xk(+`+wv2NaGA3H}4=)6sGal z&$Qr8ct|h+0Kf?CDLivkI|RmelPtisPD9U}Azec@4@v!~YYgr9l2x`*cN+&_PqjXz z%TQWK+3T9K(2!EZYrP=;l)pT+JuOP~f)bkddjhH_Hk--hM_r>yphv2wN4u=sYR3-0 zTNK(uxoBu)t*+@5H1r&4bB+=LMV2&jQS}tPi6?b+(#+B=o0S((#GR+4>4+7c(a!)) zWyDDCyiMOPH8(P+Yt_2sv^nhn0000000000004jo_yV9-K+e} z>_=iSwR9ge0&XiVBwYtv?Zz_1967J64Z0#ta$16F5C1TH?!PAQ2c12D+`NN>tT8=) z-C*JWfwEjKiU3>Rn!cjIZ>8F3-) z%=0BEodwOtsuOt9&b01DoCR@4I`K?~pU)`lP;>p>v7?LUsxO_L4(26D4jbw>?bNi| zcJBBZvBOwVf?mw^Pc6IvJ5(RK^*ulqI9cCyG7_m}Wk=T<>U>E>n>G{x0000000000 c003aYAGBB>IKM*HiU0rr07*qoM6N<$f?Bqrpa1{> literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00021.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00021.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7edcff742f4be690056d0524773b3714fa5784 GIT binary patch literal 423 zcmV;Y0a*TtP)vy{(12F+)I;NpjiF#jnq(h-e?&ymaedF1UutCoUJYCB z{BpJ#ra80*_T3OI@3x(!I`zCn(s3#ErS`Rs3(0vZ$`!El=%=HuPSu36$$O3q(X&KE ziWRWK=x1^=-f*7;3CE5LDc8ZnsOx#hzKkD^R+*@Ak5f0=yl|C_u=9@YRl=0AwA zjcL5}3@a|;ga!iu02zS`l;1MKQ3308?9D~iOdjQPj`{el9@_}}XkkHP%biAd##;Tz zYTxQ{encg$v!G#oSNZq%3_Ery)madUM=?Uv=tZy89kw>(k&V$e{zs1w2$j{WcfHWv zn$@FTaX5ap#Hj^EyQzUre)X8Fx%3U+_${W uwb0a{edD)!1ONa40000000000yucT==T^DPk*`ny00005}Xm5Ljwelpq&$UOSx=&MsVp``Pc;zsx^A)+P& zGK_wuI%5s@iQ}-ZxREvwp4NwLh&gh#FB?onJIHMbvV#9IeD43uxStHx07~;8oOB!0 z^A~4X@k3-NFaQ9+DCQUEG$adISKT^E^%x~hbv*`8RhF0|5R5J^6N!ta_62ei?JQ#5 z5+@~nUH+g-IzCt}K|4dscg1C+-33i?*UEm^_8^;`5#lb$K}|r_(P66A7C+8~A`r2| zFOeL}mL0$MHOppCezwLNgDrmPh`1NA6R$;nT#-mewdfxus8&g*?1B+9C8(pzGMw?2 znBRt4MSpEWDKC&`wN$TsJF3>uPDCs2ApigX0000000000;LH30x<@+WNa1xz00000 LNkvXXu0mjfY-Y5B literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00024.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00024.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd44f93ab1a1fc293a7f875bb4ad4fae113d41e GIT binary patch literal 440 zcmV;p0Z0CcP)L{z4ux(O&SSX+K3$RV%tuaE>{BbS z1Yg|9?p-&&HpVgW+ybAj$gu?*qjwf`EBH>}@9r6TGB;;If^EQYAIWRBR;^+LA@CHV z1A*Y^Bcr&-X5{ZPAD5uGpg=8(OTOuehzXM0m`}|CPtr4D5_E|g9DOHoY|1X;`7q6S z=+E4fpx$0VkUH)4d=ey+{>;7q1Ke2JXnm~Cy2|Trmi*82YUM0000GA`-!$Ap7w977+=@^*=s7)XN6^7_vC{ zJgHGhpZFha;~}*@P;cuQgnVo+ToZ zWWWy5k3?r`;XZL3_8TrF&4X9%#WIRHa>=_5Zbcg8v;@@#|6%mp|C+d;G}Zvw<{O-3 z8`JZL)7|hPb|^4}5TXdVz&yD)7X!MknQG3dYTTN0^13C#y(%@$Lt@kOHpo7@wz!pT zCtCA$`Xsnlh}oKbOVhdw0-3v}Bi25@g_t$Qx{=~8$n4n6V$&#+Xir!}ir!qW1gLWT zAJ0s>rqFzwZNo>b;W~( z4dL#3^Q2e62hi8zl=kDg++H+G03HoldHCgo zS*G96TG*|jwEVHG+aoDlTl|t;D9nG5IW?yF z=V#jRA|ezR003a5w)pf#(>xgH>UgX)wKC+fHC)X}{82eS{l-pKjQ5qNxt2qQmFWjvpnU7gVqq&?@{jQ*&)aT-xg zms!;#iQH)x1VhJAHZF#Q-5LElb5Tuu``|7?p6vTchL*~1l=xAH0i*h$lps0%J*!V5 zm%sEGGb--5E!NsQDKvD9_Rf~@p|0j=Q#jOycBA^<8vpM35IZCo003YFMOOKpu_S8cpz=Q@Qz6ffeXX^P$SJw&@%kGeKUN-zd{wzowbZv= zthJ5k?x;N;H49oTXfl1z2J=rE9*=edQ46AH+q2#kRZCSVtnso>vo%lu8zfGT2HFJ3 z%E>K>S_reWEDCG#rp;P+iQl7vHUV9zOhcl`j1RL%Uu&~G4x0cEMLu~LufEn+dX#69 zONsp5R|^1@l0bv5)0$Ivv`5(n00000000000000mlOOcWT(aM@jo<(P002ovPDHLk FV1ly6vfcmy literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00028.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00028.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6611ffe2787485f77fecc945d8ed169f4aef41 GIT binary patch literal 397 zcmV;80doF{P)Lk}o&}i@v!)yO%@}9Za11QWp$TSDj z{IRp_coPv87ytlZq-hW3&(4%Z8Z8H2m#<3l*OiL?N`Uy1>t1pO)`;a(i8 zk<&>IQes|ZwRvad*npM+PK(fvl5Lz8*{|qJ0eXf*wTY|St~?UA{Q|az_p1VT5w*z3 z&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y80g5ub4`FsTJTZ@;egPI~GI|---PIU2 zIHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#Dc8FERAKjhK{cRos@5M2_N>b3zv8Dkq zEbo6-9~L$Mlp_Ca_19B9_#_9ILdriM5|g{)0uFE=Hr8V0)XsuScw|SvJS$$ZHjQ0VG z55;1!u_8qDE#{h6Q)QnQGA>8xJMFwxuZA*4(06`ANnan|`dQGu;Rus-4dHm4svt0;=1D2k%+@Bq*KU0yYTz|jBz002ovPDHLkV1f}m=$ill literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00043.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00030.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00043.png rename to tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00030.png diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00044.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00031.png similarity index 100% rename from tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/00044.png rename to tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/no_whitelist/00031.png diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00000.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..053fc534be7eed4c1cf588f2d2252826fd4eae15 GIT binary patch literal 395 zcmV;60d)R}P)jLBIV?o|6pMvM0Kc0i0?4w_D2)Cbmn+C*#=q%5h&S84&z`lA4xMGeu zh41rKPjkFpsF{^#M@iqQ#jG~PO873r$g8M>(Q_{0sg4IVEf8`P>Oo|?qCQiImY}y;6Zo-9LI6S$_u4Ga$4n45M#%3cOOZj{ZJ$PSYF3~h+Y2L|$bV^j7`t_7_XZ?l zLJXN`3&*Z(8-fIylGe`ZM0%tTG^Q`Aa1`WBAOeCCTnAbj3L7FrYFkUZze~V4*rbkx zX-P=#{H4G}hAD^yh%apRn4Z=Xf}1fy?WCz};h;P!y&D95PfoKGoPH9z5A2evR*dQ(W62Dyqzg!Nge zm|5V#g_cQdmsI5Juk3;27s7}Z55@>!#q>tyfwg5+>qbZf=%sy%i&-kp5CT(>eyMq$ z(NmH>fhf1gJ_k&^{BXM1a3&-Ij7v;6;i2pM(VQmj2m6owsZH1$Wrx2!*(vDn2{{P| oFzaYt6h%=KMNt$*Q51zMFR$ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00002.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7980241856323a359afabb952612c53e1ab67b GIT binary patch literal 481 zcmV<70UrK|P)rCxSAdzGG?uW#eH+$K*l(v!s`4{OtpN@9oTmtm3uig!#u@&wWLPvk7QC?>!? z`XtBO7{Q_0!t=E z%&g|=evyLd31%+)R%s*FrN4?Z`Zl6FIkLzeeUa8SGO;P^C$k{$xsnpwvKovUGAQ_y zwzmcOVijL}qFl1>okBWSI!;ny|h3m|u2!=8kFx)&aHx*qv@ZJ#)OQ z6waXEc_?B!J6v%Z1D1f3+H9Am%-&}Jp}UX&AU`z$-Q%$<)5-@y5ClOG1VIo4L9miP XekfXGIc1__00000NkvXXu0mjfQvBJV literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00003.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..97eab5d99deeae5058b969d5401bab38b91bf938 GIT binary patch literal 482 zcmV<80UiE{P)a#U2H40TL`Z@#eu*>xkKKYC7Ik42f%KmnGk^3!3T|R4&ex+DR`KAXhKrHbi(`gav zA!!}L)PJ(=X<=F0eh6>hU;qGMfKs&8ho(wH%b@yJc9vt4-rLgCcSLrbYT1_)$&4CC zHG0OAua{%lNtmNiIM(VJj`dSGg1Cy9!!KYcsyf<>1nQL?EgO8fCyEettYwGQISB=# z1SCV3qPL-_%dLIOjH`bMGm%(M9beKf8Cr)$q&g89Oiz>m>AtFC%{FOm6jsa2ct)+M zvuLmOCL(mc0E3IRAWC1EG1xvnH1qAZIuejv*Cu-rjKJYf<1~4KR58 zm;a5ExUWZ}*bGk@yI=Rc8YMJbFGx%)kh__CNB!$#`>u;h7W_xzYEMfYI-aq`tM28; zC3dr06&~H=*3X%ClIz0j1AD$nIh?E(-ORORiszEcX|uK`_Ib2M?QQzS&C>racb4b} z#V3yUHd)PNu1V`S_*ie1NWXILGwnFXT>&~9Ihom}b=*69i+P#B{ZDaIx2uZezA|n# zak!`c>_WW%-Bn-Cn*Nh{pTS=6WObeEgX||cUOy-9Ic70A=dW7H^6h>MZok@>`!=*} z{cX!H{P)8a&IR{H>-)Q3AA5O1`{TT6avZ<+&+34IcLj|9-6s0$8R*FXLxRE6)z4*} HQ$iB}B3_GW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00005.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..78b15b726690a1189cf8af3276b49e8f35fd069c GIT binary patch literal 359 zcmV-t0hs=YP)?FMG^0r2hj%3)QiO0?c%9R?OntNYU~L z6V}&JeJydE4J(k^fsU|WF3F1}nz^}Np=^eUF8&BGSXl!)s$Usc^QP84{0{!AnsP!% zx!f-D9!#Z$4rvl?F=41ntB_G1n%j~OdTv2odaxQn3$#}>iZ|D&mN2c zzS8)_zXdrbjxL~;(q~aJ09p_sgb+dqA%qY@2qA>roiE=-x0^M5;l=;}002ovPDHLk FV1nMpm@)tW literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00006.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..303483945e61b92a733b46d6df42175773978ddb GIT binary patch literal 288 zcmV+*0pI?KP)b4u57QZGorZarXkQ$Y=0FqvL2biyl7DS)l+wO}+)$ mbQh96f(8Hp00000px_C((rK|+dB8RR0000H2m#<3l*OiL?N`Uy1>t1pO)`;a(i8 zk<&>IQes|ZwRvad*npM+PK(fvl5Lz8*{|qJ0eXf*wTY|St~?UA{Q|az_p1VT5w*z3 z&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y80g5ub4`FsTJTZ@;egPI~GI|---PIU2 zIHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#Dc8FERAKjhK{cRos@5M2_N>b3zv8Dkq zEbo6-9~L$Mlp_Ca_19B9_#_9ILdriM5|g{)0uFE=Hr8V0)XsuScw|SvJS$$ZHjQ0VG z55;1!u_8qDE#{h6Q)QnQGA>8xJMFwxuZA*4(06`ANnan|`dQGu;Rus-4dHm4svt0;=1D2k%+@Bq*KU0yYTz|jBz002ovPDHLkV1f}m=$ill literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00008.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..1d1b09a149fcb631c5c38870911b98cd58fd5fd0 GIT binary patch literal 385 zcmV-{0e=38P)cltq9C z?9`%-Syy>zez+RiX;Q>|D)MFXL*k_8aRtH^|BG{$N zkc-p^D5&m8H!)Gy>G9`DU4pmo0Z$%2hjjInpNKk~k^<3fU;jCcj?9DR4D*(sS&(s`}pLij8pqG$!| z5dA=KMhmycaMdcw whH?*(l0MI$K86AS0000000000008Fk2VB291SG0gEdT%j07*qoM6N<$g2V8x*Z=?k literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00010.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..70bcb24d8e867442134dac65136bf87b1b51fa23 GIT binary patch literal 406 zcmV;H0crk;P)h65?%V9_27qgf;S{jlIvluj;FkT&@b!`J@L_ zZa+U^!<(2P!2kdNBdJe}j~e5&pxQa@69t|V4Yi9sir->>Wv95N6FgICw=825Yb$P# zxwbKS>i4S6S)EgJF|0f~M~$VkpbyZi9{B#EqB#r7_yf@Pf_Su`Wu&%cuO3AmTRD(| z44q&KI+b2>#cc*7wCIsgCw07*qoM6N<$f~SwJ At^fc4 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00011.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..0720f431fdd0883d0c52124d295ab32967f7ce5f GIT binary patch literal 377 zcmV-<0fzpGP)bWsF`q=*JuhtHdcDD205dhGO-1$Z&C)cNTw z6Q+CM0=qFv)4N>{(%khlMZ$h)=8w5;Z8(wSXGS>#R*rty&)MlTplatO!-?dhgouh6 zutM|`$r&l!5yfHMa3bYA*rXTJsK&@4zue$bltC_2kkt9X!Q}TIp(1W^g69={i!sZmu=;v~a4jm4h1A-2SbR61#`Z6x7;< zs577myRxwkJ#zzMh)@4D;IYxS@mm?{D$Z)5tL2dri-$?>Z5aRn000000000005F9w XxZN)M5`$@g00000NkvXXu0mjfK}W4w literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00012.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..17c59ecff7968be07a8ebc47010789576f6ce613 GIT binary patch literal 402 zcmV;D0d4+?P)u2qB-w|bZxNAnoY&=c(!XrLSI1U5 zznpE-^ci}IeRV|3yKM)l4!ul~beu|kt9`BGLQ0&9dIs#A{dBa|sToi<_>tp6^e7RL zY6k3({Xz+5l`-6`Aw-cnHs^C@WC^(-UXDh_-wM)Odz;D&D*dyN%Ql+`11BqXu|h0} z81V{eKrj6iS2`}2ZDtGBTJJ3AG2pw7&nhEZ9di~Ww@Q$hN#|G)FJA-3JgOccWfL3N zCeoUxi(Xjwc@{99H;vs$Lhk>%1eGf6l;e5I2)z>Y0Fb&dPZ`0y0DZ`gTi#hVq822c w5x5fHI3jHZwxNU&LI@#*5JCtcgpfJ>0_!SF;E)I@X#fBK07*qoM6N<$f=wN--T(jq literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00013.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..b3219b3b23b4a7bf6aeba601ba88bd894c0732df GIT binary patch literal 394 zcmV;50d@X~P);4~#lX^LTM@AL~znx>k zG=^MYpBbg?!BTaSAF8eldLR|4iIHl|6ut`39ckVCsK% znhhs$LV^JR0EW{llY5Qvnp3q>nkqFiP-5vz>a>lk>l&!+TC&P==vH*RBx|em)h4OB zVN_PE6gLF9x1ja>@!3GU1#zm0A_(>LVrjXgqko%8I{cL>(IGV&#vEwEzOr~xd8qkH z$I@4uPG<`0Om2ei6lA$vjJklV>}wVC_W(p+#c&L*9@k2bz=@R;M1&07*qoM6N<$g6?yun*aa+ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00014.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..5acbd69b1805491a83521edd31c83ef4985dc0ba GIT binary patch literal 418 zcmV;T0bTxyP)WZ`G+8P_p=5;6nH)A);yq zMCkoODW=!m8KYo3a3S?P*m^%KLyVEbKAkWWbtl&n)NA~o;bZ?X{hm2l11QXYkZCri z`Qv9g@JB=t7ytlZB;Bmu1Q_QdxzRRm6q-DSkC8_`VfEaM%$|BY6>_-NU%gY2yJ=&8 zZ7g&{;hsF6sBGbOkI&q@xQ{a%5$Sh9kHItO?%kG*?{mam5YI)dK7R4i_|S+5737#mAk3?NvCVb{v;m-yD0000000000003CR7wF$JBEcBwM*si- M07*qoM6N<$f?)Qx(*OVf literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00015.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..132f26c2a053caecb5a3019e768d261fb7d3c451 GIT binary patch literal 410 zcmV;L0cHM)P)WMV>hAE^l8_NG&enkNZ5~-`D3nID^4WYnNdc-%H9t<&rWPX)y8Xz6UkQz5fu@z zg7*{27|q=g!(dx+B4r$G+KXvaYvho3ceoU#lgkvOP5#H^YyUBRkDTlQw9Ge%u);L{ z{B$ec#0m)p001(A`iAX+#u-OEF|lTST0}w#?>EU9%VUpiVg9OVE-s>uxN+4&qvH1T zV{~{?VvOaPh36!}w)ZBhh)BK*qH#6cvp4+_RZVplWRFJ|LbXY2ti*PczYXhIR2h?k zn5Hc}jag?38kHz)E$vufv=MuD3eWObO9VUs@s_ls4cpr;D{0000000000005Z67pGN3&Gp@{sQ>@~07*qoM6N<$ Ef-SVP3;+NC literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00016.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..b544e3a1efd3ac52bc2dec19d0b9a199e4e590cd GIT binary patch literal 414 zcmV;P0b%}$P)3X%j1u%EWk^VmBCME znK0dh7T8T`G=11|l5*EeilqH$$sf6{RGdihlTl~D%F$1IyE-)!N;+>TPK3`ABC0ZA zh3FTGGgi1W9f$jh6RGoHvtCR?%#lML?rE;0({o?TvLy=}LtEC0)c7!_ zQ*Rlzxl3~0mPf1H5>EN!cXG5I+8Ll4d+Z+Zm@Rdul??sK>O9;&|J@(pFQb1Wp0!BT zGv8Q;Gby}y#Pl5dVz%z`kWQW~hr0y;0000000000007{5zRid{_k%U!cmMzZ07*qo IM6N<$g3a!`@c;k- literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00017.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00017.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2a684395302cb32f7f6ae54f927c55426e3620 GIT binary patch literal 424 zcmV;Z0ayNsP)@3hI6Qmyu)t-^4w0vj!kcA7rYH zY5w_{HhhQ(35F0t1gTqNoQA4njz0A?ck!S2@stet0qSk;sAgF;s`H*~CgtiyOt;aE zjXy(vJS9VVKGZC&rj-L|-vzx*wv`JAp3op+w-R_YptKrHn$1T@Kaee zO;+BvHdBzkfiVor9{hG*dnWR#Hg<_K7ugBQqYA*-449y~`ppsQ6jQA?wl=f&;SN|u zsOUrGwAtumpabOPyYaG0pDvm6qYM2DiLJ+@(4*O}oDf0?A%qY@2qAN#ZSkL znXaK^*rm{D`m*IF<*KJ664t#X|KxpT$B8688TkqDZ2hnvz0+YsN#(VU6XCmrh_Vyl z!TO1$jArggMd5nKiR9;C(JH1P_Q)>p9?%uJk#iTME&gHn-v1f9M^5ela`PWV4uNU> z+3D_h6CNB4001z8T2o90RGvsO)|RiKN}54?LurE;B~3aH&Sli6nL|L$O)PIVi$oh) zRu%g;OGObOqk01TbNaL?rbRu`atCOBkv l000000000000017!57nlDGfZ9Lcst4002ovPDHLkV1hU2rr!Vn literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00019.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00019.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed8f5a21585c38288816c99287cb0ebb4f06eec GIT binary patch literal 411 zcmV;M0c8G(P)GCEm4tQ0@(&D${ z#!YLeIrgYb+P-YLNxA7MM8bK^;#Xk(+`+wv2NaGA3H}4=)6sGal z&$Qr8ct|h+0Kf?CDLivkI|RmelPtisPD9U}Azec@4@v!~YYgr9l2x`*cN+&_PqjXz z%TQWK+3T9K(2!EZYrP=;l)pT+JuOP~f)bkddjhH_Hk--hM_r>yphv2wN4u=sYR3-0 zTNK(uxoBu)t*+@5H1r&4bB+=LMV2&jQS}tPi6?b+(#+B=o0S((#GR+4>4+7c(a!)) zWyDDCyiMOPH8(P+Yt_2sv^nhn0000000000004jo_yV9-K+e} z>_=iSwR9ge0&XiVBwYtv?Zz_1967J64Z0#ta$16F5C1TH?!PAQ2c12D+`NN>tT8=) z-C*JWfwEjKiU3>Rn!cjIZ>8F3-) z%=0BEodwOtsuOt9&b01DoCR@4I`K?~pU)`lP;>p>v7?LUsxO_L4(26D4jbw>?bNi| zcJBBZvBOwVf?mw^Pc6IvJ5(RK^*ulqI9cCyG7_m}Wk=T<>U>E>n>G{x0000000000 c003aYAGBB>IKM*HiU0rr07*qoM6N<$f?Bqrpa1{> literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00021.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00021.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7edcff742f4be690056d0524773b3714fa5784 GIT binary patch literal 423 zcmV;Y0a*TtP)vy{(12F+)I;NpjiF#jnq(h-e?&ymaedF1UutCoUJYCB z{BpJ#ra80*_T3OI@3x(!I`zCn(s3#ErS`Rs3(0vZ$`!El=%=HuPSu36$$O3q(X&KE ziWRWK=x1^=-f*7;3CE5LDc8ZnsOx#hzKkD^R+*@Ak5f0=yl|C_u=9@YRl=0AwA zjcL5}3@a|;ga!iu02zS`l;1MKQ3308?9D~iOdjQPj`{el9@_}}XkkHP%biAd##;Tz zYTxQ{encg$v!G#oSNZq%3_Ery)madUM=?Uv=tZy89kw>(k&V$e{zs1w2$j{WcfHWv zn$@FTaX5ap#Hj^EyQzUre)X8Fx%3U+_${W uwb0a{edD)!1ONa40000000000yucT==T^DPk*`ny00005}Xm5Ljwelpq&$UOSx=&MsVp``Pc;zsx^A)+P& zGK_wuI%5s@iQ}-ZxREvwp4NwLh&gh#FB?onJIHMbvV#9IeD43uxStHx07~;8oOB!0 z^A~4X@k3-NFaQ9+DCQUEG$adISKT^E^%x~hbv*`8RhF0|5R5J^6N!ta_62ei?JQ#5 z5+@~nUH+g-IzCt}K|4dscg1C+-33i?*UEm^_8^;`5#lb$K}|r_(P66A7C+8~A`r2| zFOeL}mL0$MHOppCezwLNgDrmPh`1NA6R$;nT#-mewdfxus8&g*?1B+9C8(pzGMw?2 znBRt4MSpEWDKC&`wN$TsJF3>uPDCs2ApigX0000000000;LH30x<@+WNa1xz00000 LNkvXXu0mjfY-Y5B literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00024.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00024.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd44f93ab1a1fc293a7f875bb4ad4fae113d41e GIT binary patch literal 440 zcmV;p0Z0CcP)L{z4ux(O&SSX+K3$RV%tuaE>{BbS z1Yg|9?p-&&HpVgW+ybAj$gu?*qjwf`EBH>}@9r6TGB;;If^EQYAIWRBR;^+LA@CHV z1A*Y^Bcr&-X5{ZPAD5uGpg=8(OTOuehzXM0m`}|CPtr4D5_E|g9DOHoY|1X;`7q6S z=+E4fpx$0VkUH)4d=ey+{>;7q1Ke2JXnm~Cy2|Trmi*82YUM0000GA`-!$Ap7w977+=@^*=s7)XN6^7_vC{ zJgHGhpZFha;~}*@P;cuQgnVo+ToZ zWWWy5k3?r`;XZL3_8TrF&4X9%#WIRHa>=_5Zbcg8v;@@#|6%mp|C+d;G}Zvw<{O-3 z8`JZL)7|hPb|^4}5TXdVz&yD)7X!MknQG3dYTTN0^13C#y(%@$Lt@kOHpo7@wz!pT zCtCA$`Xsnlh}oKbOVhdw0-3v}Bi25@g_t$Qx{=~8$n4n6V$&#+Xir!}ir!qW1gLWT zAJ0s>rqFzwZNo>b;W~( z4dL#3^Q2e62hi8zl=kDg++H+G03HoldHCgo zS*G96TG*|jwEVHG+aoDlTl|t;D9nG5IW?yF z=V#jRA|ezR003a5w)pf#(>xgH>UgX)wKC+fHC)X}{82eS{l-pKjQ5qNxt2qQmFWjvpnU7gVqq&?@{jQ*&)aT-xg zms!;#iQH)x1VhJAHZF#Q-5LElb5Tuu``|7?p6vTchL*~1l=xAH0i*h$lps0%J*!V5 zm%sEGGb--5E!NsQDKvD9_Rf~@p|0j=Q#jOycBA^<8vpM35IZCo003YFMOOKpu_S8cpz=Q@Qz6ffeXX^P$SJw&@%kGeKUN-zd{wzowbZv= zthJ5k?x;N;H49oTXfl1z2J=rE9*=edQ46AH+q2#kRZCSVtnso>vo%lu8zfGT2HFJ3 z%E>K>S_reWEDCG#rp;P+iQl7vHUV9zOhcl`j1RL%Uu&~G4x0cEMLu~LufEn+dX#69 zONsp5R|^1@l0bv5)0$Ivv`5(n00000000000000mlOOcWT(aM@jo<(P002ovPDHLk FV1ly6vfcmy literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00028.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00028.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6611ffe2787485f77fecc945d8ed169f4aef41 GIT binary patch literal 397 zcmV;80doF{P)Lk}o&}i@v!)yO%@}9Za11QWp$TSDj z{IRp_coPv87ytlZq-hW3&(4%Z8Z8H2m#<3l*OiL?N`Uy1>t1pO)`;a(i8 zk<&>IQes|ZwRvad*npM+PK(fvl5Lz8*{|qJ0eXf*wTY|St~?UA{Q|az_p1VT5w*z3 z&sNg!19V7H*sm~$qD+=h>kz&N>^-$}^|4y80g5ub4`FsTJTZ@;egPI~GI|---PIU2 zIHk3Uh++Of=pN9j+-8nGrpXYS(3b*&YSQ#Dc8FERAKjhK{cRos@5M2_N>b3zv8Dkq zEbo6-9~L$Mlp_Ca_19B9_#_9ILdriM5|g{)0uFE=Hr8V0)XsuScw|SvJS$$ZHjQ0VG z55;1!u_8qDE#{h6Q)QnQGA>8xJMFwxuZA*4(06`ANnan|`dQGu;Rus-4dHm4svt0;=1D2k%+@Bq*KU0yYTz|jBz002ovPDHLkV1f}m=$ill literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00030.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00030.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba8f0d1000cede0949e0bd52e661c2647e98243 GIT binary patch literal 386 zcmV-|0e$|7P)J`TPVV8VKl#koo?UZ5g)}zxh5p*!b07D z$B;L=fc6->Vl+Xl^ie2W3>|OLL8VPzYNAH334NdFnLFeoV2=9nQQ|LfImDY= zHmPbUq+o6!T;-ng?nyQs5!q!UV5s`y^$ImX?aNIe3JuFPRyzB_$H8vh=pU7^szFMP zO--z8HllX*)r33bB`6ypPvXAr!g54kJedQ+lpIjMJ}pG8A24YvF+bB4)kcus?U;sX zQ!D@g)Uhp&U%BKdS5Hx_%cmml+l#Wb3Tt&DKJbOxnw7yKvaJXYSX%|b=(*Ohb;T1d z6Hs0Z`xdkn2MH)|sErQ2I-L#@ph|FU6QT(R>IeP*fH&Yn{orB*s7$Cr_!0#G00000 g000000N_>p0a(ew_nPD$kN^Mx07*qoM6N<$g2Ah!wg3PC literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00031.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00031.png new file mode 100644 index 0000000000000000000000000000000000000000..8644702b6cc19292c53b7e86b2e7417a7d5f5277 GIT binary patch literal 536 zcmV+z0_XjSP)aYSvOwv_Ui<*`P(()HBJ(V79#*_LL>G?}#RiK5XWV_OH*0BIHYGbegvX?EEN7 zG8M^-MoUrJ^;AoG?R^HEH2ZeQ+s|1%is5MpuZ>4(70@5JM#Q9E4spQ6u|EY3VSFNH zi`X^vKKN)a0@M_x!Y+z!KUX`|`yBc}?@Lgu4+1&hHrGkF;H&{9)Cc4Er)H$(5L;c5 z!a|$TWq|e7Hp(nnqn7R`7x~-3-I<&P;(#PkVCgv-Y^-6(QPxfPm&}_k|arzBuSFw aN`3+S1CVQMJ=Yfi0000jgU^ZjoIF`y&51o|F;4RDnckp=w037H4ck<_PHZr1O%#mLg z8>w0~T5Jjn%;qHrbPBTJ^UU$A+>f;0T$2wA@CITCt`FH zTSHrem-fR1H=yjW7tPjB*E{yR5A8&6x1hN-m`I>(-6B0g=L~?UHQ?hP%1B*9*(HjlYb0P}kMp!RYbFev`Yg}JWNJ9+uCwX|!l zW}gpa`fIal^ol1tUxsC)U`CF*x|(EH*Dm1*tQ8SM>tXSSnmTV7#O@w;x?`<6uB+K0 z_Z&wCdIfNX&XfL8T8!Kvznn=u6IUdfQ)gdO?9uvrqT)b!FfF|TaQ8Jk+Gw5DMj>~0 z9?z&XaTL`{?A6a$0Sc40Ac%IX$UZ(a@(pi?yav6r%qu_)GG79(%J4)bj8F$xr27o$ z`XG{GOCx+3lHHllvhqahqi6@IXr~)q5i`buEpM?*w+LcWq<={!3&{c`Ns=TR literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00033.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00033.png new file mode 100644 index 0000000000000000000000000000000000000000..c00d3c06c2615657ed1427e05cfb7d9abb691cb0 GIT binary patch literal 518 zcmV+h0{Q)kP)AI01|-nbAO1rLO;DK?1RSO zW;LwQ1T=TT1t2N5|3d9p??s@APD{}87%XHWY+;bjCs+eubqwVD4|$}|A-1|^3JdOr zmjO05Eb&WbZ5MU5gt!ELI4`)0{2<{BD1MbA)l2S`@MaZ&+=gXtv=quJER|v$+Z;KW zRw-Xz56Zcde&L>|_0e{8fdp0B5-g?IBTF{ut<`9aVsQ9<)kmSXjE@`b4I3zYS%yN+|#cL&&H0gbRLK;oZpEAjLhaGgYaLgVro`W)?(oSclD$Oxw z2h9wsnpVI*@B1n5Kks?neP@-IDx^)8(i$utvWDWiBH&a201|-fbAO85MxX8q`=Bv+ zS_5k|0nMFZ0|<)ke?#q9?;+4cr(4kS7%U_awqcO2XV3#+bqwVDPkE%*5bLgyjRjA` zZGf#EZt+X1wu?F~A&$Tg=Yd`1A2O_fqM*oc8$jDG8}$$R&Zw$)I6r+GVHq#4QY`J3 zF}8)`B%H7tHx_)0a7)8!dK22QG9*m1ZsJ@3jzI5Yob!ZQ5<9uaBvbbHcjE%)AM) zaOi7Q^1}32YaPo!Q7FN|_kz|$cDh5f)aYa!SMNt$* dQ4~dS4qsYli$LsffiVC8002ovPDHLkV1j7#_UZrt literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00035.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00035.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee582fe8049a575885999b330725b4d4fd294d4 GIT binary patch literal 388 zcmV-~0ek+5P){K^^MzQ>^F?8L>s!5` zC3wq;Vg(17-7%+`laBw>$9_UJ<7Pv2fnLW789-KFA^%eWJVBt9zk+Y3FF`995dZ)H i0000000000umC^Ld*KV(Ofdcc0000PO_<|>MU|HFwl}c8on25qR@0NF*IFCDWKEEeJLqK0VF%SLKJDYt#5JKs(RLa= zp)}3bxfe5973~h#xB7O-+wC>3>)Q3U7Zg%DYiWhyj->u>4!}c!h#Ci+ANy0p5`C;H zc)Sv(^}((8VvQ#1XV_1~*1w^4uGh)VlKUs0+193@b(tySk?Py=YS5A-yq zCRX>5sIH#G!n^S@AjXPq3KQL`jP%cw{MQ(|Gkm;AybK+X{3?gHqdqQ)&x~3;jIV4F zO3s7`N9jhVcKfJ2YgCW{VNUoY9wgC9i(=Mk#ZsY359F1S_{;rM-8=m9{i2|A%qqXT*h%k zT)^zV3R^7S8L*;wOqxotJLZVaSf&GP>RM<&&8DW9Yo`)p??b>Nb0_Hk0fqCAZ6{xZ z6m{P|oudB-=x11b_ywYzqK*nE3M#-Ro)36Fy8o=m+Nd3KigMO6f$YmR zZUbx59Cuw*`_gKyj#xW8p|r2Wk|yU`8oy*tG$DUVBWDadK(pwuk9)VSL7Nn5r_)lE zCfPdnW=5}~-vRq(-(T|ncU;#vch>e&g|x;}T4T5)!QRaY=u!ZH&H>l2{V8&RK9?0D zUP;sY;AT~<(FAscJtG!>L+w;=kew;_Up}#|4?)X)u#kk?hE7_mF2W!Oz-k}JVN4AS z_Yljjk-$Qm(KNvNvTdpcx>XVB!-M?W7`iiky(pp#9Z>u#M^}=;ZZ`a#moTNML2u5E zb{2wLk$z;|)sP)&&vuM^g%mg8FT$UxxRBvQPqlYCVoQSd7G#0v3VcdqwFwETH2Ghi zQm!E}#-TuOt*E259@LyaelgP5>KG9f(Vpm))4~w7Ga=}WhXK5usQ25CJzNKpisk@y zv{(fJPdE}5Vi|Ld_6Y11RJq002ovPDHLkV1l@5=Oh3C literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00038.png b/tests/integration/nano/snapshots/nanos/test_sign_sc_rollup_originate/with_whitelist/00038.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ec6594fc9abfdb25b47343987939ca905b5f12 GIT binary patch literal 400 zcmV;B0dM|^P)^u9(#;6m03;DEV0$Iy2 zUWPVqwp|w$T0(DWV(h(opy^ymNt!%sseG3+(S*E}L6tp>AgYyad)qU=Chbt9o|TcR zG|AAt2Q~5~@(37r`gNDDw@1H@XIBa@RY({tr3K80q;fPnNL_)5G6UT2`e`Z6(qU;CU~^fRs)?>wMw&dyKZa>e_umW9ifI6_D%;Zvl#!X2wJ^u5Tzimt zJ;=-}3nS|_yXHfC3j#MXw*lB2&Wf32ZUg)Q;x%+OVi2t8{)7m4oarN=gnTkdADnRw uy_L!>bK(o=TEGSX000000000005%``<=If<51W+$0000vY=8@?>^dqt;x<;lVfgPxy5t>X5tv` zJG|>n8ey4!*A2($6vSu4VhS$kDN$KsL5~P;LjOk>WoYy^)LIqCmRxHQ=E~~lRE6BB yD~qbCQ(uI=%6L3!$Jq_wb@a1{1O!14{9oSMJI$dbk=C;S0000ep>KB@(8(i6LOx7z-Z_}vLMz5X&L3nPAosKk26mYsA;?cuxN zesYz}q%(1of0Zvxz5L)M-;ChD1zL^P(+~go6w|YAR$iEv1pAC-^^c}KJ{_E7WwiJ8 z7g>WXztpl5eLUh$`)YErPfISkd$UAp`kC4fC*Qu97dowYabuWp@Z{HVJ(9bBT{~h@ zA=UIq`iW!R`rVx}g}QMz%y*{PO?dsQNFl4X@uK_8=bLjpk4aSJAJ3cdt%H?;K{PJ= za(LaB>G$Q&y!NWR`sDBT>yz%(*tldXKNG%g68$-MPuJX@+m3mg&ZMrpbEhcpbXeJ& zhEF9Ip0Va`-N$??_|)QH{rBg-%1+QZxHof$nsvy1)&GLO*=L8`e_Oz=;w#ZwAq=zy bD>(m|_3VB5?!T5+r$F+au6{1-oD!MO1MdfrBYy+7Nkl{vMfrIg1VHF0=fN;#WR zUJ%tpox1#u{u;BRH{6n8J@uw$>I{=ysBdWo=tH0@7JAPfK=jUv)-T);x#%3 z;GFoDoRHi%kit*gel1o16jFM5NLE|AT4x-{+>L?W7l#4+kR_A7pWeR)jK#i~Pc~sx z=6gT22H;%l!1SlTQjJZ!CHv@q{Ab$`D)X-NAOe%&EG%HMQ541B{ zE$KnHys0RAoI)v76i@>gK@^q+Q^2~B~1LenrqA^VkAA{RudI80l?eRf@7ZO z@_JKWk1ok}nCRnzbS6^U22Ii#V=aDG0C^3QWHO!W28!96T2No30zO*^&;gBu700)ar_1%DTGz`aw}yIC5j!$=J$%*51DS)8|QT01g*4pGNPNh*RgBU8IM?fIS( z8vz1zO@6gEa2!W#t@l1Yi?6-+S;lO5%@E#pRx(-*Z)a7rz;=F2hZdEJ&`+qq-5!PQuz?-5UmwfzO z)T3FRf$~#WYdZn+fm=je5_qrS0c~pzbpJ~c8DmJSuE@kPi_Ob`Xy|Q}#bDjFbU%5L{}^~W z@A2n<1WCX>o_`QR$oC=EsOpS)Ob8A7)p#qcct-X5X&Nf|nTn-el?fD?;V5ZNm5a~8 z2Soq+mL_gq&91zR^E8_3%)`#u?TQa#7d*ZO8cKNjktX^mFl6EzR!?m6mS0Cdm;sPd zjmyM*>petF$6vwj;O>=1nDKi+3Ygxr>KAKa%)F+Ojek`JMh)ps={6ysfobT4lbA)V{!fR*;OqZ&D z;^W|(0C#~asx}VFl&7x&Gx0qBrF>HY(iJk55yFI!Cv&{gfFm)k(0r?fbz9JSaM+Fy zxA8I9>wgH+s!V*!zhEhjSD-maSh|x*ldUDwws8tge?0aq!n0Mqm2SZLssF!rZO;>j z``R6!ZtLj@&X``4Bmto7I_R@2@gYthRm}4X;)!Q8u%+!bC)Vka%It`CMvx>xn;+5f zdJAept<8 delta 1008 zcmV3_na4vcXvIF!S{e;!mSosLBQxGKSEPrbLysO2+Tx&^3q0{1rV2O!v z^dn3lIrj>MLZMJ7ycQlAr$H_m#T%bo0{N_f!xQ+t7<3+b2)B)0GCG_v>OL?VTCvF@ zA9pAOOVYaF2?oF2*UazjeaT=Sz^uweBhNygk6gnWsTaQzuRnWjC4wR~Q|c^EN;m4e zq(Yr0$bVizF~>CHaM*5X6CQ>m4}u*5;}Gu;Uo*qvK}s&|Tkj(z&lvg^bik|^i1s6) z`61Q_rgDlcMhQ5cJ{^CPZX=`iMgU~5a$K7b2p`FDUVaD`a&Jy1509)w3xz_VP$eq?xi1cPA)QqM53|!|DGHW z2xO#c+vac_$8j9=n%y!P^}{hkW8OMC2NcHnX?iopzVE84@}#`AKCEwh14_S@SlVRt zeSu+AJs&CLv|$F-Et<1^-&r4&8I^uIlBzbxnHdx}nCa69n12_2zsvj2Yrn3svxb+d zqzFrG1(pvvhT^s&(5_JUpMd-OeivgC{qU+V50--;>qUyC?c8^o3qVk9rD>hoT?E$A zPg78O4iXtiTQf=b(^vzx>>SAUcSWR*A-1|kCKf72mjU)+bBa$HwN=$>9byUmbS}7x zd?C#d0001A$$!6ykgOKaa?M6I36X`qcQYXOA<`(7cYJg7MBYmM^14^ghsrgp0!2ox zY4{pcZ7EnrX+%;iI-RV`1e5$!6`Qf*4|s1C!e~U8)AHe4cFk#iM#`|Prs&_Qp9C+) zY)NmW!Y;K<$E*-Jde}jdm!qkoD+BEj*le3S1+j5luYY^>>r+s~{Ik)oQ<-1cZl0Tb zJ~dnt7if4sD$ z&X8S|L?-6!KCY0y6s=CySiG*}kCGKTGGGKJd{&^X%H^7L zlp>a5g_B1LFGzq|ak8R+@rZjrSAP$f4L!3U<7R1zrE{3|CXNqdi-5bTCPctUv;Y7A07*qoM6N<$g4AS!bpQYW delta 917 zcmV;G18V%q2CD~-IXzr0}?%6;?o#Vt?=(fYnA{oUr>i@=M|b ze|*Y|5dXi(g>_=Ejwf>=gZ#1uiIZzVcx=QSX2B5hDNY~4e=7!jqvwU|u+#=q6h%=K z|DF%+!k7zb&u&rVB1wq$=r?l}X9ZkG^oO+4Dl~S|26n{ToFf8yvQi=jaLquh4=i&r zC+8toiu|4cAAh2!ZgBNWyMV1|AqA7Yv4q{Mmafo-0}WnD6BF}GL~lGbnnQ#Es{t<* zVp*Jzn#QS3-aeptqV+;VR!w$wdU%jr0S90QJi}pdw9FkKbv*l(zb0uyS~=~QVyu zM!PGDq9}^u7HlyNJm{VIGDtkc%poD(0dGS&iI&@#?v3?9^9&(P3N%mmVqV2H{ceM{ zP6s^l2_be45WCzzfMh&66DJ-oOcF-4Ci~ov9>NVNqFHARzBc(91YgBoJnMamT0o3A zk7=TNX@7rE0Qi7jp#@Ep^ThoZ*AXva1#m8Bx1e?4)A=aZ>X7f|>35=ncCx0kP(6r6V|#p_p7SP> z@sKH}f|k?Tnl%ID0AK}8{K*3E%oG~a;#W?n5s!pZ-coRvG{KHr$Vd@fwBn{cW26bF z9tS*yIUOw&U4Hw~JDR2iT_KeEyK{;MBYp+#jMirICSqIyzk+r~YcuhRaZb@nt3OtY zrhlQtva>tjKx0oGai>mbZMaj-W>FMHQ563fBC|M4qGoS9ru;F;Ne7g)$RMVry*pXr zAjY%fkObY};R81*e!*gnIi1CFumvr$8kSfAv*00___Mo1KIqZ1iS{2BYy(}Nkl&!I6BA%bH2-6v&8 z0%44nGKYQN_kE|&?3I;KE9MmCtYrdONgqobUoxE; z>W&hzs%wp%(M%a=@EqVnH(q9IVs*-Sw`*;*4gwLG^H9Es9n2f)4mU>w4|R{Uw4!_w zlh5kTLqBl@+aUYb+H(E9F2}sJMU_1J5OI||NBUG=+>jTWPWT(GcrkDQ02ep~ja&s)yN zma^D2A%|vBYy$qNkl5xVz)Zm*Sx(;7EA8YU$lXVmb5JTKcVlPZgBz zPq>GpTrJ_pVfG!cx@za@YqiM)ILhT*guAsth?bysfv%ZV8ArK{`%q%K#wn?FL?ZR4 z%)A36%2IRuGJidqk5=C@m{hZ>M=(QOWqmlD>D*`YEwFN&zDknOzvGz%l*{mbX7tO0 z2`EmGKQ{W$Lk|9uH>g6+KcC7bcf~9+nT8`ks2#jML3Ezm3&4 zHpIs1j%gnv`c<>fI^Ugj>BA`ZH)0xbMYex>Y;|DttbTId`vkX38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjfPjt`+ delta 386 zcmX@jJePTbN_~o_i(^Q|oVPb4g_;$38WL~4^xgA+;tp^587Gfy;Fxyy<$v3qE=kRc zE=`v{Q@uXC|FOi}kCFF2ss(S-6T5b|+WwLF-3d0m{xT*DBYuUb#CphZd(E9h_ukwDSwLA*;6WqWjF}n{zymNmS(@&zteBgO!0nG%ovc zc-@!j_vO#L_Nu)4Tfna3E74jZ473F+ aIRBaT?0xy}zm`^~K=PihelF{r5}E)fUbm|N diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00000.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa51df290f85860c685b43831f20f559eca45c8 GIT binary patch literal 463 zcmV;=0WkiFP)F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..36cf8c9ff2466860c385759cdc6412a4fe0b9515 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?M1>EaktG3V{g=t<2A0uC2d zrq12*Uv=m7pBuWA{yGHgHk?_#PbtZn=e>jTu& zYQ#VO;)fcmGG2b3ME8_e-?d58f&H=w8{_nY1+*HPTY1Yvvb3e2m zuXl8>zGzhC@H}HN&~^43+>V>%+uf);F@ILeV$-xAzaJaqZCWz7V9V-l*MPBu1#EcF XpPJKIws-31pCDOJS3j3^P6 z8y$ZMTFVp{lb;GSEv|Fp$rQiYOwWM05ogOj9mF{??Wk~h&e@rp6&suf(HS7Fch}Ri zxonoeF}MMuNm)C0xZ$5q@DzAO)Wk{Yvily;W3S_1$~OhT-67pJq%iV{qcLX_?zQrx zbP4RAec94`Hhbo=-92{4$NOq>j2ctx;shXQI(K?+ie1F@M4P9JsQGD%| zRN_FmF$5<7Tz&J7Hrk-HNPFIw2Y9U7)J74!6tZQuH<4jZs{_XVb4k|m)X1mpb@Sjc zaNV-F5X=6ABKEyM5{9YS85!LJTpgsPco#Ul8IskRXW7ASUR}Lnwnlb-_X4r9zw9k$ z3nO-As!oWk4;_Bk84 zt?m^}-h6HAHf65lTW>#z=zsQm$@2H%!L;i|Pd?my{wBvh$fn2po$Eop|4QXzrITWR z=2mn3f9Wo+;Q7=4{uTz^<<)(gKc&?FTE_aI_~BE}9rre`=G2|N{oz+WU_c;)1EzNv XU7w!SY@Q^Y3KI8p^>bP0l+XkKqjQme literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..908600200d45a13b6992c9edeaa2393b0861e45e GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2#>^dezp0-4j zcP)SQGrv7zop@z^!{@^dD({O;3pZS0lC^y<_-c8seF_?~)R`1e_fGkV^^&kc_nKe2Ci;Xa$I%_*{c^5!6)e{)29 zm26b^_g($2+GqGHEFoLHbjrtX)ApXY*wuVn^43v}zKkE#FzsNY5Gxh(T zJCBYVE0jbr-{!qkvu!oY_1(2BlJPz7r`{q)_#9?Etbho@b5$RU8^@vO`qSq zo+ZVt-qe2XWwpBHrw@L;*eY}K@+0Y8ops?&hl&kuZhzA9_O#D`fxfc`A1#$x!mG09 z1T%xWQO$YJ>YqQwcZDusuKu*@^hMcgTe~ HDWM4f9D9lr literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@Xe>EaktG3V{fz@iodj<(Bw z`H%kgKZ*VIfT!8hA*ti;+q(O~A)ne=kMd3f=|TqHKR)Td|6RwkEqC(aRyG0K+=idJEc8z{!vY;Sy?Y&K!ZXCBlwc4W# z*M|A7uh}3Y9r|tZ_qQ>h1^Kr`PwkCad+gTQS9=!cOa73HTXlEG?#HL5KU%2%z@uV! z*2}vtNtT~)MEzRZ=r20uo&S#Z#WA`Mk0*YU-LNa``K#=$Cs`~`J&kGEz16W}+Jdsi zbu&XH-FNo<4oKQ{Omk(ai_+KSXZA3woC+%bV`Mw4KkUBIjF8Q%+zp&#Q)?~eyu6eC zS$9LxoPA!CF7AIklV!^34|Qo@PB(LE_)V}k`*q%#@82Zz6;9{u=but5KdNI|zffgy zDogUml&j|!z5d{8{cB#;)t<{|P51X+H8VSM>}6l3ywb1G&F8J|&nu;WmemiwSKvUdj@u**QKfk3SLZ?7@Or(7D5aEt&c7~-vI9S@ zDPR2M?6XWEbQkv74!ZoZ+ncmZJ#UeeQXX0UTFz}JUP#WfG`{VComW4lRGm)M4b>(; zns_1QU2^ch19n*bOipIB+y_j;{KN~X_Q7-X!Bw>PNVc0D`Z5ZpTI9DQXms%>Q{MZx zS@(m4AK@dEz2=IA8z(008jEWAs5+4r4@uw)-RIwzrZ$}LUXHu)7C6ZoLzUw7^c8euB0JS-*DK}Kr zRoYGr;h2zEqXB#@W}+&Vey2AnCs*kUQlP*t%QRrWb! z*~&+!r8Po>0{{R3_G4HD9h9Y&S?bbyBVWZr<9f;F*_n^M8SXZRRc0#7v?FCQky|9K zvdwe2g_uSxwuL#fA^I%(Qp9MzrmfJ(qVh({My485zOtzD+>KQwZ(f1vRdg{di# zptaaCKf4SC0002MLhS#Nl&D}HZ7wQetEs6x3!ST8mzyK(;;N6d4X0n5W12fvGPYSx zjql)^w<4nYsT)+*!$wTL0S&L1ovF>4uf@}Lxs*8S?L^7md=-qw@UFBGC4Ow4Z9hn& zS16>2DUw&rs#E)Z+K!gUKY)Z-ZSDq4%24O)Y$0Xn)En=|>{)V}hiH5N0002Ef>qxS z$VQvWCehT^jZs~Nc74>?+C|2XO~Z=v96QF`%x7-?6{U4V)%Cissmir5ewaZ3h^q`$6=$u{sq3w? jNHWZJC~*J)0F3+sD_C*m9RV=200000NkvXXu0mjfvY&e%b+u7$dh0r~*U()IJ!bb}KQ3zjX^LU07+y=Xsjww4euo^o{d8 zO|(Bi{WlYCSy?u$7NnjLxFS8ZgaCi718eF(fcW}CYY8&) z`h4)?T92XzM+hN=Y)pR&TGXec#WzkUc@P~CsTrvU)D!EE!UiGVp3sy>@lo<1QBvcJ z(gF1f!E6Uxh;b)@Ty(J$x??9e6ysL(DQQ9SSe37Ip$-UE*v*NkfkPJcDI|~2N4`B< z2b@-@H>d};pskdjvX&@|N|$Fo8FxMI=jQr9fNXG4&&MHAh>rw$Le2LS8&V;jjSxZz zA$u_VOEOBLa!7B|Vv^ouRQO|YHPhX=XAp{#sE|CSjkL+4e3xmLi%V~&st)=);i#eY z*~4$hR@|@?_DNKDo@DHJ4k-|2qEN$Z?lMuTxX3z QTmS$707*qoM6N<$f|xjnrvLx| literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00009.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..659efc67dd7c30ced3b30909e95d7081f8dc59c1 GIT binary patch literal 845 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 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00012.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f1700dc5145fc099930fe17c1e3e95abe9d465 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jmba4!+nDh2#;G|{+o`%F- zmuDCJSFW61n=orBi&BC}+VlVOqGl;5DP0P`ajZ~Au|;BW&9wFAvZ?I$yFC2rcGm7X z>AE%fzE#H0%-4>y%wzK=N-TDH7XLYB?v4ptjP?KQVlI34S0dTaT9nz#eBaa^0d`)K z_FE^k-xI$yBdlEAt@-Vd)~??V?*2*?wRKxkv+Gc{Zc$jtr|TkDtbVpXP5yuXOLfsF z9*)~F%}XL?sQrC;xzqe+ViO|+gZ%o7ERRd;SGb6OJHoQn#&px2*BiHU%#VBWqV;Y- z=SDq~q##ez@bsP67bkz3v~y}+s(DFzob#FT6>*ZkpXOye|9I%8<(K0(68{>;9iP-t zv;C^YwN2Nx_exrdBWdwm`maFt30Q@vtDnm{ Hr-UW|bELez literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00013.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@Xe>EaktG3V{fz@iodj<(Bw z`H%kgKZ*VIfT!8hA*ti;+q(O~A)ne=kMd3f=|TqHKR)Td|6RwkEqC(aRyG0K+=idJEc8z{!vY;Sy?Y&K!ZXCBlwc4W# z*M|A7uh}3Y9r|tZ_qQ>h1^Kr`PwkCad+gTQS9=!cOa73HTXlEG?#HL5KU%2%z@uV! z*2}vtNtT~)MEzRZ=r20uo&S#Z#WA`Mk0*YU-LNa``K#=$Cs`~`J&kGEz16W}+Jdsi zbu&XH-FNo<4oKQ{Omk(ai_+KSXZA3woC+%bV`Mw4KkUBIjF8Q%+zp&#Q)?~eyu6eC zS$9LxoPA!CF7AIklV!^34|Qo@PB(LE_)V}k`*q%#@82Zz6;9{u=but5KdNI|zffgy zDogUml&j|!z5d{8{cB#;)t<{|P51X+H8VSM>}6l3ywb1G&F8J|&nu;WmemiwSKvUdj@u**QKfk3w~ba4!+nDh2#q)@X0PebCZ zm%e-cPu$@xKjY+)4IIgOjX`_P+iiYp~^)T6Ut3N8D*&O)mCn$whZ>mPk!MQ~TlM z+ZXdfrxh=53=Id(-f##w(&`jQ-qY33Wt~$(69B9yx!C{! literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/00019.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00015.png similarity index 100% rename from tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/00019.png rename to tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/no_whitelist/00015.png diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00000.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa51df290f85860c685b43831f20f559eca45c8 GIT binary patch literal 463 zcmV;=0WkiFP)F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00001.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..36cf8c9ff2466860c385759cdc6412a4fe0b9515 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?M1>EaktG3V{g=t<2A0uC2d zrq12*Uv=m7pBuWA{yGHgHk?_#PbtZn=e>jTu& zYQ#VO;)fcmGG2b3ME8_e-?d58f&H=w8{_nY1+*HPTY1Yvvb3e2m zuXl8>zGzhC@H}HN&~^43+>V>%+uf);F@ILeV$-xAzaJaqZCWz7V9V-l*MPBu1#EcF XpPJKIws-31pCDOJS3j3^P6 z8y$ZMTFVp{lb;GSEv|Fp$rQiYOwWM05ogOj9mF{??Wk~h&e@rp6&suf(HS7Fch}Ri zxonoeF}MMuNm)C0xZ$5q@DzAO)Wk{Yvily;W3S_1$~OhT-67pJq%iV{qcLX_?zQrx zbP4RAec94`Hhbo=-92{4$NOq>j2ctx;shXQI(K?+ie1F@M4P9JsQGD%| zRN_FmF$5<7Tz&J7Hrk-HNPFIw2Y9U7)J74!6tZQuH<4jZs{_XVb4k|m)X1mpb@Sjc zaNV-F5X=6ABKEyM5{9YS85!LJTpgsPco#Ul8IskRXW7ASUR}Lnwnlb-_X4r9zw9k$ z3nO-As!oWk4;_Bk84 zt?m^}-h6HAHf65lTW>#z=zsQm$@2H%!L;i|Pd?my{wBvh$fn2po$Eop|4QXzrITWR z=2mn3f9Wo+;Q7=4{uTz^<<)(gKc&?FTE_aI_~BE}9rre`=G2|N{oz+WU_c;)1EzNv XU7w!SY@Q^Y3KI8p^>bP0l+XkKqjQme literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00004.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..908600200d45a13b6992c9edeaa2393b0861e45e GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2#>^dezp0-4j zcP)SQGrv7zop@z^!{@^dD({O;3pZS0lC^y<_-c8seF_?~)R`1e_fGkV^^&kc_nKe2Ci;Xa$I%_*{c^5!6)e{)29 zm26b^_g($2+GqGHEFoLHbjrtX)ApXY*wuVn^43v}zKkE#FzsNY5Gxh(T zJCBYVE0jbr-{!qkvu!oY_1(2BlJPz7r`{q)_#9?Etbho@b5$RU8^@vO`qSq zo+ZVt-qe2XWwpBHrw@L;*eY}K@+0Y8ops?&hl&kuZhzA9_O#D`fxfc`A1#$x!mG09 z1T%xWQO$YJ>YqQwcZDusuKu*@^hMcgTe~ HDWM4f9D9lr literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00006.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@Xe>EaktG3V{fz@iodj<(Bw z`H%kgKZ*VIfT!8hA*ti;+q(O~A)ne=kMd3f=|TqHKR)Td|6RwkEqC(aRyG0K+=idJEc8z{!vY;Sy?Y&K!ZXCBlwc4W# z*M|A7uh}3Y9r|tZ_qQ>h1^Kr`PwkCad+gTQS9=!cOa73HTXlEG?#HL5KU%2%z@uV! z*2}vtNtT~)MEzRZ=r20uo&S#Z#WA`Mk0*YU-LNa``K#=$Cs`~`J&kGEz16W}+Jdsi zbu&XH-FNo<4oKQ{Omk(ai_+KSXZA3woC+%bV`Mw4KkUBIjF8Q%+zp&#Q)?~eyu6eC zS$9LxoPA!CF7AIklV!^34|Qo@PB(LE_)V}k`*q%#@82Zz6;9{u=but5KdNI|zffgy zDogUml&j|!z5d{8{cB#;)t<{|P51X+H8VSM>}6l3ywb1G&F8J|&nu;WmemiwSKvUdj@u**QKfk3SLZ?7@Or(7D5aEt&c7~-vI9S@ zDPR2M?6XWEbQkv74!ZoZ+ncmZJ#UeeQXX0UTFz}JUP#WfG`{VComW4lRGm)M4b>(; zns_1QU2^ch19n*bOipIB+y_j;{KN~X_Q7-X!Bw>PNVc0D`Z5ZpTI9DQXms%>Q{MZx zS@(m4AK@dEz2=IA8z(008jEWAs5+4r4@uw)-RIwzrZ$}LUXHu)7C6ZoLzUw7^c8euB0JS-*DK}Kr zRoYGr;h2zEqXB#@W}+&Vey2AnCs*kUQlP*t%QRrWb! z*~&+!r8Po>0{{R3_G4HD9h9Y&S?bbyBVWZr<9f;F*_n^M8SXZRRc0#7v?FCQky|9K zvdwe2g_uSxwuL#fA^I%(Qp9MzrmfJ(qVh({My485zOtzD+>KQwZ(f1vRdg{di# zptaaCKf4SC0002MLhS#Nl&D}HZ7wQetEs6x3!ST8mzyK(;;N6d4X0n5W12fvGPYSx zjql)^w<4nYsT)+*!$wTL0S&L1ovF>4uf@}Lxs*8S?L^7md=-qw@UFBGC4Ow4Z9hn& zS16>2DUw&rs#E)Z+K!gUKY)Z-ZSDq4%24O)Y$0Xn)En=|>{)V}hiH5N0002Ef>qxS z$VQvWCehT^jZs~Nc74>?+C|2XO~Z=v96QF`%x7-?6{U4V)%Cissmir5ewaZ3h^q`$6=$u{sq3w? jNHWZJC~*J)0F3+sD_C*m9RV=200000NkvXXu0mjfvY&e%b+u7$dh0r~*U()IJ!bb}KQ3zjX^LU07+y=Xsjww4euo^o{d8 zO|(Bi{WlYCSy?u$7NnjLxFS8ZgaCi718eF(fcW}CYY8&) z`h4)?T92XzM+hN=Y)pR&TGXec#WzkUc@P~CsTrvU)D!EE!UiGVp3sy>@lo<1QBvcJ z(gF1f!E6Uxh;b)@Ty(J$x??9e6ysL(DQQ9SSe37Ip$-UE*v*NkfkPJcDI|~2N4`B< z2b@-@H>d};pskdjvX&@|N|$Fo8FxMI=jQr9fNXG4&&MHAh>rw$Le2LS8&V;jjSxZz zA$u_VOEOBLa!7B|Vv^ouRQO|YHPhX=XAp{#sE|CSjkL+4e3xmLi%V~&st)=);i#eY z*~4$hR@|@?_DNKDo@DHJ4k-|2qEN$Z?lMuTxX3z QTmS$707*qoM6N<$f|xjnrvLx| literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00009.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..659efc67dd7c30ced3b30909e95d7081f8dc59c1 GIT binary patch literal 845 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 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00012.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f1700dc5145fc099930fe17c1e3e95abe9d465 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jmba4!+nDh2#;G|{+o`%F- zmuDCJSFW61n=orBi&BC}+VlVOqGl;5DP0P`ajZ~Au|;BW&9wFAvZ?I$yFC2rcGm7X z>AE%fzE#H0%-4>y%wzK=N-TDH7XLYB?v4ptjP?KQVlI34S0dTaT9nz#eBaa^0d`)K z_FE^k-xI$yBdlEAt@-Vd)~??V?*2*?wRKxkv+Gc{Zc$jtr|TkDtbVpXP5yuXOLfsF z9*)~F%}XL?sQrC;xzqe+ViO|+gZ%o7ERRd;SGb6OJHoQn#&px2*BiHU%#VBWqV;Y- z=SDq~q##ez@bsP67bkz3v~y}+s(DFzob#FT6>*ZkpXOye|9I%8<(K0(68{>;9iP-t zv;C^YwN2Nx_exrdBWdwm`maFt30Q@vtDnm{ Hr-UW|bELez literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00013.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@Xe>EaktG3V{fz@iodj<(Bw z`H%kgKZ*VIfT!8hA*ti;+q(O~A)ne=kMd3f=|TqHKR)Td|6RwkEqC(aRyG0K+=idJEc8z{!vY;Sy?Y&K!ZXCBlwc4W# z*M|A7uh}3Y9r|tZ_qQ>h1^Kr`PwkCad+gTQS9=!cOa73HTXlEG?#HL5KU%2%z@uV! z*2}vtNtT~)MEzRZ=r20uo&S#Z#WA`Mk0*YU-LNa``K#=$Cs`~`J&kGEz16W}+Jdsi zbu&XH-FNo<4oKQ{Omk(ai_+KSXZA3woC+%bV`Mw4KkUBIjF8Q%+zp&#Q)?~eyu6eC zS$9LxoPA!CF7AIklV!^34|Qo@PB(LE_)V}k`*q%#@82Zz6;9{u=but5KdNI|zffgy zDogUml&j|!z5d{8{cB#;)t<{|P51X+H8VSM>}6l3ywb1G&F8J|&nu;WmemiwSKvUdj@u**QKfk3w~ba4!+nDh2#q)@X0PebCZ zm%e-cPu$@xKjY+)4IIgOjX`_P+iiYp~^)T6Ut3N8D*&O)mCn$whZ>mPk!MQ~TlM z+ZXdfrxh=53=Id(-f##w(&`jQ-qY33Wt~$(69B9yx!C{! literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00015.png b/tests/integration/nano/snapshots/nanosp/test_sign_sc_rollup_originate/with_whitelist/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7736a36f8656e124d9926a12e22feaf0e9f788 GIT binary patch literal 793 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 delta 1008 zcmV3_na4vcXvIF!S{e;!mSosLBQxGKSEPrbLysO2+Tx&^3q0{1rV2O!v z^dn3lIrj>MLZMJ7ycQlAr$H_m#T%bo0{N_f!xQ+t7<3+b2)B)0GCG_v>OL?VTCvF@ zA9pAOOVYaF2?oF2*UazjeaT=Sz^uweBhNygk6gnWsTaQzuRnWjC4wR~Q|c^EN;m4e zq(Yr0$bVizF~>CHaM*5X6CQ>m4}u*5;}Gu;Uo*qvK}s&|Tkj(z&lvg^bik|^i1s6) z`61Q_rgDlcMhQ5cJ{^CPZX=`iMgU~5a$K7b2p`FDUVaD`a&Jy1509)w3xz_VP$eq?xi1cPA)QqM53|!|DGHW z2xO#c+vac_$8j9=n%y!P^}{hkW8OMC2NcHnX?iopzVE84@}#`AKCEwh14_S@SlVRt zeSu+AJs&CLv|$F-Et<1^-&r4&8I^uIlBzbxnHdx}nCa69n12_2zsvj2Yrn3svxb+d zqzFrG1(pvvhT^s&(5_JUpMd-OeivgC{qU+V50--;>qUyC?c8^o3qVk9rD>hoT?E$A zPg78O4iXtiTQf=b(^vzx>>SAUcSWR*A-1|kCKf72mjU)+bBa$HwN=$>9byUmbS}7x zd?C#d0001A$$!6ykgOKaa?M6I36X`qcQYXOA<`(7cYJg7MBYmM^14^ghsrgp0!2ox zY4{pcZ7EnrX+%;iI-RV`1e5$!6`Qf*4|s1C!e~U8)AHe4cFk#iM#`|Prs&_Qp9C+) zY)NmW!Y;K<$E*-Jde}jdm!qkoD+BEj*le3S1+j5luYY^>>r+s~{Ik)oQ<-1cZl0Tb zJ~dnt7if4sD$ z&X8S|L?-6!KCY0y6s=CySiG*}kCGKTGGGKJd{&^X%H^7L zlp>a5g_B1LFGzq|ak8R+@rZjrSAP$f4L!3U<7R1zrE{3|CXNqdi-5bTCPctUv;Y7A07*qoM6N<$g4AS!bpQYW delta 917 zcmV;G18V%q2CD~-IXzr0}?%6;?o#Vt?=(fYnA{oUr>i@=M|b ze|*Y|5dXi(g>_=Ejwf>=gZ#1uiIZzVcx=QSX2B5hDNY~4e=7!jqvwU|u+#=q6h%=K z|DF%+!k7zb&u&rVB1wq$=r?l}X9ZkG^oO+4Dl~S|26n{ToFf8yvQi=jaLquh4=i&r zC+8toiu|4cAAh2!ZgBNWyMV1|AqA7Yv4q{Mmafo-0}WnD6BF}GL~lGbnnQ#Es{t<* zVp*Jzn#QS3-aeptqV+;VR!w$wdU%jr0S90QJi}pdw9FkKbv*l(zb0uyS~=~QVyu zM!PGDq9}^u7HlyNJm{VIGDtkc%poD(0dGS&iI&@#?v3?9^9&(P3N%mmVqV2H{ceM{ zP6s^l2_be45WCzzfMh&66DJ-oOcF-4Ci~ov9>NVNqFHARzBc(91YgBoJnMamT0o3A zk7=TNX@7rE0Qi7jp#@Ep^ThoZ*AXva1#m8Bx1e?4)A=aZ>X7f|>35=ncCx0kP(6r6V|#p_p7SP> z@sKH}f|k?Tnl%ID0AK}8{K*3E%oG~a;#W?n5s!pZ-coRvG{KHr$Vd@fwBn{cW26bF z9tS*yIUOw&U4Hw~JDR2iT_KeEyK{;MBYp+#jMirICSqIyzk+r~YcuhRaZb@nt3OtY zrhlQtva>tjKx0oGai>mbZMaj-W>FMHQ563fBC|M4qGoS9ru;F;Ne7g)$RMVry*pXr zAjY%fkObY};R81*e!*gnIi1CFumvr$8kSfAv*00___Mo1KIqZ1iS{2BYy(}Nkl&!I6BA%bH2-6v&8 z0%44nGKYQN_kE|&?3I;KE9MmCtYrdONgqobUoxE; z>W&hzs%wp%(M%a=@EqVnH(q9IVs*-Sw`*;*4gwLG^H9Es9n2f)4mU>w4|R{Uw4!_w zlh5kTLqBl@+aUYb+H(E9F2}sJMU_1J5OI||NBUG=+>jTWPWT(GcrkDQ02ep~ja&s)yN zma^D2A%|vBYy$qNkl5xVz)Zm*Sx(;7EA8YU$lXVmb5JTKcVlPZgBz zPq>GpTrJ_pVfG!cx@za@YqiM)ILhT*guAsth?bysfv%ZV8ArK{`%q%K#wn?FL?ZR4 z%)A36%2IRuGJidqk5=C@m{hZ>M=(QOWqmlD>D*`YEwFN&zDknOzvGz%l*{mbX7tO0 z2`EmGKQ{W$Lk|9uH>g6+KcC7bcf~9+nT8`ks2#jML3Ezm3&4 zHpIs1j%gnv`c<>fI^Ugj>BA`ZH)0xbMYex>Y;|DttbTId`vkX38000000000py!YOF?N-dWYd7FD=0YF*NCIN?opZV^nPn*ftr^B{^u<;Jf-DE7 zqc64+5JMb;Zaw-Ua?@_Wv~m`*8-1}g0)i~urlW6|#VtPo0DpV?x7D?>4ORUA9djY)L3AOU`QfpfbF-6>MFN_LoFmNIdquy-B(V@LpC#dUMK;%dPZr0mhJa*gV>PuQrH z+r+{1ZMA;flFq()4Yd*AUgSLrNr6uV_#RqS`+7=_=tZHc=?|xCe?*}>w zXq|FD&}V-0ssI200000 b0CYS76s$DUVDrbc00000NkvXXu0mjfPjt`+ delta 386 zcmX@jJePTbN_~o_i(^Q|oVPb4g_;$38WL~4^xgA+;tp^587Gfy;Fxyy<$v3qE=kRc zE=`v{Q@uXC|FOi}kCFF2ss(S-6T5b|+WwLF-3d0m{xT*DBYuUb#CphZd(E9h_ukwDSwLA*;6WqWjF}n{zymNmS(@&zteBgO!0nG%ovc zc-@!j_vO#L_Nu)4Tfna3E74jZ473F+ aIRBaT?0xy}zm`^~K=PihelF{r5}E)fUbm|N diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00000.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa51df290f85860c685b43831f20f559eca45c8 GIT binary patch literal 463 zcmV;=0WkiFP)F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00001.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..36cf8c9ff2466860c385759cdc6412a4fe0b9515 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?M1>EaktG3V{g=t<2A0uC2d zrq12*Uv=m7pBuWA{yGHgHk?_#PbtZn=e>jTu& zYQ#VO;)fcmGG2b3ME8_e-?d58f&H=w8{_nY1+*HPTY1Yvvb3e2m zuXl8>zGzhC@H}HN&~^43+>V>%+uf);F@ILeV$-xAzaJaqZCWz7V9V-l*MPBu1#EcF XpPJKIws-31pCDOJS3j3^P6 z8y$ZMTFVp{lb;GSEv|Fp$rQiYOwWM05ogOj9mF{??Wk~h&e@rp6&suf(HS7Fch}Ri zxonoeF}MMuNm)C0xZ$5q@DzAO)Wk{Yvily;W3S_1$~OhT-67pJq%iV{qcLX_?zQrx zbP4RAec94`Hhbo=-92{4$NOq>j2ctx;shXQI(K?+ie1F@M4P9JsQGD%| zRN_FmF$5<7Tz&J7Hrk-HNPFIw2Y9U7)J74!6tZQuH<4jZs{_XVb4k|m)X1mpb@Sjc zaNV-F5X=6ABKEyM5{9YS85!LJTpgsPco#Ul8IskRXW7ASUR}Lnwnlb-_X4r9zw9k$ z3nO-As!oWk4;_Bk84 zt?m^}-h6HAHf65lTW>#z=zsQm$@2H%!L;i|Pd?my{wBvh$fn2po$Eop|4QXzrITWR z=2mn3f9Wo+;Q7=4{uTz^<<)(gKc&?FTE_aI_~BE}9rre`=G2|N{oz+WU_c;)1EzNv XU7w!SY@Q^Y3KI8p^>bP0l+XkKqjQme literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00004.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..908600200d45a13b6992c9edeaa2393b0861e45e GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2#>^dezp0-4j zcP)SQGrv7zop@z^!{@^dD({O;3pZS0lC^y<_-c8seF_?~)R`1e_fGkV^^&kc_nKe2Ci;Xa$I%_*{c^5!6)e{)29 zm26b^_g($2+GqGHEFoLHbjrtX)ApXY*wuVn^43v}zKkE#FzsNY5Gxh(T zJCBYVE0jbr-{!qkvu!oY_1(2BlJPz7r`{q)_#9?Etbho@b5$RU8^@vO`qSq zo+ZVt-qe2XWwpBHrw@L;*eY}K@+0Y8ops?&hl&kuZhzA9_O#D`fxfc`A1#$x!mG09 z1T%xWQO$YJ>YqQwcZDusuKu*@^hMcgTe~ HDWM4f9D9lr literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00006.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@Xe>EaktG3V{fz@iodj<(Bw z`H%kgKZ*VIfT!8hA*ti;+q(O~A)ne=kMd3f=|TqHKR)Td|6RwkEqC(aRyG0K+=idJEc8z{!vY;Sy?Y&K!ZXCBlwc4W# z*M|A7uh}3Y9r|tZ_qQ>h1^Kr`PwkCad+gTQS9=!cOa73HTXlEG?#HL5KU%2%z@uV! z*2}vtNtT~)MEzRZ=r20uo&S#Z#WA`Mk0*YU-LNa``K#=$Cs`~`J&kGEz16W}+Jdsi zbu&XH-FNo<4oKQ{Omk(ai_+KSXZA3woC+%bV`Mw4KkUBIjF8Q%+zp&#Q)?~eyu6eC zS$9LxoPA!CF7AIklV!^34|Qo@PB(LE_)V}k`*q%#@82Zz6;9{u=but5KdNI|zffgy zDogUml&j|!z5d{8{cB#;)t<{|P51X+H8VSM>}6l3ywb1G&F8J|&nu;WmemiwSKvUdj@u**QKfk3SLZ?7@Or(7D5aEt&c7~-vI9S@ zDPR2M?6XWEbQkv74!ZoZ+ncmZJ#UeeQXX0UTFz}JUP#WfG`{VComW4lRGm)M4b>(; zns_1QU2^ch19n*bOipIB+y_j;{KN~X_Q7-X!Bw>PNVc0D`Z5ZpTI9DQXms%>Q{MZx zS@(m4AK@dEz2=IA8z(008jEWAs5+4r4@uw)-RIwzrZ$}LUXHu)7C6ZoLzUw7^c8euB0JS-*DK}Kr zRoYGr;h2zEqXB#@W}+&Vey2AnCs*kUQlP*t%QRrWb! z*~&+!r8Po>0{{R3_G4HD9h9Y&S?bbyBVWZr<9f;F*_n^M8SXZRRc0#7v?FCQky|9K zvdwe2g_uSxwuL#fA^I%(Qp9MzrmfJ(qVh({My485zOtzD+>KQwZ(f1vRdg{di# zptaaCKf4SC0002MLhS#Nl&D}HZ7wQetEs6x3!ST8mzyK(;;N6d4X0n5W12fvGPYSx zjql)^w<4nYsT)+*!$wTL0S&L1ovF>4uf@}Lxs*8S?L^7md=-qw@UFBGC4Ow4Z9hn& zS16>2DUw&rs#E)Z+K!gUKY)Z-ZSDq4%24O)Y$0Xn)En=|>{)V}hiH5N0002Ef>qxS z$VQvWCehT^jZs~Nc74>?+C|2XO~Z=v96QF`%x7-?6{U4V)%Cissmir5ewaZ3h^q`$6=$u{sq3w? jNHWZJC~*J)0F3+sD_C*m9RV=200000NkvXXu0mjfvY&e%b+u7$dh0r~*U()IJ!bb}KQ3zjX^LU07+y=Xsjww4euo^o{d8 zO|(Bi{WlYCSy?u$7NnjLxFS8ZgaCi718eF(fcW}CYY8&) z`h4)?T92XzM+hN=Y)pR&TGXec#WzkUc@P~CsTrvU)D!EE!UiGVp3sy>@lo<1QBvcJ z(gF1f!E6Uxh;b)@Ty(J$x??9e6ysL(DQQ9SSe37Ip$-UE*v*NkfkPJcDI|~2N4`B< z2b@-@H>d};pskdjvX&@|N|$Fo8FxMI=jQr9fNXG4&&MHAh>rw$Le2LS8&V;jjSxZz zA$u_VOEOBLa!7B|Vv^ouRQO|YHPhX=XAp{#sE|CSjkL+4e3xmLi%V~&st)=);i#eY z*~4$hR@|@?_DNKDo@DHJ4k-|2qEN$Z?lMuTxX3z QTmS$707*qoM6N<$f|xjnrvLx| literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00009.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..659efc67dd7c30ced3b30909e95d7081f8dc59c1 GIT binary patch literal 845 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 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00012.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f1700dc5145fc099930fe17c1e3e95abe9d465 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jmba4!+nDh2#;G|{+o`%F- zmuDCJSFW61n=orBi&BC}+VlVOqGl;5DP0P`ajZ~Au|;BW&9wFAvZ?I$yFC2rcGm7X z>AE%fzE#H0%-4>y%wzK=N-TDH7XLYB?v4ptjP?KQVlI34S0dTaT9nz#eBaa^0d`)K z_FE^k-xI$yBdlEAt@-Vd)~??V?*2*?wRKxkv+Gc{Zc$jtr|TkDtbVpXP5yuXOLfsF z9*)~F%}XL?sQrC;xzqe+ViO|+gZ%o7ERRd;SGb6OJHoQn#&px2*BiHU%#VBWqV;Y- z=SDq~q##ez@bsP67bkz3v~y}+s(DFzob#FT6>*ZkpXOye|9I%8<(K0(68{>;9iP-t zv;C^YwN2Nx_exrdBWdwm`maFt30Q@vtDnm{ Hr-UW|bELez literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00013.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@Xe>EaktG3V{fz@iodj<(Bw z`H%kgKZ*VIfT!8hA*ti;+q(O~A)ne=kMd3f=|TqHKR)Td|6RwkEqC(aRyG0K+=idJEc8z{!vY;Sy?Y&K!ZXCBlwc4W# z*M|A7uh}3Y9r|tZ_qQ>h1^Kr`PwkCad+gTQS9=!cOa73HTXlEG?#HL5KU%2%z@uV! z*2}vtNtT~)MEzRZ=r20uo&S#Z#WA`Mk0*YU-LNa``K#=$Cs`~`J&kGEz16W}+Jdsi zbu&XH-FNo<4oKQ{Omk(ai_+KSXZA3woC+%bV`Mw4KkUBIjF8Q%+zp&#Q)?~eyu6eC zS$9LxoPA!CF7AIklV!^34|Qo@PB(LE_)V}k`*q%#@82Zz6;9{u=but5KdNI|zffgy zDogUml&j|!z5d{8{cB#;)t<{|P51X+H8VSM>}6l3ywb1G&F8J|&nu;WmemiwSKvUdj@u**QKfk3w~ba4!+nDh2#q)@X0PebCZ zm%e-cPu$@xKjY+)4IIgOjX`_P+iiYp~^)T6Ut3N8D*&O)mCn$whZ>mPk!MQ~TlM z+ZXdfrxh=53=Id(-f##w(&`jQ-qY33Wt~$(69B9yx!C{! literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00015.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/no_whitelist/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..471324463647c42b2de74c282e34caf0e801955d GIT binary patch literal 459 zcmV;+0W|)JP)0000000000GrafSd+k=txobDz zH0DAd{73>~^qq6MEtzF00j(LvZuG@g0)i|DrlT*m5)eZigKj4ORUA9djY)L3A zOU`QfpfbF-uEn`L=Qc9>w6GI6A^ zcOCs>NC05Pb#uDnYQYqw?9s1sjq0^e*r=7;#KH4zwSL@^&c1mKwGrT6F^nHG&Ol`S5r1^o^|y$IUFw_Pd~Lz8jw=Xjq3)L<=#r&dQ}r6#DO4*H>AE-UhooQ{HOwN^$l+pw5K}_2zX-r#vr3)CJ8A z*UP6bT%k`*Mbslh^UYOg>ihJ%&LvNu%uz0=$q10qnF5(Q1RYG>G)IqVPoHe|9AKo< znp1+2(kU-Ea^8OWqs3Y{UdvZD^nv&Q000000001<;TM*+Ki`d0xJ&>5002ovPDHLk FV1mAB&o2M~ literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00001.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..36cf8c9ff2466860c385759cdc6412a4fe0b9515 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?M1>EaktG3V{g=t<2A0uC2d zrq12*Uv=m7pBuWA{yGHgHk?_#PbtZn=e>jTu& zYQ#VO;)fcmGG2b3ME8_e-?d58f&H=w8{_nY1+*HPTY1Yvvb3e2m zuXl8>zGzhC@H}HN&~^43+>V>%+uf);F@ILeV$-xAzaJaqZCWz7V9V-l*MPBu1#EcF XpPJKIws-31pCDOJS3j3^P6 z8y$ZMTFVp{lb;GSEv|Fp$rQiYOwWM05ogOj9mF{??Wk~h&e@rp6&suf(HS7Fch}Ri zxonoeF}MMuNm)C0xZ$5q@DzAO)Wk{Yvily;W3S_1$~OhT-67pJq%iV{qcLX_?zQrx zbP4RAec94`Hhbo=-92{4$NOq>j2ctx;shXQI(K?+ie1F@M4P9JsQGD%| zRN_FmF$5<7Tz&J7Hrk-HNPFIw2Y9U7)J74!6tZQuH<4jZs{_XVb4k|m)X1mpb@Sjc zaNV-F5X=6ABKEyM5{9YS85!LJTpgsPco#Ul8IskRXW7ASUR}Lnwnlb-_X4r9zw9k$ z3nO-As!oWk4;_Bk84 zt?m^}-h6HAHf65lTW>#z=zsQm$@2H%!L;i|Pd?my{wBvh$fn2po$Eop|4QXzrITWR z=2mn3f9Wo+;Q7=4{uTz^<<)(gKc&?FTE_aI_~BE}9rre`=G2|N{oz+WU_c;)1EzNv XU7w!SY@Q^Y3KI8p^>bP0l+XkKqjQme literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00004.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..908600200d45a13b6992c9edeaa2393b0861e45e GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{s}ba4!+nDh2#>^dezp0-4j zcP)SQGrv7zop@z^!{@^dD({O;3pZS0lC^y<_-c8seF_?~)R`1e_fGkV^^&kc_nKe2Ci;Xa$I%_*{c^5!6)e{)29 zm26b^_g($2+GqGHEFoLHbjrtX)ApXY*wuVn^43v}zKkE#FzsNY5Gxh(T zJCBYVE0jbr-{!qkvu!oY_1(2BlJPz7r`{q)_#9?Etbho@b5$RU8^@vO`qSq zo+ZVt-qe2XWwpBHrw@L;*eY}K@+0Y8ops?&hl&kuZhzA9_O#D`fxfc`A1#$x!mG09 z1T%xWQO$YJ>YqQwcZDusuKu*@^hMcgTe~ HDWM4f9D9lr literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00006.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@Xe>EaktG3V{fz@iodj<(Bw z`H%kgKZ*VIfT!8hA*ti;+q(O~A)ne=kMd3f=|TqHKR)Td|6RwkEqC(aRyG0K+=idJEc8z{!vY;Sy?Y&K!ZXCBlwc4W# z*M|A7uh}3Y9r|tZ_qQ>h1^Kr`PwkCad+gTQS9=!cOa73HTXlEG?#HL5KU%2%z@uV! z*2}vtNtT~)MEzRZ=r20uo&S#Z#WA`Mk0*YU-LNa``K#=$Cs`~`J&kGEz16W}+Jdsi zbu&XH-FNo<4oKQ{Omk(ai_+KSXZA3woC+%bV`Mw4KkUBIjF8Q%+zp&#Q)?~eyu6eC zS$9LxoPA!CF7AIklV!^34|Qo@PB(LE_)V}k`*q%#@82Zz6;9{u=but5KdNI|zffgy zDogUml&j|!z5d{8{cB#;)t<{|P51X+H8VSM>}6l3ywb1G&F8J|&nu;WmemiwSKvUdj@u**QKfk3SLZ?7@Or(7D5aEt&c7~-vI9S@ zDPR2M?6XWEbQkv74!ZoZ+ncmZJ#UeeQXX0UTFz}JUP#WfG`{VComW4lRGm)M4b>(; zns_1QU2^ch19n*bOipIB+y_j;{KN~X_Q7-X!Bw>PNVc0D`Z5ZpTI9DQXms%>Q{MZx zS@(m4AK@dEz2=IA8z(008jEWAs5+4r4@uw)-RIwzrZ$}LUXHu)7C6ZoLzUw7^c8euB0JS-*DK}Kr zRoYGr;h2zEqXB#@W}+&Vey2AnCs*kUQlP*t%QRrWb! z*~&+!r8Po>0{{R3_G4HD9h9Y&S?bbyBVWZr<9f;F*_n^M8SXZRRc0#7v?FCQky|9K zvdwe2g_uSxwuL#fA^I%(Qp9MzrmfJ(qVh({My485zOtzD+>KQwZ(f1vRdg{di# zptaaCKf4SC0002MLhS#Nl&D}HZ7wQetEs6x3!ST8mzyK(;;N6d4X0n5W12fvGPYSx zjql)^w<4nYsT)+*!$wTL0S&L1ovF>4uf@}Lxs*8S?L^7md=-qw@UFBGC4Ow4Z9hn& zS16>2DUw&rs#E)Z+K!gUKY)Z-ZSDq4%24O)Y$0Xn)En=|>{)V}hiH5N0002Ef>qxS z$VQvWCehT^jZs~Nc74>?+C|2XO~Z=v96QF`%x7-?6{U4V)%Cissmir5ewaZ3h^q`$6=$u{sq3w? jNHWZJC~*J)0F3+sD_C*m9RV=200000NkvXXu0mjfvY&e%b+u7$dh0r~*U()IJ!bb}KQ3zjX^LU07+y=Xsjww4euo^o{d8 zO|(Bi{WlYCSy?u$7NnjLxFS8ZgaCi718eF(fcW}CYY8&) z`h4)?T92XzM+hN=Y)pR&TGXec#WzkUc@P~CsTrvU)D!EE!UiGVp3sy>@lo<1QBvcJ z(gF1f!E6Uxh;b)@Ty(J$x??9e6ysL(DQQ9SSe37Ip$-UE*v*NkfkPJcDI|~2N4`B< z2b@-@H>d};pskdjvX&@|N|$Fo8FxMI=jQr9fNXG4&&MHAh>rw$Le2LS8&V;jjSxZz zA$u_VOEOBLa!7B|Vv^ouRQO|YHPhX=XAp{#sE|CSjkL+4e3xmLi%V~&st)=);i#eY z*~4$hR@|@?_DNKDo@DHJ4k-|2qEN$Z?lMuTxX3z QTmS$707*qoM6N<$f|xjnrvLx| literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00009.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..659efc67dd7c30ced3b30909e95d7081f8dc59c1 GIT binary patch literal 845 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 literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00012.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f1700dc5145fc099930fe17c1e3e95abe9d465 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jmba4!+nDh2#;G|{+o`%F- zmuDCJSFW61n=orBi&BC}+VlVOqGl;5DP0P`ajZ~Au|;BW&9wFAvZ?I$yFC2rcGm7X z>AE%fzE#H0%-4>y%wzK=N-TDH7XLYB?v4ptjP?KQVlI34S0dTaT9nz#eBaa^0d`)K z_FE^k-xI$yBdlEAt@-Vd)~??V?*2*?wRKxkv+Gc{Zc$jtr|TkDtbVpXP5yuXOLfsF z9*)~F%}XL?sQrC;xzqe+ViO|+gZ%o7ERRd;SGb6OJHoQn#&px2*BiHU%#VBWqV;Y- z=SDq~q##ez@bsP67bkz3v~y}+s(DFzob#FT6>*ZkpXOye|9I%8<(K0(68{>;9iP-t zv;C^YwN2Nx_exrdBWdwm`maFt30Q@vtDnm{ Hr-UW|bELez literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00013.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00013.png new file mode 100644 index 0000000000000000000000000000000000000000..59fce75cd1321a13bc8840b9bc6f48f87485d7c2 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@Xe>EaktG3V{fz@iodj<(Bw z`H%kgKZ*VIfT!8hA*ti;+q(O~A)ne=kMd3f=|TqHKR)Td|6RwkEqC(aRyG0K+=idJEc8z{!vY;Sy?Y&K!ZXCBlwc4W# z*M|A7uh}3Y9r|tZ_qQ>h1^Kr`PwkCad+gTQS9=!cOa73HTXlEG?#HL5KU%2%z@uV! z*2}vtNtT~)MEzRZ=r20uo&S#Z#WA`Mk0*YU-LNa``K#=$Cs`~`J&kGEz16W}+Jdsi zbu&XH-FNo<4oKQ{Omk(ai_+KSXZA3woC+%bV`Mw4KkUBIjF8Q%+zp&#Q)?~eyu6eC zS$9LxoPA!CF7AIklV!^34|Qo@PB(LE_)V}k`*q%#@82Zz6;9{u=but5KdNI|zffgy zDogUml&j|!z5d{8{cB#;)t<{|P51X+H8VSM>}6l3ywb1G&F8J|&nu;WmemiwSKvUdj@u**QKfk3w~ba4!+nDh2#q)@X0PebCZ zm%e-cPu$@xKjY+)4IIgOjX`_P+iiYp~^)T6Ut3N8D*&O)mCn$whZ>mPk!MQ~TlM z+ZXdfrxh=53=Id(-f##w(&`jQ-qY33Wt~$(69B9yx!C{! literal 0 HcmV?d00001 diff --git a/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00015.png b/tests/integration/nano/snapshots/nanox/test_sign_sc_rollup_originate/with_whitelist/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7736a36f8656e124d9926a12e22feaf0e9f788 GIT binary patch literal 793 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 Date: Tue, 20 Feb 2024 10:48:58 +0100 Subject: [PATCH 70/78] Michelson: adding missing operations --- app/src/parser/formatting.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/parser/formatting.c b/app/src/parser/formatting.c index d3de8c62d..3c63adf5b 100644 --- a/app/src/parser/formatting.c +++ b/app/src/parser/formatting.c @@ -182,7 +182,9 @@ const char *const tz_michelson_op_names_ordered[TZ_LAST_MICHELSON_OPCODE + 1] "EMIT", // 151 "Lambda_rec", // 152 "LAMBDA_REC", // 153 - "TICKET" // 154 + "TICKET", // 154 + "BYTES", // 155 + "NAT", // 156 }; const char * From 45b38c7999980a0d3680ca4de051660757b4fb4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 16 Feb 2024 12:05:50 +0100 Subject: [PATCH 71/78] Tests: update the version of test generation to Oxford --- app/src/parser/formatting.h | 2 +- docker/Dockerfile.ocaml | 25 ++++++++------- tests/generate/dune | 4 +-- tests/generate/gen_integration.ml | 32 +++++++++++-------- tests/generate/gen_micheline.ml | 4 +-- tests/generate/gen_operations.ml | 24 +++++++------- tests/generate/gen_utils.ml | 2 +- tests/unit/ctest/tests_parser.c | 12 +++---- tests/unit/parser/dune | 4 +-- tests/unit/parser/test_c_parser.ml | 2 +- tests/unit/parser/test_micheline_c_parser.ml | 2 +- tests/unit/parser/test_operations_c_parser.ml | 27 ++++++++++------ 12 files changed, 76 insertions(+), 64 deletions(-) diff --git a/app/src/parser/formatting.h b/app/src/parser/formatting.h index 0436ca1e9..6e4306897 100644 --- a/app/src/parser/formatting.h +++ b/app/src/parser/formatting.h @@ -23,7 +23,7 @@ * * Should be kept in sync with the last protocol update. */ -#define TZ_LAST_MICHELSON_OPCODE 154 +#define TZ_LAST_MICHELSON_OPCODE 157 /** * @brief Get the human readable name of a Michelson op_code if valid diff --git a/docker/Dockerfile.ocaml b/docker/Dockerfile.ocaml index aa875a141..162ecbb57 100644 --- a/docker/Dockerfile.ocaml +++ b/docker/Dockerfile.ocaml @@ -1,21 +1,22 @@ -FROM ocaml/opam:alpine-3.17-ocaml-4.14 +FROM ocaml/opam:alpine-3.18-ocaml-4.14 RUN sudo cp /usr/bin/opam-2.1 /usr/bin/opam; \ - OCTEZ_VERSION=17.1; \ + opam remote add opam https://opam.ocaml.org; \ + RUSTUP_TOOLCHAIN=1.71.1; \ + OCTEZ_VERSION=19.1; \ OCTEZ_REPO=https://gitlab.com/tezos/tezos.git; \ OCTEZ_COMMIT=`git ls-remote $OCTEZ_REPO v$OCTEZ_VERSION | cut -f 1`; \ OCTEZ_URL=$OCTEZ_REPO#$OCTEZ_COMMIT; \ + wget https://sh.rustup.rs/rustup-init.sh; \ + chmod +x rustup-init.sh; \ + ./rustup-init.sh --profile minimal --default-toolchain $RUSTUP_TOOLCHAIN -y; \ + source "$HOME/.cargo/env"; \ opam install \ - tezos-client-017-PtNairob.$OCTEZ_VERSION \ - terminal_size \ - octez-codec.$OCTEZ_VERSION \ - tezos-test-helpers.$OCTEZ_VERSION; \ - opam pin tezos-benchmark.$OCTEZ_VERSION $OCTEZ_URL; \ + octez-protocol-018-Proxford-libs.$OCTEZ_VERSION \ + terminal_size; \ opam pin tezos-micheline-rewriting.$OCTEZ_VERSION $OCTEZ_URL; \ - opam pin tezos-benchmark-type-inference-017-PtNairob.$OCTEZ_VERSION $OCTEZ_URL; \ - opam pin tezos-017-PtNairob-test-helpers.$OCTEZ_VERSION $OCTEZ_URL; \ - opam pin tezos-benchmark-017-PtNairob.$OCTEZ_VERSION $OCTEZ_URL; \ - opam pin tezos-shell-benchmarks.$OCTEZ_VERSION $OCTEZ_URL; \ - opam pin tezos-benchmarks-proto-017-PtNairob.$OCTEZ_VERSION $OCTEZ_URL; \ + opam pin tezos-benchmark-type-inference-018-Proxford.$OCTEZ_VERSION $OCTEZ_URL; \ + opam pin tezos-benchmark-018-Proxford.$OCTEZ_VERSION $OCTEZ_URL; \ + opam pin tezos-benchmarks-proto-018-Proxford.$OCTEZ_VERSION $OCTEZ_URL; \ rm -rf opam-repository .opam/download-cache .opam/repo \ .opam/4.14/.opam-switch/build .opam/4.14/.opam-switch/sources; diff --git a/tests/generate/dune b/tests/generate/dune index edc9b1f7e..e50684696 100644 --- a/tests/generate/dune +++ b/tests/generate/dune @@ -1,4 +1,4 @@ (executable (name generate) - (libraries "tezos-protocol-017-PtNairob" - "tezos-benchmarks-proto-017-PtNairob")) + (libraries "octez-protocol-018-Proxford-libs.client" + "tezos-benchmarks-proto-018-Proxford")) diff --git a/tests/generate/gen_integration.ml b/tests/generate/gen_integration.ml index cf0113820..fb04e776e 100644 --- a/tests/generate/gen_integration.ml +++ b/tests/generate/gen_integration.ml @@ -144,7 +144,7 @@ let sign ppf ~signer:Apdu.Signer.({ sk; pk; _ } as signer) ~watermark bin = in send_async_apdus ppf async_apdus -open Tezos_protocol_017_PtNairob +open Tezos_protocol_018_Proxford open Tezos_micheline let rec pp_node ~wrap ppf (node : Protocol.Script_repr.node) = @@ -317,25 +317,29 @@ let operation_to_screens { rollup; cemented_commitment; output_proof } -> aux ~kind:"SR: execute outbox message" [ - make_screen ~title:"Rollup" "%a" Sc_rollup_repr.Address.pp rollup; + make_screen ~title:"Rollup" "%a" Sc_rollup.Address.pp rollup; make_screen ~title:"Commitment" "%a" Sc_rollup.Commitment.Hash.pp cemented_commitment; need_expert_mode_screen "Output proof"; make_screen ~title:"Output proof" "%a" pp_string_binary output_proof; ] - | Sc_rollup_originate - { kind; boot_sector; origination_proof; parameters_ty } -> + | Sc_rollup_originate { kind; boot_sector; parameters_ty; whitelist } -> + let whitelist = + match whitelist with + | None | Some [] -> [] + | Some whitelist -> + make_screens ~title:"Whitelist" + Tezos_crypto.Signature.Public_key_hash.pp whitelist + in aux ~kind:"SR: originate" - [ - make_screen ~title:"Kind" "%a" Sc_rollup.Kind.pp kind; - need_expert_mode_screen "Kernel"; - make_screen ~title:"Kernel" "%a" pp_string_binary boot_sector; - need_expert_mode_screen "Proof"; - make_screen ~title:"Proof" "%a" pp_serialized_proof - origination_proof; - need_expert_mode_screen "Parameters"; - make_screen ~title:"Parameters" "%a" pp_lazy_expr parameters_ty; - ] + ([ + make_screen ~title:"Kind" "%a" Sc_rollup.Kind.pp kind; + need_expert_mode_screen "Kernel"; + make_screen ~title:"Kernel" "%a" pp_string_binary boot_sector; + need_expert_mode_screen "Parameters"; + make_screen ~title:"Parameters" "%a" pp_lazy_expr parameters_ty; + ] + @ whitelist) | _ -> assert false in let screen_of_operation (type t) (operation : t contents) = diff --git a/tests/generate/gen_micheline.ml b/tests/generate/gen_micheline.ml index e7e246ba2..78ce92206 100644 --- a/tests/generate/gen_micheline.ml +++ b/tests/generate/gen_micheline.ml @@ -13,9 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. *) -open Tezos_protocol_017_PtNairob +open Tezos_protocol_018_Proxford open Tezos_micheline -open Tezos_benchmarks_proto_017_PtNairob +open Tezos_benchmarks_proto_018_Proxford let config = { diff --git a/tests/generate/gen_operations.ml b/tests/generate/gen_operations.ml index 3da80c54f..ac6c52e9c 100644 --- a/tests/generate/gen_operations.ml +++ b/tests/generate/gen_operations.ml @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. *) -open Tezos_protocol_017_PtNairob +open Tezos_protocol_018_Proxford let gen_lazy_expr = let open QCheck2.Gen in @@ -144,7 +144,7 @@ let some_sc_rollup_hash = let gen_sc_rollup_hash = let open QCheck2.Gen in let+ sc_h = oneofl some_sc_rollup_hash in - Protocol.Alpha_context.Sc_rollup_repr.Address.of_b58check_exn sc_h + Protocol.Alpha_context.Sc_rollup.Address.of_b58check_exn sc_h let some_sc_rollup_commiment_hash = [ @@ -175,6 +175,7 @@ let some_protocol_hash = "PtLimaPtLMwfNinJi9rCfDPWea8dFgTZ1MeJ9f1m2SRic6ayiwW"; "PtMumbai2TmsJHNGRkD8v8YDbtao7BLUC3wjASn1inAKLFCjaH1"; "PtNairobiyssHuh87hEhfVBGCVrK3WnS8Z2FT4ymB5tAa4r1nQf"; + "ProxfordYmVfjWnRcgjWH36fW6PArwqykTFzotUxRs6gmTcZDuH"; "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK"; "ProtoALphaALphaALphaALphaALphaALphaALpha61322gcLUGH"; "ProtoALphaALphaALphaALphaALphaALphaALphabc2a7ebx6WB"; @@ -279,6 +280,10 @@ let gen_entrypoint = set_delegate; remove_delegate; deposit; + stake; + unstake; + finalize_unstake; + set_delegate_parameters; of_string_strict_exn "jean_bob"; ] @@ -367,18 +372,13 @@ let gen_sc_rollup_execute_outbox_message = let gen_sc_rollup_originate = let open Protocol.Alpha_context in let open QCheck2.Gen in - let* kind = oneofl Sc_rollup.Kind.[ Example_arith; Wasm_2_0_0 ] in + let* kind = oneofl Sc_rollup.Kind.[ Example_arith; Wasm_2_0_0; Riscv ] in let* boot_sector = string_size small_nat in - let* origination_proof = string_size small_nat in - let origination_proof = - Data_encoding.( - origination_proof - |> Binary.to_bytes_exn (string' Hex) - |> Binary.of_bytes_exn Sc_rollup.Proof.serialized_encoding) - in let* parameters_ty = gen_lazy_expr in - return - (Sc_rollup_originate { kind; boot_sector; origination_proof; parameters_ty }) + let* whitelist = + QCheck2.Gen.option @@ list_size small_nat gen_public_key_hash + in + return (Sc_rollup_originate { kind; boot_sector; parameters_ty; whitelist }) let gen_proposals = let open Protocol.Alpha_context in diff --git a/tests/generate/gen_utils.ml b/tests/generate/gen_utils.ml index 64649fbf5..fdbe402e8 100644 --- a/tests/generate/gen_utils.ml +++ b/tests/generate/gen_utils.ml @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. *) -open Tezos_protocol_017_PtNairob +open Tezos_protocol_018_Proxford open Tezos_micheline let random_state = diff --git a/tests/unit/ctest/tests_parser.c b/tests/unit/ctest/tests_parser.c index 4721255c2..3b80a084f 100644 --- a/tests/unit/ctest/tests_parser.c +++ b/tests/unit/ctest/tests_parser.c @@ -457,18 +457,18 @@ CTEST2(operation_parser, check_sc_rollup_originate_complexity) "396333333439653539633133623930383166316331316234343061633464333435" "356465646265346565306465313561386166363230643463383632343764396431" "333264653162623664613233643566663964386466666461323262613961383400" - "00006c030002104135165622d08b0c6eac951c9d4fd65109585907bc30ef0617f6" - "c26853c6ba724af04dd3e4b5861efae3166ebc12ef5781df9715c20943e8d0b7bc" - "06068a6f8106737461747573c87a31b1c8e3af61756b336bcfc3b0c292c89b40cc" - "8a5080ba99c45463d110ce8b0000000a07070100000001310002"; + "00000a07070100000001310002ff0000003f00ffdd6102321bc251e4a5190ad5b1" + "2b251069d9b401f6552df4f5ff51c3d13347cab045cfdb8b9bd8030278eb8b6ab9" + "a768579cd5146b480789650c83f28e"; const tz_fields_check fields_check[] = { {"Source", false, 1}, {"Fee", false, 2}, {"Storage limit", false, 3}, {"Kind", false, 4}, {"Kernel", true, 5}, - {"Proof", true, 6}, - {"Parameters", true, 7}, + {"Parameters", true, 6}, + // {"Option", _, 7}, + {"Whitelist", false, 8}, }; check_field_complexity(data, str, fields_check, sizeof(fields_check)); } diff --git a/tests/unit/parser/dune b/tests/unit/parser/dune index 2db7ec927..d1237bf3f 100644 --- a/tests/unit/parser/dune +++ b/tests/unit/parser/dune @@ -1,8 +1,8 @@ (executable (name test_c_parser) (modules test_c_parser_utils test_micheline_c_parser test_operations_c_parser test_c_parser) - (libraries "tezos-protocol-017-PtNairob" - "tezos-benchmarks-proto-017-PtNairob" + (libraries "octez-protocol-018-Proxford-libs.client" + "tezos-benchmarks-proto-018-Proxford" "terminal_size") (foreign_stubs (language c) diff --git a/tests/unit/parser/test_c_parser.ml b/tests/unit/parser/test_c_parser.ml index 29fde2eaf..cbfbc2cb2 100644 --- a/tests/unit/parser/test_c_parser.ml +++ b/tests/unit/parser/test_c_parser.ml @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. *) -open Tezos_protocol_017_PtNairob +open Tezos_protocol_018_Proxford open Test_c_parser_utils let read_hex_file ~encoding path = diff --git a/tests/unit/parser/test_micheline_c_parser.ml b/tests/unit/parser/test_micheline_c_parser.ml index 5f6568181..ccacef4df 100644 --- a/tests/unit/parser/test_micheline_c_parser.ml +++ b/tests/unit/parser/test_micheline_c_parser.ml @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. *) -open Tezos_protocol_017_PtNairob +open Tezos_protocol_018_Proxford open Tezos_micheline open Test_c_parser_utils diff --git a/tests/unit/parser/test_operations_c_parser.ml b/tests/unit/parser/test_operations_c_parser.ml index e00c03f51..d0f1ed0fe 100644 --- a/tests/unit/parser/test_operations_c_parser.ml +++ b/tests/unit/parser/test_operations_c_parser.ml @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. *) -open Tezos_protocol_017_PtNairob +open Tezos_protocol_018_Proxford open Test_c_parser_utils let pp_opt_field pp ppf = function @@ -124,20 +124,27 @@ let to_string { rollup; cemented_commitment; output_proof } -> aux ~kind:"SR: execute outbox message" [ - Format.asprintf "%a" Sc_rollup_repr.Address.pp rollup; + Format.asprintf "%a" Sc_rollup.Address.pp rollup; Format.asprintf "%a" Sc_rollup.Commitment.Hash.pp cemented_commitment; Format.asprintf "%a" pp_string_binary output_proof; ] - | Sc_rollup_originate - { kind; boot_sector; origination_proof; parameters_ty } -> + | Sc_rollup_originate { kind; boot_sector; parameters_ty; whitelist } -> + let whitelist = + match whitelist with + | None -> [] + | Some whitelist -> + List.map + (Format.asprintf "%a" Tezos_crypto.Signature.Public_key_hash.pp) + whitelist + in aux ~kind:"SR: originate" - [ - Format.asprintf "%a" Sc_rollup.Kind.pp kind; - Format.asprintf "%a" pp_string_binary boot_sector; - Format.asprintf "%a" pp_serialized_proof origination_proof; - Format.asprintf "%a" pp_lazy_expr parameters_ty; - ] + ([ + Format.asprintf "%a" Sc_rollup.Kind.pp kind; + Format.asprintf "%a" pp_string_binary boot_sector; + Format.asprintf "%a" pp_lazy_expr parameters_ty; + ] + @ whitelist) | _ -> assert false in let operation_to_string (type t) (operation : t contents) = From 7a633aaee23bbe7fb4ac409abb3450b56336f427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Palmer?= Date: Fri, 16 Feb 2024 12:06:43 +0100 Subject: [PATCH 72/78] Test: fix unit-test parser for transaction --- tests/unit/parser/test_operations_c_parser.ml | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/tests/unit/parser/test_operations_c_parser.ml b/tests/unit/parser/test_operations_c_parser.ml index d0f1ed0fe..f0f0d8bff 100644 --- a/tests/unit/parser/test_operations_c_parser.ml +++ b/tests/unit/parser/test_operations_c_parser.ml @@ -91,13 +91,23 @@ let to_string aux ~kind:"Set deposit limit" [ Format.asprintf "%a" (pp_opt_field pp_tz) tez_opt ] | Transaction { amount; entrypoint; destination; parameters } -> + let parameters = + if + Protocol.Script_repr.is_unit_parameter parameters + && Entrypoint.is_default entrypoint + then [] + else + [ + Format.asprintf "%a" Entrypoint.pp entrypoint; + Format.asprintf "%a" pp_lazy_expr parameters; + ] + in aux ~kind:"Transaction" - [ - Format.asprintf "%a" pp_tz amount; - Format.asprintf "%a" Contract.pp destination; - Format.asprintf "%a" Entrypoint.pp entrypoint; - Format.asprintf "%a" pp_lazy_expr parameters; - ] + ([ + Format.asprintf "%a" pp_tz amount; + Format.asprintf "%a" Contract.pp destination; + ] + @ parameters) | Transfer_ticket { contents; ty; ticketer; amount; destination; entrypoint } -> aux ~kind:"Transfer ticket" From 1df63f2e7bcd18a9a39b3e0d0bef64f2bf364393 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Wed, 14 Feb 2024 16:44:25 +0000 Subject: [PATCH 73/78] Add documentation for ui_stream and ui_string files. --- app/src/globals.h | 11 +-- app/src/handle_swap.h | 5 ++ app/src/keys.h | 30 +++++++- app/src/ui_commons.h | 5 +- app/src/ui_home.c | 4 ++ app/src/ui_home.h | 5 ++ app/src/ui_settings.h | 7 ++ app/src/ui_stream.h | 162 +++++++++++++++++++++++++++++++++--------- app/src/ui_strings.c | 9 --- app/src/ui_strings.h | 109 +++++++++++++++++++--------- 10 files changed, 265 insertions(+), 82 deletions(-) diff --git a/app/src/globals.h b/app/src/globals.h index dc38e1e61..2ca386f82 100644 --- a/app/src/globals.h +++ b/app/src/globals.h @@ -44,15 +44,16 @@ #include "utils.h" #include "parser/parser_state.h" - -// Zeros out all application-specific globals and SDK-specific -// UI/exchange buffers. +/** + * @brief Zeros out all application-specific globals and SDK-specific + * UI/exchange buffers. + */ void init_globals(void); -// Toggles the persisted expert_mode setting +/// Toggles the persisted expert_mode setting void toggle_expert_mode(void); -// Toggles the persisted blindsigning setting +/// Toggles the persisted blindsigning setting void toggle_blindsigning(void); #define MAX_APDU_SIZE 235 diff --git a/app/src/handle_swap.h b/app/src/handle_swap.h index f20a3a041..c49c2c945 100644 --- a/app/src/handle_swap.h +++ b/app/src/handle_swap.h @@ -22,4 +22,9 @@ #pragma once +/** + * @brief Called to check the validity of swap params previously communicated + * by swap_copy_transaction_parameters which is called from Ledger SDK. + * + */ void swap_check_validity(void); diff --git a/app/src/keys.h b/app/src/keys.h index e5e587d66..f4e73e193 100644 --- a/app/src/keys.h +++ b/app/src/keys.h @@ -32,8 +32,11 @@ #define MAX_BIP32_LEN 10 #define SIGN_HASH_SIZE 32 -/* The values in the following enum are from the on-the-wire protocol */ - +/** + * @brief The derivation type values in the following enum are from the + * on-the-wire protocol + * + */ typedef enum { DERIVATION_TYPE_ED25519 = 0, DERIVATION_TYPE_SECP256K1 = 1, @@ -53,15 +56,38 @@ typedef struct { } bip32_path_with_curve_t; tz_exc read_bip32_path(bip32_path_t *out, const uint8_t *in, size_t in_size); + +/** + * @brief Derive public key for given derivation type address. + * + * @param public_key Public key derived is stored in this struct. + * @param derivation_type Derivation type to be used + * @param bip32_path path to derive public key from + * @return tz_exc return success/failure using error code + */ tz_exc derive_pk(cx_ecfp_public_key_t *public_key, derivation_type_t derivation_type, const bip32_path_t *bip32_path); +/** + * @brief Derive hash of public key for given derivation type address. + * + * @param hash The hash of public key, output is stored in this buffer. + * @param derivation_type Derivation type to be used. + * @param bip32_path Path to derive public key from. + * @return tz_exc return Error code + */ tz_exc derive_pkh(cx_ecfp_public_key_t *pubkey, derivation_type_t derivation_type, char *buffer, size_t len); void sign(derivation_type_t derivation_type, const bip32_path_t *path, const uint8_t *hash, size_t hashlen, uint8_t *sig, size_t *siglen); +/** + * @brief Check if derivation type is valid enum + * + * @param code Derivation type to check. + * @return validity result + */ static inline bool check_derivation_type(derivation_type_t code) { diff --git a/app/src/ui_commons.h b/app/src/ui_commons.h index 9279e6ac7..72d446c1e 100644 --- a/app/src/ui_commons.h +++ b/app/src/ui_commons.h @@ -25,7 +25,10 @@ #include #include #include - +/** + * @brief Macro to display navigation icons and set associated callback. + * + */ #define DISPLAY(elts, cb, len) \ memcpy(global.ux.bagls, elts, len * sizeof(bagl_element_t)); \ G_ux.stack[0].element_arrays[0].element_array = global.ux.bagls; \ diff --git a/app/src/ui_home.c b/app/src/ui_home.c index 0b3d60240..490af5b98 100644 --- a/app/src/ui_home.c +++ b/app/src/ui_home.c @@ -28,6 +28,10 @@ static void cb(tz_ui_cb_type_t cb_type); +/** + * @brief Callback for home screen stream. + * + * @param cb_type one of the 4 home screens (HOME, VERSION, SETTINGS, QUIT) */ static void cb(tz_ui_cb_type_t cb_type) { diff --git a/app/src/ui_home.h b/app/src/ui_home.h index 33d60b4a6..e81865094 100644 --- a/app/src/ui_home.h +++ b/app/src/ui_home.h @@ -20,4 +20,9 @@ #pragma once +/** + * @brief Initialize home screen with the screen format of ledger. + * Internally call multiple initialization functions for Settings screen and + * other relevant display buffers. + */ void ui_home_init(void); diff --git a/app/src/ui_settings.h b/app/src/ui_settings.h index 11cab28dd..ba971aae5 100644 --- a/app/src/ui_settings.h +++ b/app/src/ui_settings.h @@ -7,4 +7,11 @@ #define SETTINGS_HOME_PAGE 0 #define SETTINGS_BLINDSIGNING_PAGE 1 +/** + * @brief Initialize settings screen for nano devices. Displays status of + * Expert-mode and Blind Signing. + * + * @param page Current page to display among all the pages available under + * Settings. + */ void ui_settings_init(int16_t page); diff --git a/app/src/ui_stream.h b/app/src/ui_stream.h index 564a47f44..24acd3a2c 100644 --- a/app/src/ui_stream.h +++ b/app/src/ui_stream.h @@ -46,9 +46,11 @@ #include "ui_strings.h" #ifdef TARGET_NANOS -#define TZ_UI_STREAM_HISTORY_SCREENS 5 +#define TZ_UI_STREAM_HISTORY_SCREENS \ + 5 /// Max number of screens in history for nanos #else -#define TZ_UI_STREAM_HISTORY_SCREENS 8 +#define TZ_UI_STREAM_HISTORY_SCREENS \ + 8 /// Max number of screens in history for nanos2/nanox. #endif // TARGET_NANOS #define TZ_UI_STREAM_TITLE_WIDTH TZ_SCREEN_WITDH_BETWEEN_ICONS_BOLD_11PX @@ -64,10 +66,10 @@ #define TZ_UI_STREAM_CONTENTS_SIZE \ (TZ_UI_STREAM_CONTENTS_WIDTH * TZ_UI_STREAM_CONTENTS_LINES) -/* - * In the following structure, "cb_type" is passed to our callback and - * it can be used to determine which screen was displayed when both - * buttons were pressed. +/** + * @brief Following #define's specify different "cb_types" which are passed to + * our callback and it can be used to determine which screen was displayed + * when both buttons were pressed. * * If TZ_UI_STREAM_SCREEN_NOCB is specified, no callback will be called * when both buttons are pressed. @@ -90,8 +92,9 @@ typedef uint8_t tz_ui_cb_type_t; #define TZ_UI_STREAM_CB_ACCEPT 0xFFu #define TZ_UI_LAYOUT_HOME_MASK 0x80u + /** - * Layout type: + * @brief Layout type enum * BNP - refers to Bold Title, normal text/picture below the title. * BP - refers to Bold tile and picture below the title(optional). * NP - Normal text and picture below the text(optional) @@ -111,10 +114,9 @@ typedef enum : uint8_t { TZ_UI_LAYOUT_HOME_NP = (0x07 | TZ_UI_LAYOUT_HOME_MASK) } tz_ui_layout_type_t; -/* - * The icons we used are generalised to allow for seamless Stax support +/** + * @brief The icons we used are generalised to allow for seamless Stax support */ - typedef uint8_t tz_ui_icon_t; #define TZ_UI_ICON_NONE 0x00 #define TZ_UI_ICON_TICK 0x01 @@ -124,61 +126,155 @@ typedef uint8_t tz_ui_icon_t; #define TZ_UI_ICON_BACK 0x05 #define TZ_UI_ICON_EYE 0x06 +/** + * @brief Represents a single screen's content and formatting for a ledger + * device. + * + */ typedef struct { - tz_ui_cb_type_t cb_type; + tz_ui_cb_type_t + cb_type; /// call back type for actions taken on this screen. #ifdef HAVE_BAGL - tz_ui_icon_t icon; - tz_ui_layout_type_t layout_type; - char *title; - char *body[TZ_UI_STREAM_CONTENTS_LINES]; + tz_ui_icon_t icon; /// Icon to display on the screen. + tz_ui_layout_type_t + layout_type; /// Layout type for the screen. CAN BP, BNP, NP, PB or + /// HOME_X where X can be one of the BP, BNP, PB. + char *title; /// Title to display on the screen. + char *body[TZ_UI_STREAM_CONTENTS_LINES]; /// Body to display on the + /// screen (Below title). #else - nbgl_layoutTagValue_t pairs[NB_MAX_DISPLAYED_PAIRS_IN_REVIEW]; - uint8_t nb_pairs; + nbgl_layoutTagValue_t + pairs[NB_MAX_DISPLAYED_PAIRS_IN_REVIEW]; /// Title-value pairs to be + /// displayed on stax + /// screen, Max 4 pairs can + /// be displayed on one + /// screen in stax. + uint8_t nb_pairs; /// Number of pairs to be displayed on the stax screen. #endif } tz_ui_stream_screen_t; #ifdef HAVE_NBGL +/** + * @brief Holds list of title-value pairs for the current screen on stax. + * + */ typedef struct { nbgl_layoutTagValueList_t list; } tz_ui_stream_display_t; #endif // HAVE_NBGL +/** + * @brief Holds data for current and all the history screens. + * + */ typedef struct { void (*cb)(tz_ui_cb_type_t cb_type); - tz_ui_stream_screen_t screens[TZ_UI_STREAM_HISTORY_SCREENS]; - tz_ui_strings_t strings; - int16_t current; - int16_t total; - int16_t last; - bool full; - bool pressed_right; + tz_ui_stream_screen_t + screens[TZ_UI_STREAM_HISTORY_SCREENS]; // array containing info of + // all screens. + tz_ui_strings_t strings; // Ring buffer containing text data to be + // displayed on screen. + int16_t current; // index of current screen. + int16_t total; // total number of screens. + int16_t last; // index of last screen. + bool full; // true if history is full. + bool pressed_right; // true if right button was pressed. #ifdef HAVE_NBGL - tz_ui_stream_display_t current_screen; - char verify_address[TZ_BASE58CHECK_BUFFER_SIZE(20, 3)]; - nbgl_callback_t stream_cb; -#endif // HAVE_NBGL + tz_ui_stream_display_t + current_screen; // current screen's title-value pairs. + char verify_address[TZ_BASE58CHECK_BUFFER_SIZE( + 20, 3)]; // Holds the public key.. + nbgl_callback_t + stream_cb; // callback to be called when new screen is needed. +#endif // HAVE_NBGL } tz_ui_stream_t; void tz_ui_stream_init(void (*cb)(tz_ui_cb_type_t cb_type)); -/* Push title & content to screen - * + +/** + * @brief Push title & content to a single screen * content may not always fit on screen entirely - returns total * bytes of content written. + * + * @param cb_type callback type for the screen being pushed. + * @param title title to be displayed + * @param value text to be displayed. + * @param layout_type Layout type, can be one of BP, BNP, NP, HOME_PB, ... and + * so on. + * @param icon icon to be displayed on the screen. + * @return size_t size of content written on the screen.(for ex. when value + * is too large to fit on one screen, only part of it is written and rest is + * displayed on next screen.) */ size_t tz_ui_stream_push(tz_ui_cb_type_t cb_type, const char *title, const char *value, tz_ui_layout_type_t layout_type, tz_ui_icon_t icon); + +/** + * @brief internal implementation of tz_ui_stream_push, implemented + * differently for stax and nano* devices. + * + * @param cb_type callback type for the screen being pushed. + * @param title title to be displayed + * @param value text to be displayed. + * @param max max chars of value to be displayed. (default: -1) + * @param layout_type Layout type, can be one of BP, BNP, NP, HOME_PB, ... and + * so on. + * @param icon icon to be displayed on the screen. + * @return size_t size of content written on the screen.(for ex. when value + * is too large to fit on one screen, only part of it is written and rest is + * displayed on next screen.) + */ size_t tz_ui_stream_pushl(tz_ui_cb_type_t cb_type, const char *title, const char *value, ssize_t max, tz_ui_layout_type_t layout_type, tz_ui_icon_t icon); + +/** + * @brief Push title- value pair, internally calls tz_ui_stream_push multiple + * times so that entire value is pushed, even if it takes multiple screens. + * + * @param cb_type callback type + * @param title Title to be displayed on the screen + * @param value text to be displayed on the screen + * @param layout_type Layout type + * @param icon Icon to be displayed on the screen + * @return size_t returns total number of characters written on the screen. + */ size_t tz_ui_stream_push_all(tz_ui_cb_type_t cb_type, const char *title, const char *value, tz_ui_layout_type_t layout_type, tz_ui_icon_t icon); -void tz_ui_stream_close(void); -void tz_ui_stream(void); -void tz_ui_stream_start(void); + +/** + * @brief Indicates the stream is closed. Can not close it again. + * + */ +void tz_ui_stream_close(void); + +/** + * @brief Redisplay the screen, called when additional data is pushed to the + * screen or when user presses buttons. + * + */ +void tz_ui_stream(void); + +/** + * @brief Start display of contents stored in ring buffer. + * + */ +void tz_ui_stream_start(void); + +/** + * @brief Get the callback type for current screen. + * + * @return tz_ui_cb_type_t + */ tz_ui_cb_type_t tz_ui_stream_get_cb_type(void); + #ifdef HAVE_NBGL +/** + * @brief Reject confirmation screen. + * + */ void tz_reject_ui(void); #endif diff --git a/app/src/ui_strings.c b/app/src/ui_strings.c index 11bd52f68..fcf14986d 100644 --- a/app/src/ui_strings.c +++ b/app/src/ui_strings.c @@ -134,10 +134,6 @@ ui_strings_can_fit(size_t len, bool *can_fit) TZ_POSTAMBLE; } -/* @param in: ptr to char[] to copy into the buffer - @param in_len: number of of chars to copy. in_len <= strlen(in) - @param out: will be set to the start of the char[] in the buffer -*/ void ui_strings_push(const char *in, size_t len, char **out) { @@ -265,11 +261,6 @@ ui_strings_drop_last(char **in) PRINT_STRINGS; } -/* Append as much as possible from str to the last string in the buffer. - * This WILL NOT move `last` in the buffer. - * - * @param out: the start of the copied chars in the buffer. - */ size_t ui_strings_append_last(const char *str, size_t max, char **out) { diff --git a/app/src/ui_strings.h b/app/src/ui_strings.h index 6f309a44b..c29205ff5 100644 --- a/app/src/ui_strings.h +++ b/app/src/ui_strings.h @@ -1,4 +1,4 @@ -/* Tezos Ledger application - Dynamic UI to display a stream of pages +/** Tezos Ledger application - Dynamic UI to display a stream of pages Copyright 2023 TriliTech @@ -16,44 +16,89 @@ #pragma once -/* This implements a multi-page screen, allowing to display a - potentially infinite number of screens, keeping a bounded history. - The user can query new screens using the right button, and go back - a few screens using the left button (until history limit is - reached). - - When a new page is needed, the display will call the `refill` - callback, which in turn can call `tz_ui_stream_push` to add a new - page. When the last page is reached, `tz_ui_stream_close` should be - called, and the two final special pages to `accept` and `reject` - the operation are pushed. The user can trigger the `accept` and - `reject` callbacks by pressing both buttons while there pages are - displayed. - - It is also possible to use this display engine for non streamed - data by pushing a precomputed series of pages with - `tz_ui_stream_push`, calling `tz_ui_stream_close`, and launching - with a `refill` callback set to NULL. */ +/** + * @brief This file implements ring buffer to store the strings to be + * displayed on the ledger screen. The ring buffer is fixed in size and + * implemented as fixed size C char array. The ring properties are implemented + * logically using push, drop etc. When a new element is added after checking + * that enough space in buffer is present, otherwise the oldest element in the + * buffer is removed. (We can also remove the newest element if desired.) + * + */ #ifdef TARGET_NANOS -#define BUFF_LEN 128 +#define BUFF_LEN 128 /// Ring buffer length of nanos #elif defined(HAVE_BAGL) -#define BUFF_LEN 256 +#define BUFF_LEN 256 /// Ring buffer length for nanos2/nanox #else -#define BUFF_LEN 512 +#define BUFF_LEN 512 /// Ring buffer length for stax #endif +/** + * @brief This struct represents the ring buffer to store title-value pairs to + * be displayed on the ledger device screens. + * + * + */ typedef struct { - char buffer[BUFF_LEN]; - char *start; - char *end; - char *internal_end; - size_t count; + char buffer[BUFF_LEN]; /// Stores title-value pairs + char *start; /// Logical start of the buffer. This is the oldest element + /// in the buffer and first character of that string. + char + *end; /// Logical end of the buffer. This is at the end of the newest + /// element in the buffer, after the null terminator character. + char *internal_end; /// Actual end of the buffer after which no data is + /// present. 0 <= internal_end < BUFF_LEN + size_t count; /// Number of strings stored in the buffer } tz_ui_strings_t; -void ui_strings_init(void); -void ui_strings_push(const char *str, size_t len, char **out); -void ui_strings_drop(char **str); -void ui_strings_drop_last(char **str); -void ui_strings_can_fit(size_t len, bool *can_fit); +/** + * @brief Resets ring buffer and set start and end to BUFF_START + */ +void ui_strings_init(void); + +/** + * @brief Push a new string to the ring buffer. + * Throws error if len can not be accomodated in the empty space of + * ring buffer. Therefore, it is important to call ui_strings_can_fit before + * pushing the string on the buffer. + * + * @param str: ptr to string to copy into the buffer + * @param len: number of of chars to copy. len <= strlen(str) + * @param out: will be set to the start of the string in the buffer + */ +void ui_strings_push(const char *str, size_t len, char **out); +/** + * @brief Drop the logical first string from the buffer, which is pointed by + * 'start'. + * + * @param str pointer to 'start' pointer of the buffer. + */ +void ui_strings_drop(char **str); +/** + * @brief Drop the logical last string in the ring buffer, which ends with + * 'end' pointer. + * + * @param str Pointer to start pointer of last string in the buffer. + */ +void ui_strings_drop_last(char **str); +/** + * @brief Checks if the ring buffer can fit the string of length len, without + * deleting any existing strings. + * + * @param len Length of string. + * @param can_fit result of the check, true if string can fit, false + * otherwise. + */ +void ui_strings_can_fit(size_t len, bool *can_fit); +/** + * @brief Append characters from input string to the last string in the + * buffer. Exclude the null termination character. + * + * @param str Input string + * @param max maximum number of characters to append. + * @param out pointer to the end of the resultant string in buffer (Null + * terminator) = s->end - 1 + * @return size_t Number of chars appended. + */ size_t ui_strings_append_last(const char *str, size_t max, char **out); From ee46bfcbfdf809606ee24ba55c576bc55d4b4a64 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Tue, 20 Feb 2024 15:05:12 +0000 Subject: [PATCH 74/78] Document data structures used --- app/src/apdu.h | 20 ++++++++++++++--- app/src/apdu_sign.h | 39 +++++++++++++++++++++++++--------- app/src/globals.h | 52 +++++++++++++++++++++++++++++---------------- 3 files changed, 80 insertions(+), 31 deletions(-) diff --git a/app/src/apdu.h b/app/src/apdu.h index 467567f78..32d61c109 100644 --- a/app/src/apdu.h +++ b/app/src/apdu.h @@ -83,8 +83,22 @@ typedef void(tz_handler)(command_t *cmd); typedef tz_handler *tz_handler_t; -tz_handler handle_unimplemented; -tz_handler handle_apdu_version; -tz_handler handle_apdu_git; +tz_handler handle_unimplemented; /// handler for unknown commands +tz_handler handle_apdu_version; /// handle version enquiry apdu +tz_handler handle_apdu_git; /// handle git commit enquiry apdu +/** + * @brief Function to handle apdu request for public key. The public key is + * derived only once and stored in the RAM, in order to avoid repeated + * derivation calculations. This function can be called with or without + * prompt. + * + */ tz_handler handle_apdu_get_public_key; +/** + * @brief Parse the received command and prompt user for appropriate action. + * Triggers blindsigning and/or expert mode workflows based on transaction + * involved. Stream based parser helps decode arbitararily large transaction, + * screen by screen. + * + */ tz_handler handle_apdu_sign; diff --git a/app/src/apdu_sign.h b/app/src/apdu_sign.h index 0880a6bed..1b6dbd84c 100644 --- a/app/src/apdu_sign.h +++ b/app/src/apdu_sign.h @@ -29,38 +29,57 @@ #include "keys.h" #include "parser/parser_state.h" +/** + * @brief Save hash of the transaction to be signed. + * + */ typedef struct { - cx_blake2b_t state; - uint8_t final_hash[SIGN_HASH_SIZE]; + cx_blake2b_t state; /// Ledger-sdk blake2b state containing hash header + /// and blake2b state info. + uint8_t final_hash[SIGN_HASH_SIZE]; /// Final hash of the transaction. } apdu_hash_state_t; +/** + * @brief Represents state of sign transaction. + * + */ typedef enum { - SIGN_ST_IDLE, - SIGN_ST_WAIT_DATA, - SIGN_ST_WAIT_USER_INPUT + SIGN_ST_IDLE, /// IDLE + SIGN_ST_WAIT_DATA, /// Waiting for more data from apdu interface + SIGN_ST_WAIT_USER_INPUT /// Waiting for user action } sign_step_t; +/** + * @brief Steps in a blind signing of a transaction. + * + */ typedef enum { BLINDSIGN_ST_OPERATION, BLINDSIGN_ST_HASH, BLINDSIGN_ST_ACCEPT_REJECT, } blindsign_step_t; +/** + * @brief Struct to track state/info about current sign operation. + * + */ typedef struct { - uint8_t packet_index; + uint8_t packet_index; /// Index of the packet currently being processed. - sign_step_t step; - bool return_hash; - bool received_last_msg; - uint8_t tag; + sign_step_t step; /// Current step of the sign operation. + bool return_hash; /// Whether to return the hash of the transaction. + bool received_last_msg; /// Whether the last message has been received. + uint8_t tag; /// Type of tezos operation to sign. union { + /// @brief clear signing state info. struct { size_t total_length; tz_parser_state parser_state; uint8_t last_field_index; bool received_msg; } clear; + /// @brief blindsigning state info. struct { blindsign_step_t step; } blind; diff --git a/app/src/globals.h b/app/src/globals.h index 2ca386f82..7d4b0846f 100644 --- a/app/src/globals.h +++ b/app/src/globals.h @@ -58,7 +58,10 @@ void toggle_blindsigning(void); #define MAX_APDU_SIZE 235 #define MAX_SIGNATURE_SIZE 100 - +/** + * @brief Home screen pages in order + * + */ typedef enum { #ifdef HAVE_BAGL SCREEN_HOME = 0, @@ -71,24 +74,33 @@ typedef enum { SCREEN_QUIT, } screen_t; +/** + * @brief State of the app + * + */ typedef enum { - ST_IDLE, - ST_CLEAR_SIGN, - ST_BLIND_SIGN, - ST_PROMPT, - ST_SWAP_SIGN, - ST_ERROR + ST_IDLE, /// Idle state + ST_CLEAR_SIGN, /// Clearsigning an operation + ST_BLIND_SIGN, /// blindisigning an operation + ST_PROMPT, /// Waiting for user prompt + ST_SWAP_SIGN, /// Performing swap operations + ST_ERROR /// In error state. } main_step_t; +/** + * @brief Global structure holding state of operations and buffer of the data + * to be processed. + * + */ typedef struct { /* State */ - main_step_t step; - tz_ui_stream_t stream; - bip32_path_with_curve_t path_with_curve; + main_step_t step; /// Current operational state of app. + tz_ui_stream_t stream; /// UX and display related information + bip32_path_with_curve_t path_with_curve; /// Derivation path union { struct { - apdu_hash_state_t hash; - apdu_sign_state_t sign; + apdu_hash_state_t hash; /// Transaction hash + apdu_sign_state_t sign; /// state of sign operation. } apdu; /** Warning: Use this pubkey only when apdu-hash/sign * is not being used. @@ -97,19 +109,20 @@ typedef struct { * */ cx_ecfp_public_key_t pubkey; } keys; - char line_buf[TZ_UI_STREAM_CONTENTS_SIZE + 1]; + char line_buf[TZ_UI_STREAM_CONTENTS_SIZE + + 1]; /// Buffer to store incoming data. #ifdef HAVE_BAGL struct { bagl_element_t bagls[5 + TZ_SCREEN_LINES_11PX]; - } ux; + } ux; /// Config for history screens for nano devices. #endif } globals_t; /* Settings */ typedef struct { - bool blindsigning; - bool expert_mode; -} settings_t; + bool blindsigning; /// enable blindsigning + bool expert_mode; /// enable expert mode +} settings_t; /// Special settings available in the app. extern globals_t global; @@ -117,5 +130,8 @@ extern const settings_t N_settings_real; #define N_settings (*(volatile settings_t *)PIC(&N_settings_real)) extern unsigned int app_stack_canary; // From SDK - +/** + * @brief IO buffer. + * + */ extern unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; From f9eec5c2b0597a29f804080bd1a50498067c18a7 Mon Sep 17 00:00:00 2001 From: Sarah Gliner <105934250+sgliner-ledger@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:35:31 +0100 Subject: [PATCH 75/78] [auto] Update screenshot --- .github/PULL_REQUEST_TEMPLATE.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..f2fb620f5 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +# Checklist + +- [ ] App update process has been followed +- [ ] Target branch is `develop` +- [ ] Application version has been bumped + + From 45457c7fb84dcc79197f1a0efdd010434604cba1 Mon Sep 17 00:00:00 2001 From: Sarah Gliner <105934250+sgliner-ledger@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:35:32 +0100 Subject: [PATCH 76/78] [auto] Update screenshot From c059244b64f67f21a526035b5c8bc95585be8c66 Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Fri, 15 Mar 2024 12:45:53 +0000 Subject: [PATCH 77/78] tests: Fix scripts/run_tests.sh to run stax tests. - script to run tests needs to be changed due to updated docker container - change readme to reflect new way of running the tests. --- README.md | 29 +++++++++++------------------ scripts/run_app.sh | 10 ++-------- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 1964b32aa..8c814585a 100644 --- a/README.md +++ b/README.md @@ -175,35 +175,28 @@ re-run the test normally afterwards, to ensure the snapshots have been set corre #### Preparation -First, start a container for running individual tests: +First start the app in a terminal using following command: ```sh -docker run --rm -it --entrypoint /bin/bash -v $(pwd):/app --network host \ - ledger-app-tezos-integration-tests - -cd /app/tests/integration/stax -export PORT=5000 - -git config --global --add safe.directory /app -. ../app_vars.sh +make app_stax_dbg.tgz +TARGET=stax ./scripts/run_app.sh ``` +You should be able to see the stax display on your screen. -Before running the test, start the app in a separate container (as each test will quit the app): +Open a new terminal for running tests, run following commands to setup test environment ```sh -make app_stax_dbg.tgz - -TARGET=stax ./scripts/run_app.sh +$ docker exec -it ledger-app-tezos-integration-tests bash; +$ export PORT=5000 +$ . tests/integration/app_vars.sh ``` -You can view/interact with the app using a vnc client on port `41000`. - #### Running -You can run an individual test from the test container. You should see the app progress on the vnc viewer. +You can run an individual test from the test container. You should see the app progress on the display. ```sh -./.py +./tests/integration/stax/.py ``` #### Setting goldimages @@ -211,7 +204,7 @@ You can run an individual test from the test container. You should see the app p You can reset/set goldimages using the following: ```sh -GOLDEN=1 ./.py +GOLDEN=1 ./tests/integration/stax/.py ``` If you are resetting goldimages for multiple tests, you can also use `export NOQUIT=1` to keep the app diff --git a/scripts/run_app.sh b/scripts/run_app.sh index 7f0c67521..566cd0e80 100755 --- a/scripts/run_app.sh +++ b/scripts/run_app.sh @@ -20,11 +20,5 @@ seed="zebra`for i in $(seq 1 23) ; do echo -n ' zebra' ; done`" set -e - -docker run --rm -it -v "$(realpath .):/app" \ - --entrypoint=/bin/sh ledger-app-tezos-integration-tests \ - -c " apk add gmp-dev curl jq libsodium-dev git xxd procps libvncserver; \ - python3 -m venv tezos_test_env --system-site-package; \ - source ./tezos_test_env/bin/activate; \ - python3 -m pip install -r tests/requirements.txt -q; - python3 -m speculos --display=headless --seed \"$seed\" -m $TARGET app/bin/app.elf" +docker run --rm -it --user $(id -u):$(id -g) --privileged -e DISPLAY=$DISPLAY -v '/dev/bus/usb:/dev/bus/usb' -v '/tmp/.X11-unix:/tmp/.X11-unix' -v $(pwd):/app --entrypoint=/bin/bash --name ledger-app-tezos-integration-tests ledger-app-tezos-integration-tests -c \ +"speculos --model $TARGET app/bin/app.elf" From 0f45895a30993c32f50e5118a5541704fb1b2d9d Mon Sep 17 00:00:00 2001 From: Ajinkya Rajandekar Date: Fri, 15 Mar 2024 12:54:55 +0000 Subject: [PATCH 78/78] Update splash screen for blindsign enabled due to SDK change --- .../blindsign_enabled.png | Bin 5208 -> 5656 bytes .../signing_successful.png | Bin 5467 -> 6108 bytes .../blindsign_enabled.png | Bin 5208 -> 5656 bytes .../blindsign_enabled.png | Bin 5208 -> 5656 bytes .../signing_successful.png | Bin 5467 -> 6108 bytes .../enabled_expert_mode.png | Bin 5065 -> 5707 bytes .../signing_successful.png | Bin 5467 -> 6108 bytes .../enabled_expert_mode.png | Bin 5065 -> 5707 bytes .../enabled_expert_mode.png | Bin 5065 -> 5707 bytes .../test_provide_pk/address_verified.png | Bin 4615 -> 5035 bytes .../enabled_expert_mode.png | Bin 5065 -> 5707 bytes .../signing_successful.png | Bin 5467 -> 6108 bytes .../enabled_expert_mode.png | Bin 5065 -> 5707 bytes .../test_sign_transfer/signing_successful.png | Bin 5467 -> 6108 bytes .../enabled_expert_mode.png | Bin 5065 -> 5707 bytes .../signing_successful.png | Bin 5467 -> 6108 bytes 16 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep/blindsign_enabled.png b/tests/integration/stax/snapshots/test_blindsign_too_deep/blindsign_enabled.png index 279acd54db7568993145eaa08b3ba55c1c567e5f..9d9cdb4251b1a4d39802aae42647cfac1e3394ae 100644 GIT binary patch delta 3769 zcmW+(d0bNY7O%;d`7*7ZOPNc(G0j}+<-S2?MVs12E+L|sTeq_l;R}8v7hq@8VO;y~rA(Zev_VCS#Ykv(>^T7nqukGVX4w2Mzc6xL4h~F=;g+ zZ0PO)Ot7G)Gj>Jv?9cyLZqxB@2sqTwznaNVB5HyCSgwGzko&_2%);N`l2g?+jT@KT z!Rq@~2$G3^ud3--vgus!j(*dKQ@1it?ejp2ub4ZT`V?392{R%X2e;{%I-@6DoA@VG zaCQ-emDdotsNu`Y+x1D>{<|zRoY14)Rb`9pK2K?%3QifmR`1V=s#~^<@lwIXJBF43 zq+J$Hbv% z`l_W7YT43=?XKVTOVBo*fR-g==1R^z6&%^W#y8?r{Ldyvzt|!wK3V55J2YP8T=l73 z^b!dc_AdUAQK%hLwd!*&D)yuYoZ=Tunnp%2E)68iv=p*>FqU}13osFRVo>w z-)$z2*#w^bpw@o?4+`3A`6k(&%=l4&POVbr= znEnt-#ji&V^SnvyVVeEKRPZs!wq7WpNN>df6?7bUr{A_XT$XTj&jpiwcWAh~k&zL$ z)Gw>+8+gQz&C+1IA_KH11OgfT;ZUOfSF+rWrkA~O!UHSJ$R-CTJ|y6-To#JOy~g_Ox)KU=_m&POd9qc;?L>AYkH@>gsD} zQOwSTo{}SKq(7z>31SN!+>($=r3PulO(Sz8m!xG(LBslMS-*SpxQNL-pYJ<4+*?N% z%)9G7It?Z(VNQA>kw`9=`%$T%*URv_YN5%@5oz9_Z8j@?#}1u~aj-B+9v3BbAn{6} zNEAsOXKVTi@5s3TFNB&EV~QDg`ZsgmrEGeub-otiT8UL_%sz2n)Kn7S0kl+-V!dqKgTM`~2g!D|-6)NUO zn(odAMI0+gZ|&u82v|*hgK_0|I)*%t*le4_pzF{b$V7SE%E5Bso=2y3zb@UjGsjzt z#o`?Rci#L8R_AHYWQ>cU=GLtIYlQ)a$4bGVAqCd@8YD_-1YEOq;`gLZ7IVi5o36G4 z0%M@k;W(ze8HYmt-yhT|S4D9FOY(c!D=o4(~A!VDQ66ms5XhMW(j@1p;U&vevrJ zU}0r%aq08EACdtZ}8w!!O^T zw@ibs{-Tu=Suv`Zi*-4a?DIm248&U*pfFR!ju@G>yq&+yKY_hO0vd~KZaL^fpisQh zvBcBJ&=8|kaDE)}i5Czl%TPn_Jzr{*(5-G~*0M5f^&Vm14^LO{TS9=ve~(2pwLM98 zRLAzjnJp?5m^odmeVz9tGMUV57RLy3D$&W3E-iiTo2s5BF9-BKS8bMf9&rLc#l<=e zU-DRVbhN!>>0F}OA}9(2RNg}P(Si$hMIMPn_?IXu__Sg;%tp_D^6w!i)}TXNsk$2B z>>9fBwfvPehn^0+)rQ%R2_*?m;8d3l{3`zmXF5hcFHbfb7R5D5=FWg)DEVoLtq3bT zlM!^uas=I>kO;>>yq(HxFHW^$gCi8-+@VmrY0p>fuS2eB5p?meXSz6s=o4jYmYZ}? zCYN`N<4J=72`&&wXJ==WT@g6-S3`FK9Z0eyO*>5q363wH`F={ZIllxMxHC@v3T1Gt zY>*kk8ENg#?|buuIxZSdCc!QbxKxje*Kn0ViK7=Y#sYCWbOQ99CYI+q^ejyn_UknUP1&yyo)X<^Z~SKV3@P z&KQF(^w7Qb+SM3(fd9FKr4gcG%2#?OqmzG9bV6=Pn!z_?Qf|5@)BN+b(W(Cxo;8&t zgHX;BbBS9IJV8m&RQZV|Fnp&KW_pxp`f*j^+Em@jT%pf<#gma)jgntMW)P6S&3+EA z_j#6&Gg+*ePeK7S&K!H|fn3nP11WJ#&jKnS2JEQF4y5;>OW3*}Jn?u$?qbcDaDLyp zfs~gWOPqEZr*?WLX7Ov(Vq)we(TG8!Z5{s0&mhb^jnOEoxs^S719(Lge}EEYd9;>~ z>p}G?Xf$z@C?hD|Ej@h9e;T&|%f#I(Sm1S*0DZxiYairXISA4hk@Ahd=c0t4RO6-P z5RRgK4knE0XB$Ije!+O8w=E%-XT1eA-w7O>gtA^9bsG4uVGMj7?S>OoX`)lQ)&GMa7HFqEH5t? zjByWVFjFt=NJclg-T(Wd>%qv~dPK}GC+IwSx4HJXsM*2L8!@u-Vx}8^W2egY`-?1m z_VJzhPd1wae`w0y$%^2J@9!obk-SR}TRm!2%H2PbvPu)COsHhY(+oL=uHfG%DE8m= z{3DV#*gkOe;YR1%wCsEk zUPZi;3{?pB`R?XEh=Rt+S*jXifPUa|WbWw-QU>s8$uVaz*Wl4<+cGkPT4&sD34=N- zhQ1QlhX}Qh**R8ddM!A~XiiLhGq8C)LIKKAj+80YY#>TnL;$_b51e06ENtI#{GB@G^IFDzG-6l&N<93Vy@-_Q&we^w*HJLz(K<6 z)E`9E(LK-1yQ~3I-v>lWx6%3(Z+}QE!ti&Sj%GdGmxa=+AB7Ou_SGfFQ7%yO;8i6Xjhxbn(K(*T@;!M_pG- zwdgzEYSHKA6#ndTI;2duw=QSuJ)u-khp=KwP2UF3N%D?l3vFXA(r|T}a4}PqDW?oPEOs_X6%!-Ft#6FJQ-W zY&fI@>sxa{=Q)^#iLxD+Ch+)yT5JB~G1go{D*}@mH|OZImwKcC&e7^>vn(mTeJ4v;wX=z>~4cmm0Hb8N4KqwUAdEnni@{<}yP;4Wb&^A#p%dWT)a{Xtb5D%05 z1~U(?ZpXOjBV`c8A~fw|#dJqAS$kk+xuM9-G}qhfWAc0XxY{Vk?;mE~crA=Zh=woK z2fN;bE+4aZ ze1PIm`hpvfWF|#lgHzptzOX0}3UBofS7NbPJ`Mzij_LpLidWe+x#;WymeYUxafx29NwPxAm2aSt!{x=ju)L1d>76V2^_}0oO})d ztGMKtM=KG)C4&2WKQWHMpPQ@lBhACj*O4!>sg;O$g9g7E&ypf7F%HsbT-|9fGaD-a zMH1ALiB5;WAf+7)$VQ5?D-{d*eczcI&4yG!Atfksv8x}bM|)(uB6RMtAKMndic=+- zlQAuS-i}gkx<($`r@nPrim5hL^t-+aPc0}UT5e*%D yaoONZQU7$(i&`y1B4K&+#4+poCm~yO6h=vV)C=#LKaJi5+SyZ{Cu>ijGXD>uq%aZy delta 3206 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 W57z9=w~$rf`uSMM(Z(YQ*Z&KmHGSIv diff --git a/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/blindsign_enabled.png b/tests/integration/stax/snapshots/test_blindsign_too_deep_rejections/blindsign_enabled.png index 279acd54db7568993145eaa08b3ba55c1c567e5f..9d9cdb4251b1a4d39802aae42647cfac1e3394ae 100644 GIT binary patch delta 3769 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 delta 3206 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 delta 3206 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 W57z9=w~$rf`uSMM(Z(YQ*Z&KmHGSIv diff --git a/tests/integration/stax/snapshots/test_blindsign_valid/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_blindsign_valid/enabled_expert_mode.png index c9ef229fa7be8fd071a271ce31ba27c48213c36b..959148f0416db262a1cf4762efb7558767926929 100644 GIT binary patch delta 3820 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 W57z9=w~$rf`uSMM(Z(YQ*Z&KmHGSIv diff --git a/tests/integration/stax/snapshots/test_expert_mode_rejections/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_expert_mode_rejections/enabled_expert_mode.png index c9ef229fa7be8fd071a271ce31ba27c48213c36b..959148f0416db262a1cf4762efb7558767926929 100644 GIT binary patch delta 3820 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 diff --git a/tests/integration/stax/snapshots/test_sign_execute_outbox_messages/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_sign_execute_outbox_messages/enabled_expert_mode.png index c9ef229fa7be8fd071a271ce31ba27c48213c36b..959148f0416db262a1cf4762efb7558767926929 100644 GIT binary patch delta 3820 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 W57z9=w~$rf`uSMM(Z(YQ*Z&KmHGSIv diff --git a/tests/integration/stax/snapshots/test_sign_transfer/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_sign_transfer/enabled_expert_mode.png index c9ef229fa7be8fd071a271ce31ba27c48213c36b..959148f0416db262a1cf4762efb7558767926929 100644 GIT binary patch delta 3820 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 W57z9=w~$rf`uSMM(Z(YQ*Z&KmHGSIv diff --git a/tests/integration/stax/snapshots/test_sign_transfer_without_hash/enabled_expert_mode.png b/tests/integration/stax/snapshots/test_sign_transfer_without_hash/enabled_expert_mode.png index c9ef229fa7be8fd071a271ce31ba27c48213c36b..959148f0416db262a1cf4762efb7558767926929 100644 GIT binary patch delta 3820 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 W57z9=w~$rf`uSMM(Z(YQ*Z&KmHGSIv