Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix NBGL EIP-712 on Flex #588

Merged
merged 6 commits into from
May 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion client/src/ledger_app_clients/ethereum/eip712/InputData.py
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,10 @@ def next_timeout(_signum: int, _frame):


def enable_autonext():
delay = 1/5
if app_client._client.firmware.device in ("stax", "flex"):
delay = 1/3
else:
delay = 1/4
signal.setitimer(signal.ITIMER_REAL, delay, delay)


Expand Down
12 changes: 10 additions & 2 deletions src_nbgl/ui_message_signing.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,18 @@ void ui_message_start(const char *title,
ui_message_confirm_rejection);
}

void ui_message_712_approved(void) {
static void ui_message_712_approved(void) {
ui_712_approve();
}

void ui_message_712_rejected(void) {
static void ui_message_712_rejected(void) {
ui_712_reject();
}

void ui_typed_message_review_choice(bool confirm) {
if (confirm) {
nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_SIGNED, ui_message_712_approved);
} else {
nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_REJECTED, ui_message_712_rejected);
}
}
5 changes: 2 additions & 3 deletions src_nbgl/ui_message_signing.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define UI_MESSAGE_SIGNING_H_

#include <stdbool.h>
#include "ui_signing.h"

#define TEXT_MESSAGE "message"
#define TEXT_TYPED_MESSAGE "typed " TEXT_MESSAGE
Expand All @@ -13,8 +14,6 @@ void ui_message_start(const char *title,
void (*start_func)(void),
void (*approved_func)(void),
void (*rejected_func)(void));

void ui_message_712_approved(void);
void ui_message_712_rejected(void);
void ui_typed_message_review_choice(bool confirm);

#endif // UI_MESSAGE_SIGNING_H_
86 changes: 31 additions & 55 deletions src_nbgl/ui_sign_712.c
Original file line number Diff line number Diff line change
@@ -1,80 +1,56 @@
#ifdef HAVE_EIP712_FULL_SUPPORT

#include <string.h> // explicit_bzero
#include "common_ui.h"
#include "ui_nbgl.h"
#include "ui_logic.h"
#include "common_712.h"
#include "nbgl_use_case.h"
#include "network.h"
#include "ui_message_signing.h"
#include "ui_signing.h"

static nbgl_contentTagValue_t pair;

static bool display_sign_page(uint8_t page, nbgl_pageContent_t *content) {
(void) page;
content->type = INFO_LONG_PRESS, content->infoLongPress.icon = get_app_icon(true);
content->infoLongPress.text = TEXT_SIGN_EIP712;
content->infoLongPress.longPressText = SIGN_BUTTON;
return true;
}

