From f3e307423e7110790b55346116cb9723139e8025 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 7 Jun 2022 15:07:54 +0200 Subject: [PATCH] EIP712 now displays integers differently if signed or unsigned --- src/utils.c | 2 +- src/utils.h | 2 +- src_features/signMessageEIP712/ui_logic.c | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/utils.c b/src/utils.c index f044e98..be55825 100644 --- a/src/utils.c +++ b/src/utils.c @@ -33,7 +33,7 @@ void array_hexstr(char *strbuf, const void *bin, unsigned int len) { *strbuf = 0; // EOS } -void convertUint256BE(uint8_t *data, uint32_t length, uint256_t *target) { +void convertUint256BE(const uint8_t *const data, uint32_t length, uint256_t *const target) { uint8_t tmp[INT256_LENGTH]; memset(tmp, 0, 32); memmove(tmp + 32 - length, data, length); diff --git a/src/utils.h b/src/utils.h index 306c27b..407039b 100644 --- a/src/utils.h +++ b/src/utils.h @@ -24,7 +24,7 @@ void array_hexstr(char* strbuf, const void* bin, unsigned int len); -void convertUint256BE(uint8_t* data, uint32_t length, uint256_t* target); +void convertUint256BE(const uint8_t *const data, uint32_t length, uint256_t *const target); uint64_t u64_from_BE(const uint8_t* in, uint8_t size); diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index 67869bc..ece0791 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -14,6 +14,8 @@ #include "utils.h" // uint256_to_decimal #include "common_712.h" #include "context.h" // eip712_context_deinit +#include "uint256.h" // tostring256 +#include "int256.h" // tostring256_s static t_ui_context *ui_ctx = NULL; @@ -108,6 +110,7 @@ void ui_712_new_field(const void *const field_ptr, const uint8_t *const data, { const char *key; uint8_t key_len; + uint256_t value256; if (ui_ctx == NULL) { @@ -162,10 +165,13 @@ void ui_712_new_field(const void *const field_ptr, const uint8_t *const data, strcat(strings.tmp.tmp, "..."); } break; - // TODO: signed integers should be handled differently case TYPE_SOL_INT: + convertUint256BE(data, length, &value256); + tostring256_s(&value256, 10, strings.tmp.tmp, sizeof(strings.tmp.tmp)); + break; case TYPE_SOL_UINT: - uint256_to_decimal(data, length, strings.tmp.tmp, sizeof(strings.tmp.tmp)); + convertUint256BE(data, length, &value256); + tostring256(&value256, 10, strings.tmp.tmp, sizeof(strings.tmp.tmp)); break; default: PRINTF("Unhandled type\n");