From b56da1e4b424c5f4231daeef0082ca63ce6ec545 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Mon, 9 Oct 2017 21:05:59 +0200 Subject: [PATCH] layout: show path for CoSi commit/sign if following SLIP-0018 --- firmware/fsm.c | 4 ++-- firmware/layout2.c | 17 ++++++++++++++--- firmware/layout2.h | 2 +- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/firmware/fsm.c b/firmware/fsm.c index 564336fcc2..f32e700c5c 100644 --- a/firmware/fsm.c +++ b/firmware/fsm.c @@ -1343,7 +1343,7 @@ void fsm_msgCosiCommit(CosiCommit *msg) CHECK_PARAM(msg->has_data, _("No data provided")); - layoutCosiCommitSign(msg->data.bytes, msg->data.size, false); + layoutCosiCommitSign(msg->address_n, msg->address_n_count, msg->data.bytes, msg->data.size, false); if (!protectButton(ButtonRequestType_ButtonRequest_ProtectCall, false)) { fsm_sendFailure(FailureType_Failure_ActionCancelled, NULL); layoutHome(); @@ -1383,7 +1383,7 @@ void fsm_msgCosiSign(CosiSign *msg) CHECK_PARAM(msg->has_global_commitment && msg->global_commitment.size == 32, _("Invalid global commitment")); CHECK_PARAM(msg->has_global_pubkey && msg->global_pubkey.size == 32, _("Invalid global pubkey")); - layoutCosiCommitSign(msg->data.bytes, msg->data.size, true); + layoutCosiCommitSign(msg->address_n, msg->address_n_count, msg->data.bytes, msg->data.size, true); if (!protectButton(ButtonRequestType_ButtonRequest_ProtectCall, false)) { fsm_sendFailure(FailureType_Failure_ActionCancelled, NULL); layoutHome(); diff --git a/firmware/layout2.c b/firmware/layout2.c index 0ffd7aa6d7..78d7869f54 100644 --- a/firmware/layout2.c +++ b/firmware/layout2.c @@ -645,8 +645,20 @@ void layoutNEMLevy(const NEMMosaicDefinition *definition, uint8_t network) { } } -void layoutCosiCommitSign(const uint8_t *data, uint32_t len, bool final_sign) +void layoutCosiCommitSign(const uint32_t *address_n, size_t address_n_count, const uint8_t *data, uint32_t len, bool final_sign) { + char *desc = final_sign ? _("CoSi sign message?") : _("CoSi commit message?"); + if (address_n_count == 2 && address_n[0] == (0x80000000 + 10018) && (address_n[1] & 0x80000000) && (address_n[1] & 0x7FFFFFFF) <= 9) { + char desc_buf[32]; + if (final_sign) { + strlcpy(desc_buf, _("CoSi sign index #?"), sizeof(desc_buf)); + desc_buf[16] = '0' + (address_n[1] & 0x7FFFFFFF); + } else { + strlcpy(desc_buf, _("CoSi commit index #?"), sizeof(desc_buf)); + desc_buf[18] = '0' + (address_n[1] & 0x7FFFFFFF); + } + desc = desc_buf; + } char str[4][17]; if (len == 32) { data2hex(data , 8, str[0]); @@ -659,7 +671,6 @@ void layoutCosiCommitSign(const uint8_t *data, uint32_t len, bool final_sign) strlcpy(str[2], "unsupported", sizeof(str[2])); strlcpy(str[3], "length", sizeof(str[3])); } - layoutDialogSwipe(&bmp_icon_question, _("Cancel"), _("Confirm"), - final_sign ? _("CoSi sign message?") : _("CoSi commit message?"), + layoutDialogSwipe(&bmp_icon_question, _("Cancel"), _("Confirm"), desc, str[0], str[1], str[2], str[3], NULL, NULL); } diff --git a/firmware/layout2.h b/firmware/layout2.h index d87c80e418..3747914cad 100644 --- a/firmware/layout2.h +++ b/firmware/layout2.h @@ -57,6 +57,6 @@ void layoutNEMTransferPayload(const uint8_t *payload, size_t length, bool encryp void layoutNEMMosaicDescription(const char *description); void layoutNEMLevy(const NEMMosaicDefinition *definition, uint8_t network); -void layoutCosiCommitSign(const uint8_t *data, uint32_t len, bool final_sign); +void layoutCosiCommitSign(const uint32_t *address_n, size_t address_n_count, const uint8_t *data, uint32_t len, bool final_sign); #endif