1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-23 23:08:14 +00:00

legacy: use 2 page pagination to show xpubs in multisig get_address

This commit is contained in:
Pavol Rusnak 2020-02-24 17:00:46 +00:00
parent 5c01a9459c
commit ec199b19a9
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
3 changed files with 24 additions and 19 deletions

View File

@ -237,7 +237,7 @@ static bool fsm_layoutAddress(const char *address, const char *desc,
int multisig_index, const CoinInfo *coin) {
int screen = 0, screens = 2;
if (multisig) {
screens += cryptoMultisigPubkeyCount(multisig);
screens += 2 * cryptoMultisigPubkeyCount(multisig);
}
for (;;) {
switch (screen) {
@ -257,7 +257,8 @@ static bool fsm_layoutAddress(const char *address, const char *desc,
break;
}
default: { // show XPUBs
int index = (screen - 2);
int index = (screen - 2) / 2;
int page = (screen - 2) % 2;
char xpub[112] = {0};
const HDNodeType *node_ptr = NULL;
if (multisig->nodes_count) { // use multisig->nodes
@ -280,7 +281,7 @@ static bool fsm_layoutAddress(const char *address, const char *desc,
coin->xpub_magic, xpub, sizeof(xpub));
}
}
layoutXPUB(xpub, index, multisig_index == index);
layoutXPUB(xpub, index, page, multisig_index == index);
break;
}
}

View File

@ -653,14 +653,14 @@ void layoutPublicKey(const uint8_t *pubkey) {
str[1], str[2], str[3], NULL);
}
void layoutXPUB(const char *xpub, int index, bool ours) {
void layoutXPUB(const char *xpub, int index, int page, bool ours) {
if (layoutLast != layoutAddress && layoutLast != layoutXPUB) {
layoutSwipe();
} else {
oledClear();
}
layoutLast = layoutXPUB;
char desc[] = "XPUB #__ (______)";
char desc[] = "XPUB #__ _/2 (______)";
if (index + 1 >= 10) {
desc[6] = '0' + (((index + 1) / 10) % 10);
desc[7] = '0' + ((index + 1) % 10);
@ -668,23 +668,27 @@ void layoutXPUB(const char *xpub, int index, bool ours) {
desc[6] = '0' + ((index + 1) % 10);
desc[7] = ' ';
}
desc[9] = '1' + page;
if (ours) {
desc[10] = 'y';
desc[11] = 'o';
desc[12] = 'u';
desc[13] = 'r';
desc[14] = 's';
desc[15] = ')';
desc[16] = 0;
desc[14] = 'y';
desc[15] = 'o';
desc[16] = 'u';
desc[17] = 'r';
desc[18] = 's';
desc[19] = ')';
desc[20] = 0;
} else {
desc[10] = 'o';
desc[11] = 't';
desc[12] = 'h';
desc[13] = 'e';
desc[14] = 'r';
desc[15] = 's';
desc[14] = 'o';
desc[15] = 't';
desc[16] = 'h';
desc[17] = 'e';
desc[18] = 'r';
desc[19] = 's';
}
// 21 characters per line, 4 lines, minus 3 chars for "..." = 81
// skip 81 characters per page
xpub += page * 81;
const char **str = split_message((const uint8_t *)xpub, strlen(xpub), 21);
oledDrawString(0, 0 * 9, desc, FONT_STANDARD);
for (int i = 0; i < 4; i++) {

View File

@ -64,7 +64,7 @@ void layoutAddress(const char *address, const char *desc, bool qrcode,
bool ignorecase, const uint32_t *address_n,
size_t address_n_count, bool address_is_account);
void layoutPublicKey(const uint8_t *pubkey);
void layoutXPUB(const char *xpub, int index, bool ours);
void layoutXPUB(const char *xpub, int index, int page, bool ours);
void layoutSignIdentity(const IdentityType *identity, const char *challenge);
void layoutDecryptIdentity(const IdentityType *identity);
void layoutU2FDialog(const char *verb, const char *appname);