mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-06-02 06:08:46 +00:00
refactor(legacy): deduplicate bigint256 parsing in ethereum.c
[no changelog]
This commit is contained in:
parent
08a918a008
commit
c4a916e5fc
@ -331,14 +331,19 @@ static void ethereumFormatAmount(const bignum256 *amnt,
|
|||||||
bn_format(amnt, NULL, suffix, decimals, 0, false, ',', buf, buflen);
|
bn_format(amnt, NULL, suffix, decimals, 0, false, ',', buf, buflen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void parse_bignum256(const uint8_t *value, uint32_t value_len,
|
||||||
|
bignum256 *result) {
|
||||||
|
uint8_t padded[32] = {0};
|
||||||
|
memzero(padded, sizeof(padded));
|
||||||
|
memcpy(padded + (32 - value_len), value, value_len);
|
||||||
|
bn_read_be(padded, result);
|
||||||
|
}
|
||||||
|
|
||||||
static void layoutEthereumConfirmTx(const uint8_t *to, uint32_t to_len,
|
static void layoutEthereumConfirmTx(const uint8_t *to, uint32_t to_len,
|
||||||
const uint8_t *value, uint32_t value_len,
|
const uint8_t *value, uint32_t value_len,
|
||||||
const EthereumTokenInfo *token) {
|
const EthereumTokenInfo *token) {
|
||||||
bignum256 val = {0};
|
bignum256 val = {0};
|
||||||
uint8_t pad_val[32] = {0};
|
parse_bignum256(value, value_len, &val);
|
||||||
memzero(pad_val, sizeof(pad_val));
|
|
||||||
memcpy(pad_val + (32 - value_len), value, value_len);
|
|
||||||
bn_read_be(pad_val, &val);
|
|
||||||
|
|
||||||
char amount[64] = {0};
|
char amount[64] = {0};
|
||||||
if (token == NULL) {
|
if (token == NULL) {
|
||||||
@ -418,27 +423,19 @@ static void layoutEthereumFee(const uint8_t *value, uint32_t value_len,
|
|||||||
const uint8_t *gas_limit, uint32_t gas_limit_len,
|
const uint8_t *gas_limit, uint32_t gas_limit_len,
|
||||||
bool is_token) {
|
bool is_token) {
|
||||||
bignum256 val = {0}, gas = {0};
|
bignum256 val = {0}, gas = {0};
|
||||||
uint8_t pad_val[32] = {0};
|
|
||||||
char tx_value[32] = {0};
|
char tx_value[32] = {0};
|
||||||
char gas_value[32] = {0};
|
char gas_value[32] = {0};
|
||||||
|
|
||||||
memzero(tx_value, sizeof(tx_value));
|
memzero(tx_value, sizeof(tx_value));
|
||||||
memzero(gas_value, sizeof(gas_value));
|
memzero(gas_value, sizeof(gas_value));
|
||||||
|
|
||||||
memzero(pad_val, sizeof(pad_val));
|
parse_bignum256(gas_price, gas_price_len, &val);
|
||||||
memcpy(pad_val + (32 - gas_price_len), gas_price, gas_price_len);
|
parse_bignum256(gas_limit, gas_limit_len, &gas);
|
||||||
bn_read_be(pad_val, &val);
|
|
||||||
|
|
||||||
memzero(pad_val, sizeof(pad_val));
|
|
||||||
memcpy(pad_val + (32 - gas_limit_len), gas_limit, gas_limit_len);
|
|
||||||
bn_read_be(pad_val, &gas);
|
|
||||||
bn_multiply(&val, &gas, &secp256k1.prime);
|
bn_multiply(&val, &gas, &secp256k1.prime);
|
||||||
|
|
||||||
ethereumFormatAmount(&gas, NULL, gas_value, sizeof(gas_value));
|
ethereumFormatAmount(&gas, NULL, gas_value, sizeof(gas_value));
|
||||||
|
|
||||||
memzero(pad_val, sizeof(pad_val));
|
parse_bignum256(value, value_len, &val);
|
||||||
memcpy(pad_val + (32 - value_len), value, value_len);
|
|
||||||
bn_read_be(pad_val, &val);
|
|
||||||
|
|
||||||
if (bn_is_zero(&val)) {
|
if (bn_is_zero(&val)) {
|
||||||
strcpy(tx_value, is_token ? _("token") : _("message"));
|
strcpy(tx_value, is_token ? _("token") : _("message"));
|
||||||
@ -457,18 +454,14 @@ static void layoutEthereumFeeEIP1559(const char *description,
|
|||||||
const uint8_t *multiplier_bytes,
|
const uint8_t *multiplier_bytes,
|
||||||
uint32_t multiplier_len) {
|
uint32_t multiplier_len) {
|
||||||
bignum256 amount_val = {0};
|
bignum256 amount_val = {0};
|
||||||
uint8_t padded[32] = {0};
|
|
||||||
char amount_str[32] = {0};
|
char amount_str[32] = {0};
|
||||||
|
|
||||||
memcpy(padded + (32 - amount_len), amount_bytes, amount_len);
|
parse_bignum256(amount_bytes, amount_len, &amount_val);
|
||||||
bn_read_be(padded, &amount_val);
|
|
||||||
|
|
||||||
if (multiplier_len > 0) {
|
if (multiplier_len > 0) {
|
||||||
bignum256 multiplier_val = {0};
|
bignum256 multiplier_val = {0};
|
||||||
|
|
||||||
memzero(padded, sizeof(padded));
|
parse_bignum256(multiplier_bytes, multiplier_len, &multiplier_val);
|
||||||
memcpy(padded + (32 - multiplier_len), multiplier_bytes, multiplier_len);
|
|
||||||
bn_read_be(padded, &multiplier_val);
|
|
||||||
bn_multiply(&multiplier_val, &amount_val, &secp256k1.prime);
|
bn_multiply(&multiplier_val, &amount_val, &secp256k1.prime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user