static bool display_review_page(uint8_t page, nbgl_pageContent_t *content) {
bool ret;
uint16_t len;

switch (page) {
case 0:
// limit the value to one page
nbgl_getTextMaxLenInNbLines(LARGE_MEDIUM_FONT,
strings.tmp.tmp,
SCREEN_WIDTH - (2 * BORDER_MARGIN),
NB_MAX_LINES_IN_REVIEW,
&len,
false);
strings.tmp.tmp[len] = '\0';

pair.item = strings.tmp.tmp2;
pair.value = strings.tmp.tmp;
content->type = TAG_VALUE_LIST;
content->tagValueList.nbPairs = 1;
content->tagValueList.pairs = &pair;
content->tagValueList.wrapping = false;
ret = true;
break;

case 1:
if (ui_712_next_field() == EIP712_NO_MORE_FIELD) {
ui_712_switch_to_sign();
}
__attribute__((fallthrough));
default:
ret = false;
break;
static nbgl_contentTagValueList_t pairs_list;

static void message_progress(bool confirm) {
if (confirm) {
if (ui_712_next_field() == EIP712_NO_MORE_FIELD) {
ui_712_switch_to_sign();
}
} else {
ui_typed_message_review_choice(false);
}
return ret;
}

static void handle_display(nbgl_navCallback_t cb) {
nbgl_useCaseRegularReview(0, 0, REJECT_BUTTON, NULL, cb, ui_message_review_choice);
static void message_update(bool confirm) {
if (confirm) {
explicit_bzero(&pair, sizeof(pair));
explicit_bzero(&pairs_list, sizeof(pairs_list));

pair.item = strings.tmp.tmp2;
pair.value = strings.tmp.tmp;
pairs_list.nbPairs = 1;
pairs_list.pairs = &pair;
pairs_list.wrapping = false;
nbgl_useCaseReviewStreamingContinue(&pairs_list, message_progress);
} else {
ui_typed_message_review_choice(false);
}
}

void ui_712_start(void) {
g_position = UI_SIGNING_POSITION_START;
ui_message_start(TEXT_REVIEW_EIP712,
&ui_712_switch_to_message,
&ui_message_712_approved,
&ui_message_712_rejected);
nbgl_useCaseReviewStreamingStart(TYPE_MESSAGE,
&C_Review_64px,
TEXT_REVIEW_EIP712,
NULL,
message_update);
}

void ui_712_switch_to_message(void) {
g_position = UI_SIGNING_POSITION_REVIEW;
handle_display(display_review_page);
message_update(true);
}

void ui_712_switch_to_sign(void) {
g_position = UI_SIGNING_POSITION_SIGN;
handle_display(display_sign_page);
nbgl_useCaseReviewStreamingFinish(TEXT_SIGN_EIP712, ui_typed_message_review_choice);
}

#endif // HAVE_EIP712_FULL_SUPPORT
23 changes: 7 additions & 16 deletions src_nbgl/ui_sign_712_v0.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,9 @@
#include "ui_nbgl.h"
#include "common_712.h"
#include "ui_message_signing.h"
#include "ui_signing.h"

static nbgl_contentTagValue_t pairs[2];
static nbgl_contentTagValueList_t pairsList;

static void message_review_choice(bool confirm) {
if (confirm) {
nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_SIGNED, ui_message_712_approved);
} else {
nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_REJECTED, ui_message_712_rejected);
}
}
static nbgl_contentTagValueList_t pairs_list;

static char *format_hash(const uint8_t *hash, char *buffer, size_t buffer_size, size_t offset) {
array_bytes_string(buffer + offset, buffer_size - offset, hash, KECCAK256_HASH_BYTESIZE);
Expand All @@ -24,7 +15,7 @@ static char *format_hash(const uint8_t *hash, char *buffer, size_t buffer_size,

void ui_sign_712_v0(void) {
explicit_bzero(pairs, sizeof(pairs));
explicit_bzero(&pairsList, sizeof(pairsList));
explicit_bzero(&pairs_list, sizeof(pairs_list));

pairs[0].item = "Domain hash";
pairs[0].value = format_hash(tmpCtx.messageSigningContext712.domainHash,
Expand All @@ -37,15 +28,15 @@ void ui_sign_712_v0(void) {
sizeof(strings.tmp.tmp),
70);

pairsList.nbPairs = ARRAYLEN(pairs);
pairsList.pairs = pairs;
pairsList.nbMaxLinesForValue = 0;
pairs_list.nbPairs = ARRAYLEN(pairs);
pairs_list.pairs = pairs;
pairs_list.nbMaxLinesForValue = 0;

nbgl_useCaseReview(TYPE_MESSAGE,
&pairsList,
&pairs_list,
&C_Review_64px,
TEXT_REVIEW_EIP712,
NULL,
TEXT_SIGN_EIP712,
message_review_choice);
ui_typed_message_review_choice);
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 0 additions & 4 deletions tests/ragger/test_eip712.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,6 @@ def test_eip712_new(firmware: Firmware,
app_client = EthAppClient(backend)
if firmware.device == "nanos":
pytest.skip("Not supported on LNS")
if firmware.device == "flex":
pytest.skip("Not yet available on Flex (due to swipe)")

test_path = f"{input_file.parent}/{'-'.join(input_file.stem.split('-')[:-1])}"

Expand Down Expand Up @@ -193,8 +191,6 @@ def test_eip712_address_substitution(firmware: Firmware,
app_client = EthAppClient(backend)
if firmware.device == "nanos":
pytest.skip("Not supported on LNS")
if firmware.device == "flex":
pytest.skip("Not yet available on Flex (due to swipe)")

if verbose:
test_name += "_verbose"
Expand Down
Loading