Skip to content

Commit

Permalink
Renamed Item to Asset & changed the set marker type to boolean
Browse files Browse the repository at this point in the history
Also renamed the reset assets function
  • Loading branch information
apaillier-ledger committed May 7, 2024
1 parent c2e0f7c commit 9c42121
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 22 deletions.
9 changes: 5 additions & 4 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ void reset_app_context() {
eth2WithdrawalIndex = 0;
#endif
memset((uint8_t *) &tmpCtx, 0, sizeof(tmpCtx));
forget_known_assets();
memset((uint8_t *) &txContext, 0, sizeof(txContext));
memset((uint8_t *) &tmpContent, 0, sizeof(tmpContent));
}
Expand Down Expand Up @@ -156,7 +157,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {

switch (G_io_apdu_buffer[OFFSET_INS]) {
case INS_GET_PUBLIC_KEY:
reset_known_tokens();
forget_known_assets();
handleGetPublicKey(G_io_apdu_buffer[OFFSET_P1],
G_io_apdu_buffer[OFFSET_P2],
G_io_apdu_buffer + OFFSET_CDATA,
Expand Down Expand Up @@ -231,7 +232,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
break;

case INS_SIGN_PERSONAL_MESSAGE:
reset_known_tokens();
forget_known_assets();
*flags |= IO_ASYNCH_REPLY;
if (!handleSignPersonalMessage(G_io_apdu_buffer[OFFSET_P1],
G_io_apdu_buffer[OFFSET_P2],
Expand All @@ -244,7 +245,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:
reset_known_tokens();
forget_known_assets();
handleSignEIP712Message_v0(G_io_apdu_buffer[OFFSET_P1],
G_io_apdu_buffer[OFFSET_P2],
G_io_apdu_buffer + OFFSET_CDATA,
Expand All @@ -266,7 +267,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) {
#ifdef HAVE_ETH2

case INS_GET_ETH2_PUBLIC_KEY:
reset_known_tokens();
forget_known_assets();
handleGetEth2PublicKey(G_io_apdu_buffer[OFFSET_P1],
G_io_apdu_buffer[OFFSET_P2],
G_io_apdu_buffer + OFFSET_CDATA,
Expand Down
23 changes: 12 additions & 11 deletions src/manage_asset_info.c
Original file line number Diff line number Diff line change
@@ -1,29 +1,30 @@
#include "manage_asset_info.h"
#include "shared_context.h"

void reset_known_tokens(void) {
memset(tmpCtx.transactionContext.tokenSet, 0, MAX_ITEMS);
tmpCtx.transactionContext.currentItemIndex = 0;
void forget_known_assets(void) {
memset(tmpCtx.transactionContext.assetSet, false, MAX_ASSETS);
tmpCtx.transactionContext.currentAssetIndex = 0;
}

static extraInfo_t *get_asset_info(uint8_t index) {
if (index >= MAX_ITEMS) {
if (index >= MAX_ASSETS) {
return NULL;
}
return &tmpCtx.transactionContext.extraInfo[index];
}

static bool asset_info_is_set(uint8_t index) {
if (index >= MAX_ITEMS) {
if (index >= MAX_ASSETS) {
return false;
}
return tmpCtx.transactionContext.tokenSet[index] != 0;
return tmpCtx.transactionContext.assetSet[index];
}

extraInfo_t *get_asset_info_by_addr(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];
for (uint8_t i = 0; i < MAX_ASSETS; i++) {
extraInfo_t *currentItem = get_asset_info(i);
if (asset_info_is_set(i) &&
(memcmp(currentItem->token.address, contractAddress, ADDRESS_LENGTH) == 0)) {
PRINTF("Token found at index %d\n", i);
Expand All @@ -35,12 +36,12 @@ extraInfo_t *get_asset_info_by_addr(const uint8_t *contractAddress) {
}

extraInfo_t *get_current_asset_info(void) {
return get_asset_info(tmpCtx.transactionContext.currentItemIndex);
return get_asset_info(tmpCtx.transactionContext.currentAssetIndex);
}

void validate_current_asset_info(void) {
// mark it as set
tmpCtx.transactionContext.tokenSet[tmpCtx.transactionContext.currentItemIndex] = 1;
tmpCtx.transactionContext.assetSet[tmpCtx.transactionContext.currentAssetIndex] = true;
// increment index
tmpCtx.transactionContext.currentItemIndex = (tmpCtx.transactionContext.currentItemIndex + 1) % MAX_ITEMS;
tmpCtx.transactionContext.currentAssetIndex = (tmpCtx.transactionContext.currentAssetIndex + 1) % MAX_ASSETS;
}
2 changes: 1 addition & 1 deletion src/manage_asset_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include "common_utils.h"
#include "asset_info.h"

void reset_known_tokens(void);
void forget_known_assets(void);
extraInfo_t *get_asset_info_by_addr(const uint8_t *contractAddress);
extraInfo_t *get_current_asset_info(void);
void validate_current_asset_info(void);
8 changes: 5 additions & 3 deletions src/shared_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

#define N_storage (*(volatile internalStorage_t *) PIC(&N_storage_real))

#define MAX_ASSETS MAX_ITEMS // TODO: Temporary, remove once plugin SDK is updated

typedef struct bip32_path_t {
uint8_t length;
uint32_t path[MAX_BIP32_PATH];
Expand Down Expand Up @@ -77,9 +79,9 @@ typedef struct publicKeyContext_t {
typedef struct transactionContext_t {
bip32_path_t bip32;
uint8_t hash[INT256_LENGTH];
union extraInfo_t extraInfo[MAX_ITEMS];
uint8_t tokenSet[MAX_ITEMS];
uint8_t currentItemIndex;
union extraInfo_t extraInfo[MAX_ASSETS];
bool assetSet[MAX_ASSETS];
uint8_t currentAssetIndex;
} transactionContext_t;

typedef struct messageSigningContext_t {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ void handleProvideErc20TokenInformation(uint8_t p1,

tokenDefinition_t *token = &get_current_asset_info()->token;

PRINTF("Provisioning currentItemIndex %d\n", tmpCtx.transactionContext.currentItemIndex);
PRINTF("Provisioning currentAssetIndex %d\n", tmpCtx.transactionContext.currentAssetIndex);

if (dataLength < 1) {
THROW(0x6A80);
Expand All @@ -138,10 +138,11 @@ void handleProvideErc20TokenInformation(uint8_t p1,
memmove(token->address, workBuffer + offset, 20);
offset += 20;
dataLength -= 20;
// TODO: Handle 64-bit long chain IDs
// TODO: 4 bytes for this is overkill
token->decimals = U4BE(workBuffer, offset);
offset += 4;
dataLength -= 4;
// TODO: Handle 64-bit long chain IDs
chain_id = U4BE(workBuffer, offset);
if (!app_compatible_with_chain_id(&chain_id)) {
UNSUPPORTED_CHAIN_ID_MSG(chain_id);
Expand Down
2 changes: 1 addition & 1 deletion src_features/provideNFTInformation/cmd_provideNFTInfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ void handleProvideNFTInformation(uint8_t p1,
}
nftInfo_t *nft = &get_current_asset_info()->nft;

PRINTF("Provisioning currentItemIndex %d\n", tmpCtx.transactionContext.currentItemIndex);
PRINTF("Provisioning currentAssetIndex %d\n", tmpCtx.transactionContext.currentAssetIndex);

size_t offset = 0;

Expand Down

0 comments on commit 9c42121

Please sign in to comment.