Skip to content

Commit 853a3c4

Browse files
committed
resolved merge conflict & exchange app issue
1 parent cc7bc32 commit 853a3c4

File tree

12 files changed

+438
-206
lines changed

12 files changed

+438
-206
lines changed

CMakeLists.txt

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,29 @@ execute_process(COMMAND sh utilities/proto/generate-protob.sh WORKING_DIRECTORY
2424
include(utilities/cmake/version.cmake)
2525

2626
file(GLOB_RECURSE PROTO_SRCS "generated/proto/*.*")
27-
list(APPEND PROTO_SRCS "vendor/nanopb/pb_common.c" "vendor/nanopb/pb_decode.c" "vendor/nanopb/pb_encode.c" "vendor/nanopb/pb_common.h" "vendor/nanopb/pb_decode.h" "vendor/nanopb/pb_encode.h" "vendor/nanopb/pb.h")
27+
list(APPEND PROTO_SRCS
28+
"vendor/nanopb/pb_common.c"
29+
"vendor/nanopb/pb_decode.c"
30+
"vendor/nanopb/pb_encode.c"
31+
"vendor/nanopb/pb_common.h"
32+
"vendor/nanopb/pb_decode.h"
33+
"vendor/nanopb/pb_encode.h"
34+
"vendor/nanopb/pb.h"
35+
)
2836

29-
list (APPEND MINI_GMP_SRCS "vendor/mini-gmp/mini-gmp-helpers.c" "vendor/mini-gmp/mini-gmp.c")
30-
list (APPEND POSEIDON_SRCS "vendor/poseidon/sources/f251.c" "vendor/poseidon/sources/poseidon.c" "vendor/poseidon/sources/poseidon_rc.c")
37+
list (APPEND MINI_GMP_SRCS
38+
"vendor/mini-gmp/mini-gmp-helpers.c"
39+
"vendor/mini-gmp/mini-gmp.c"
40+
)
41+
list (APPEND POSEIDON_SRCS
42+
"vendor/poseidon/sources/f251.c"
43+
"vendor/poseidon/sources/poseidon.c"
44+
"vendor/poseidon/sources/poseidon_rc.c"
45+
)
3146

3247
OPTION(DEV_SWITCH "Additional features/logs to aid developers" OFF)
3348
OPTION(UNIT_TESTS_SWITCH "Compile build for main firmware or unit tests" OFF)
49+
OPTION(BTC_ONLY "Build firmware for Bitcoin only" OFF)
3450

3551
# Make static functions testable via unit-tests
3652
IF(UNIT_TESTS_SWITCH)
@@ -47,12 +63,17 @@ endif()
4763

4864
if("${CMAKE_BUILD_PLATFORM}" STREQUAL "Device")
4965
include(utilities/cmake/firmware/firmware.cmake)
50-
else()
66+
else() # Simulator or default
5167
include(utilities/cmake/simulator/simulator.cmake)
5268
endif()
5369

5470
# Include nanopb source headers
55-
target_include_directories( ${EXECUTABLE} PRIVATE vendor/nanopb generated/proto vendor/mini-gmp vendor/poseidon/sources)
71+
target_include_directories( ${EXECUTABLE} PRIVATE
72+
vendor/nanopb
73+
generated/proto
74+
vendor/mini-gmp
75+
vendor/poseidon/sources
76+
)
5677

5778
# Enable support for dynamically allocated fields in nanopb
5879
# Ref: vendor/nanopb/pb.h

apps/btc_family/btc_pub_key.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@
7070
#include "coin_utils.h"
7171
#include "composable_app_queue.h"
7272
#include "curves.h"
73+
74+
#ifndef BTC_ONLY_BUILD
7375
#include "exchange_main.h"
76+
#endif // BTC_ONLY_BUILD
77+
7478
#include "reconstruct_wallet_flow.h"
7579
#include "status_api.h"
7680
#include "ui_core_confirm.h"
@@ -186,9 +190,10 @@ static bool validate_request_data(btc_get_public_key_request_t *request) {
186190
memcpy(data.params,
187191
request->initiate.wallet_id,
188192
sizeof(request->initiate.wallet_id));
193+
#ifndef BTC_ONLY_BUILD
189194
data.params[32] = EXCHANGE_FLOW_TAG_RECEIVE;
190-
191195
sign_address = exchange_app_validate_caq(data);
196+
#endif // BTC_ONLY_BUILD
192197

193198
return status;
194199
}
@@ -302,7 +307,9 @@ void btc_get_pub_key(btc_query_t *query) {
302307
memzero(seed, sizeof(seed));
303308

304309
if (sign_address) {
310+
#ifndef BTC_ONLY_BUILD
305311
exchange_sign_address(msg, sizeof(msg));
312+
#endif // BTC_ONLY_BUILD
306313
}
307314

308315
if (0 < length &&

apps/btc_family/btc_txn.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,11 @@
7878
#include "composable_app_queue.h"
7979
#include "constant_texts.h"
8080
#include "curves.h"
81+
82+
#ifndef BTC_ONLY_BUILD
8183
#include "exchange_main.h"
84+
#endif // BTC_ONLY_BUILD
85+
8286
#include "reconstruct_wallet_flow.h"
8387
#include "status_api.h"
8488
#include "ui_core_confirm.h"
@@ -308,16 +312,15 @@ static bool validate_request_data(const btc_sign_txn_request_t *request) {
308312
ERROR_DATA_FLOW_INVALID_DATA);
309313
status = false;
310314
}
311-
315+
#ifndef BTC_ONLY_BUILD
312316
caq_node_data_t data = {.applet_id = get_btc_app_desc()->id};
313-
314317
memzero(data.params, sizeof(data.params));
315318
memcpy(data.params,
316319
request->initiate.wallet_id,
317320
sizeof(request->initiate.wallet_id));
318321
data.params[32] = EXCHANGE_FLOW_TAG_SEND;
319-
320322
use_signature_verification = exchange_app_validate_caq(data);
323+
#endif // BTC_ONLY_BUILD
321324

322325
return status;
323326
}
@@ -588,10 +591,12 @@ static bool get_user_verification() {
588591
}
589592

590593
if (use_signature_verification) {
594+
#ifndef BTC_ONLY_BUILD
591595
if (!exchange_validate_stored_signature(address, sizeof(address))) {
592596
btc_send_error(ERROR_COMMON_ERROR_UNKNOWN_ERROR_TAG, status);
593597
return false;
594598
}
599+
#endif // BTC_ONLY_BUILD
595600
}
596601

597602
if (!core_scroll_page(title, address, btc_send_error) ||

common/coin_support/coin_specific_data.c

Lines changed: 73 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -168,78 +168,78 @@ static uint16_t prepare_coin_specific_data_tlv(
168168
coin_specific_data, &coin_data_len, &coin_data_addr);
169169
}
170170

171-
static void purge_coin_specific_data() {
172-
// Store all the unique data length and address in an array
173-
Coin_Type coin_type_arr[MAX_UNIQUE_COIN_COUNT] = {COIN_TYPE_NEAR};
174-
struct meta_data_t {
175-
Coin_Specific_Data_Struct data_struct;
176-
uint16_t data_length;
177-
uint32_t data_addr;
178-
} meta_data_arr[MAX_UNIQUE_COIN_COUNT * MAX_WALLETS_ALLOWED] = {0};
179-
180-
for (size_t coin_type_index = 0; coin_type_index < MAX_UNIQUE_COIN_COUNT;
181-
coin_type_index++) {
182-
for (size_t wallet_id_index = 0; wallet_id_index < MAX_WALLETS_ALLOWED;
183-
wallet_id_index++) {
184-
size_t current_index =
185-
coin_type_index * MAX_WALLETS_ALLOWED + wallet_id_index;
186-
187-
meta_data_arr[current_index].data_length = 0;
188-
meta_data_arr[current_index].data_addr = 0;
189-
190-
meta_data_arr[current_index].data_struct.coin_type =
191-
coin_type_arr[coin_type_index];
192-
memcpy(meta_data_arr[current_index].data_struct.wallet_id,
193-
get_wallet_id(wallet_id_index),
194-
WALLET_ID_SIZE);
195-
find_latest_coin_data(&meta_data_arr[current_index].data_struct,
196-
&meta_data_arr[current_index].data_length,
197-
&meta_data_arr[current_index].data_addr);
198-
199-
if (meta_data_arr[current_index].data_length > 0 &&
200-
FLASH_COIN_SPECIFIC_BASE_ADDRESS <
201-
meta_data_arr[current_index].data_addr &&
202-
meta_data_arr[current_index].data_addr +
203-
meta_data_arr[current_index].data_length <
204-
FLASH_END) {
205-
// Allocate a proper size array to store the data
206-
meta_data_arr[current_index].data_struct.coin_data =
207-
(uint8_t *)malloc(meta_data_arr[current_index].data_length);
208-
ASSERT(meta_data_arr[current_index].data_struct.coin_data != NULL);
209-
read_cmd(meta_data_arr[current_index].data_addr,
210-
(uint32_t *)meta_data_arr[current_index].data_struct.coin_data,
211-
meta_data_arr[current_index].data_length);
212-
}
213-
}
214-
}
215-
216-
// Erase everything from flash
217-
erase_flash_coin_specific_data();
218-
219-
// Write the data back to flash
220-
for (size_t i = 0; i < MAX_UNIQUE_COIN_COUNT * MAX_WALLETS_ALLOWED; i++) {
221-
if (meta_data_arr[i].data_length > 0 &&
222-
FLASH_COIN_SPECIFIC_BASE_ADDRESS < meta_data_arr[i].data_addr &&
223-
meta_data_arr[i].data_addr + meta_data_arr[i].data_length < FLASH_END) {
224-
uint16_t data_length =
225-
(3 + WALLET_ID_SIZE) + (3 + meta_data_arr[i].data_length);
226-
uint16_t tlv_size = 6 + data_length;
227-
tlv_size = GET_NEXT_MULTIPLE_OF_8(tlv_size);
228-
uint8_t tlv[tlv_size];
229-
memzero(tlv, sizeof(tlv));
230-
231-
uint16_t offset =
232-
prepare_coin_specific_data_tlv(&meta_data_arr[i].data_struct,
233-
meta_data_arr[i].data_length,
234-
tlv,
235-
data_length);
236-
write_cmd(
237-
FLASH_COIN_SPECIFIC_BASE_ADDRESS + offset, (uint32_t *)tlv, tlv_size);
238-
239-
free(meta_data_arr[i].data_struct.coin_data);
240-
}
241-
}
242-
}
171+
// static void purge_coin_specific_data() {
172+
// // Store all the unique data length and address in an array
173+
// Coin_Type coin_type_arr[MAX_UNIQUE_COIN_COUNT] = {COIN_TYPE_NEAR};
174+
// struct meta_data_t {
175+
// Coin_Specific_Data_Struct data_struct;
176+
// uint16_t data_length;
177+
// uint32_t data_addr;
178+
// } meta_data_arr[MAX_UNIQUE_COIN_COUNT * MAX_WALLETS_ALLOWED] = {0};
179+
180+
// for (size_t coin_type_index = 0; coin_type_index < MAX_UNIQUE_COIN_COUNT;
181+
// coin_type_index++) {
182+
// for (size_t wallet_id_index = 0; wallet_id_index < MAX_WALLETS_ALLOWED;
183+
// wallet_id_index++) {
184+
// size_t current_index =
185+
// coin_type_index * MAX_WALLETS_ALLOWED + wallet_id_index;
186+
187+
// meta_data_arr[current_index].data_length = 0;
188+
// meta_data_arr[current_index].data_addr = 0;
189+
190+
// meta_data_arr[current_index].data_struct.coin_type =
191+
// coin_type_arr[coin_type_index];
192+
// memcpy(meta_data_arr[current_index].data_struct.wallet_id,
193+
// get_wallet_id(wallet_id_index),
194+
// WALLET_ID_SIZE);
195+
// find_latest_coin_data(&meta_data_arr[current_index].data_struct,
196+
// &meta_data_arr[current_index].data_length,
197+
// &meta_data_arr[current_index].data_addr);
198+
199+
// if (meta_data_arr[current_index].data_length > 0 &&
200+
// FLASH_COIN_SPECIFIC_BASE_ADDRESS <
201+
// meta_data_arr[current_index].data_addr &&
202+
// meta_data_arr[current_index].data_addr +
203+
// meta_data_arr[current_index].data_length <
204+
// FLASH_END) {
205+
// // Allocate a proper size array to store the data
206+
// meta_data_arr[current_index].data_struct.coin_data =
207+
// (uint8_t *)malloc(meta_data_arr[current_index].data_length);
208+
// ASSERT(meta_data_arr[current_index].data_struct.coin_data != NULL);
209+
// read_cmd(meta_data_arr[current_index].data_addr,
210+
// (uint32_t *)meta_data_arr[current_index].data_struct.coin_data,
211+
// meta_data_arr[current_index].data_length);
212+
// }
213+
// }
214+
// }
215+
216+
// // Erase everything from flash
217+
// erase_flash_coin_specific_data();
218+
219+
// // Write the data back to flash
220+
// for (size_t i = 0; i < MAX_UNIQUE_COIN_COUNT * MAX_WALLETS_ALLOWED; i++) {
221+
// if (meta_data_arr[i].data_length > 0 &&
222+
// FLASH_COIN_SPECIFIC_BASE_ADDRESS < meta_data_arr[i].data_addr &&
223+
// meta_data_arr[i].data_addr + meta_data_arr[i].data_length < FLASH_END) {
224+
// uint16_t data_length =
225+
// (3 + WALLET_ID_SIZE) + (3 + meta_data_arr[i].data_length);
226+
// uint16_t tlv_size = 6 + data_length;
227+
// tlv_size = GET_NEXT_MULTIPLE_OF_8(tlv_size);
228+
// uint8_t tlv[tlv_size];
229+
// memzero(tlv, sizeof(tlv));
230+
231+
// uint16_t offset =
232+
// prepare_coin_specific_data_tlv(&meta_data_arr[i].data_struct,
233+
// meta_data_arr[i].data_length,
234+
// tlv,
235+
// data_length);
236+
// write_cmd(
237+
// FLASH_COIN_SPECIFIC_BASE_ADDRESS + offset, (uint32_t *)tlv, tlv_size);
238+
239+
// free(meta_data_arr[i].data_struct.coin_data);
240+
// }
241+
// }
242+
// }
243243

244244
static int store_coin_data(const uint8_t *tlv_data,
245245
uint16_t tlv_data_size,
@@ -250,7 +250,7 @@ static int store_coin_data(const uint8_t *tlv_data,
250250
(uint32_t *)tlv_data,
251251
tlv_data_size);
252252
} else {
253-
purge_coin_specific_data();
253+
// purge_coin_specific_data();
254254
uint16_t coin_data_len = 0;
255255
uint32_t coin_data_addr = 0;
256256
Coin_Specific_Data_Struct dummy = {0};

common/coin_support/coin_utils.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,20 @@
5858
*/
5959
#include "coin_utils.h"
6060

61-
#include "arbitrum.h"
62-
#include "avalanche.h"
63-
#include "bsc.h"
64-
#include "etc.h"
65-
#include "fantom.h"
66-
#include "harmony.h"
67-
#include "near.h"
68-
#include "optimism.h"
69-
#include "polygon.h"
7061
#include "segwit_addr.h"
71-
#include "solana.h"
62+
63+
#ifndef BTC_ONLY_BUILD
64+
#include "arbitrum.h"
65+
#include "avalanche.h"
66+
#include "bsc.h"
67+
#include "etc.h"
68+
#include "fantom.h"
69+
#include "harmony.h"
70+
#include "near.h"
71+
#include "optimism.h"
72+
#include "polygon.h"
73+
#include "solana.h"
74+
#endif
7275

7376
void s_memcpy(uint8_t *dst,
7477
const uint8_t *src,

common/coin_support/coin_utils.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
/// BTC TEST coin index
4141
#define BTC_TEST (BITCOIN + 0x01)
4242

43+
#ifndef BTC_ONLY_BUILD
4344
/// LITECOIN coin index
4445
#define LITCOIN (BITCOIN + 0x02)
4546
#define LTC_COIN_VERSION 0x00000000
@@ -61,7 +62,7 @@
6162

6263
/// SOLANA coin index
6364
#define SOLANA (BITCOIN + 0x1F5)
64-
65+
#endif
6566
/// NATIVE SEGWIT purpose id
6667
#define NATIVE_SEGWIT 0x80000054
6768

@@ -71,6 +72,7 @@
7172
typedef enum Coin_Type {
7273
COIN_TYPE_BITCOIN = 0x01,
7374
COIN_TYPE_BTC_TEST = 0x02,
75+
#ifndef BTC_ONLY_BUILD
7476
COIN_TYPE_LITECOIN = 0x03,
7577
COIN_TYPE_DOGE = 0x04,
7678
COIN_TYPE_DASH = 0x05,
@@ -85,6 +87,7 @@ typedef enum Coin_Type {
8587
COIN_TYPE_HARMONY = 0x0E,
8688
COIN_TYPE_ETHEREUM_CLASSIC = 0x0f,
8789
COIN_TYPE_ARBITRUM = 0x10,
90+
#endif
8891
} Coin_Type;
8992

9093
#pragma pack(push, 1)

common/coin_support/eth.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
#include "../crypto/secp256k1.h"
2929
#include "../crypto/sha2.h"
3030
#include "../crypto/sha3.h"
31-
#include "abi.h"
31+
#include "../common/coin_support/eth_sign_data/abi.h"
3232
#include "coin_utils.h"
33-
#include "eip712.pb.h"
34-
#include "evm_txn_helpers.h"
33+
#include "../common/coin_support/eth_sign_data/eip712.pb.h"
34+
#include "../apps/evm_family/evm_txn_helpers.h"
3535

3636
#define ETHEREUM_MAINNET_CHAIN 1
3737

0 commit comments

Comments
 (0)