Remove token management from main
This commit is contained in:
25
src/main.c
25
src/main.c
@@ -32,6 +32,7 @@
|
||||
#include "challenge.h"
|
||||
#include "domain_name.h"
|
||||
#include "crypto_helpers.h"
|
||||
#include "manage_asset_info.h"
|
||||
|
||||
unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B];
|
||||
|
||||
@@ -114,22 +115,6 @@ unsigned short io_exchange_al(unsigned char channel, unsigned short tx_len) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
extraInfo_t *getKnownToken(const uint8_t *contractAddress) {
|
||||
union extraInfo_t *currentItem = NULL;
|
||||
// Works for ERC-20 & NFT tokens since both structs in the union have the
|
||||
// contract address aligned
|
||||
for (uint8_t i = 0; i < MAX_ITEMS; i++) {
|
||||
currentItem = (union extraInfo_t *) &tmpCtx.transactionContext.extraInfo[i].token;
|
||||
if (tmpCtx.transactionContext.tokenSet[i] &&
|
||||
(memcmp(currentItem->token.address, contractAddress, ADDRESS_LENGTH) == 0)) {
|
||||
PRINTF("Token found at index %d\n", i);
|
||||
return currentItem;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const uint8_t *parseBip32(const uint8_t *dataBuffer, uint8_t *dataLength, bip32_path_t *bip32) {
|
||||
if (*dataLength < 1) {
|
||||
PRINTF("Invalid data\n");
|
||||
@@ -171,7 +156,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
|
||||
|
||||
switch (G_io_apdu_buffer[OFFSET_INS]) {
|
||||
case INS_GET_PUBLIC_KEY:
|
||||
memset(tmpCtx.transactionContext.tokenSet, 0, MAX_ITEMS);
|
||||
reset_known_tokens();
|
||||
handleGetPublicKey(G_io_apdu_buffer[OFFSET_P1],
|
||||
G_io_apdu_buffer[OFFSET_P2],
|
||||
G_io_apdu_buffer + OFFSET_CDATA,
|
||||
@@ -246,7 +231,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
|
||||
break;
|
||||
|
||||
case INS_SIGN_PERSONAL_MESSAGE:
|
||||
memset(tmpCtx.transactionContext.tokenSet, 0, MAX_ITEMS);
|
||||
reset_known_tokens();
|
||||
*flags |= IO_ASYNCH_REPLY;
|
||||
if (!handleSignPersonalMessage(G_io_apdu_buffer[OFFSET_P1],
|
||||
G_io_apdu_buffer[OFFSET_P2],
|
||||
@@ -259,7 +244,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
|
||||
case INS_SIGN_EIP_712_MESSAGE:
|
||||
switch (G_io_apdu_buffer[OFFSET_P2]) {
|
||||
case P2_EIP712_LEGACY_IMPLEM:
|
||||
memset(tmpCtx.transactionContext.tokenSet, 0, MAX_ITEMS);
|
||||
reset_known_tokens();
|
||||
handleSignEIP712Message_v0(G_io_apdu_buffer[OFFSET_P1],
|
||||
G_io_apdu_buffer[OFFSET_P2],
|
||||
G_io_apdu_buffer + OFFSET_CDATA,
|
||||
@@ -281,7 +266,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
|
||||
#ifdef HAVE_ETH2
|
||||
|
||||
case INS_GET_ETH2_PUBLIC_KEY:
|
||||
memset(tmpCtx.transactionContext.tokenSet, 0, MAX_ITEMS);
|
||||
reset_known_tokens();
|
||||
handleGetEth2PublicKey(G_io_apdu_buffer[OFFSET_P1],
|
||||
G_io_apdu_buffer[OFFSET_P2],
|
||||
G_io_apdu_buffer + OFFSET_CDATA,
|
||||
|
||||
20
src/manage_asset_info.c
Normal file
20
src/manage_asset_info.c
Normal file
@@ -0,0 +1,20 @@
|
||||
#include "manage_asset_info.h"
|
||||
|
||||
void reset_known_tokens(void) {
|
||||
memset(tmpCtx.transactionContext.tokenSet, 0, MAX_ITEMS);
|
||||
}
|
||||
|
||||
extraInfo_t *get_asset_info(const uint8_t *contractAddress) {
|
||||
// Works for ERC-20 & NFT tokens since both structs in the union have the
|
||||
// contract address aligned
|
||||
for (uint8_t i = 0; i < MAX_ITEMS; i++) {
|
||||
extraInfo_t *currentItem = &tmpCtx.transactionContext.extraInfo[i];
|
||||
if (tmpCtx.transactionContext.tokenSet[i] &&
|
||||
(memcmp(currentItem->token.address, contractAddress, ADDRESS_LENGTH) == 0)) {
|
||||
PRINTF("Token found at index %d\n", i);
|
||||
return currentItem;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
7
src/manage_asset_info.h
Normal file
7
src/manage_asset_info.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#include "shared_context.h"
|
||||
#include "common_utils.h"
|
||||
#include "asset_info.h"
|
||||
|
||||
void reset_known_tokens(void);
|
||||
|
||||
extraInfo_t *get_asset_info(const uint8_t *contractAddress);
|
||||
@@ -1,5 +1,4 @@
|
||||
#ifndef _UI_CALLBACKS_H_
|
||||
#define _UI_CALLBACKS_H_
|
||||
#pragma once
|
||||
|
||||
#include "shared_context.h"
|
||||
#include "ux.h"
|
||||
@@ -26,6 +25,3 @@ void ui_warning_contract_data(void);
|
||||
|
||||
void io_seproxyhal_send_status(uint32_t sw);
|
||||
void finalizeParsing(bool direct);
|
||||
extraInfo_t *getKnownToken(const uint8_t *contractAddress);
|
||||
|
||||
#endif // _UI_CALLBACKS_H_
|
||||
|
||||
Reference in New Issue
Block a user