From 2f5e5203458465474e8f572290e64f4e9db68532 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Wed, 18 Feb 2015 18:30:54 +0100 Subject: [PATCH] add description to layoutAddress --- firmware/crypto.c | 3 +++ firmware/fsm.c | 14 +++++++++++++- firmware/layout2.c | 13 ++++++++----- firmware/layout2.h | 2 +- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/firmware/crypto.c b/firmware/crypto.c index 24c2998..d0f9f48 100644 --- a/firmware/crypto.c +++ b/firmware/crypto.c @@ -308,6 +308,7 @@ int cryptoMultisigFingerprint(const MultisigRedeemScriptType *multisig, uint8_t } uint32_t i, j; // check sanity + if (!multisig->has_m || multisig->m < 1 || multisig->m > 15) return 0; for (i = 0; i < n; i++) { ptr[i] = &(multisig->pubkeys[i]); if (!ptr[i]->node.has_public_key || ptr[i]->node.public_key.size != 33) return 0; @@ -326,6 +327,7 @@ int cryptoMultisigFingerprint(const MultisigRedeemScriptType *multisig, uint8_t // hash sorted nodes SHA256_CTX ctx; sha256_Init(&ctx); + sha256_Update(&ctx, (const uint8_t *)&(multisig->m), sizeof(uint32_t)); for (i = 0; i < n; i++) { sha256_Update(&ctx, (const uint8_t *)&(ptr[i]->node.depth), sizeof(uint32_t)); sha256_Update(&ctx, (const uint8_t *)&(ptr[i]->node.fingerprint), sizeof(uint32_t)); @@ -333,6 +335,7 @@ int cryptoMultisigFingerprint(const MultisigRedeemScriptType *multisig, uint8_t sha256_Update(&ctx, ptr[i]->node.chain_code.bytes, 32); sha256_Update(&ctx, ptr[i]->node.public_key.bytes, 33); } + sha256_Update(&ctx, (const uint8_t *)&n, sizeof(uint32_t)); sha256_Final(hash, &ctx); layoutProgressUpdate(true); return 1; diff --git a/firmware/fsm.c b/firmware/fsm.c index 1f88c9d..6a4e07d 100644 --- a/firmware/fsm.c +++ b/firmware/fsm.c @@ -526,7 +526,19 @@ void fsm_msgGetAddress(GetAddress *msg) } if (msg->has_show_display && msg->show_display) { - layoutAddress(resp->address); + char desc[16]; + if (msg->has_multisig) { + strlcpy(desc, "Msig __ of __:", sizeof(desc)); + const uint32_t m = msg->multisig.m; + const uint32_t n = msg->multisig.pubkeys_count; + desc[5] = (m < 10) ? ' ': ('0' + (m / 10)); + desc[6] = '0' + (m % 10); + desc[11] = (n < 10) ? ' ': ('0' + (n / 10)); + desc[12] = '0' + (n % 10); + } else { + strlcpy(desc, "Address:", sizeof(desc)); + } + layoutAddress(resp->address, desc); if (!protectButton(ButtonRequestType_ButtonRequest_Address, true)) { fsm_sendFailure(FailureType_Failure_ActionCancelled, "Show address cancelled"); layoutHome(); diff --git a/firmware/layout2.c b/firmware/layout2.c index 739c233..73819d0 100644 --- a/firmware/layout2.c +++ b/firmware/layout2.c @@ -220,7 +220,7 @@ void layoutDecryptMessage(const uint8_t *msg, uint32_t len, const char *address) str[0], str[1], str[2], str[3], NULL, NULL); } -void layoutAddress(const char *address) +void layoutAddress(const char *address, const char *desc) { oledSwipeLeft(); layoutLast = layoutAddress; @@ -246,10 +246,13 @@ void layoutAddress(const char *address) const char **str = split_message((const uint8_t *)address, strlen(address), 9); - oledDrawString(68, 0 * 9, str[0]); - oledDrawString(68, 1 * 9, str[1]); - oledDrawString(68, 2 * 9, str[2]); - oledDrawString(68, 3 * 9, str[3]); + if (desc) { + oledDrawString(68, 0 * 9, desc); + } + oledDrawString(68, 1 * 9 + 4, str[0]); + oledDrawString(68, 2 * 9 + 4, str[1]); + oledDrawString(68, 3 * 9 + 4, str[2]); + oledDrawString(68, 4 * 9 + 4, str[3]); static const char *btnYes = "Continue"; oledDrawString(OLED_WIDTH - fontCharWidth('\x06') - 1, OLED_HEIGHT - 8, "\x06"); diff --git a/firmware/layout2.h b/firmware/layout2.h index bd9be4c..b109863 100644 --- a/firmware/layout2.h +++ b/firmware/layout2.h @@ -35,6 +35,6 @@ void layoutVerifyMessage(const uint8_t *msg, uint32_t len); void layoutCipherKeyValue(bool encrypt, const char *key); void layoutEncryptMessage(const uint8_t *msg, uint32_t len, bool signing); void layoutDecryptMessage(const uint8_t *msg, uint32_t len, const char *address); -void layoutAddress(const char *address); +void layoutAddress(const char *address, const char *desc); #endif