Skip to content

Commit dabb0ae

Browse files
committed
Add coin configuartion to swap params
1 parent 774f60c commit dabb0ae

File tree

1 file changed

+65
-12
lines changed
  • ledger_device_sdk/src/libcall

1 file changed

+65
-12
lines changed

ledger_device_sdk/src/libcall/swap.rs

Lines changed: 65 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,23 @@ use ledger_secure_sdk_sys::{
99
const DPATH_STAGE_SIZE: usize = 16;
1010
const ADDRESS_BUF_SIZE: usize = 64;
1111
const AMOUNT_BUF_SIZE: usize = 16;
12+
const DEFAULT_COIN_CONFIG_BUF_SIZE: usize = 16;
1213

13-
pub struct CheckAddressParams {
14+
pub struct CheckAddressParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE> {
15+
pub coin_config: [u8; COIN_CONFIG_BUF_SIZE],
16+
pub coin_config_len: usize,
1417
pub dpath: [u8; DPATH_STAGE_SIZE * 4],
1518
pub dpath_len: usize,
1619
pub ref_address: [u8; ADDRESS_BUF_SIZE],
1720
pub ref_address_len: usize,
1821
pub result: *mut i32,
1922
}
2023

21-
impl Default for CheckAddressParams {
24+
impl<const COIN_CONFIG_BUF_SIZE: usize> Default for CheckAddressParams<COIN_CONFIG_BUF_SIZE> {
2225
fn default() -> Self {
2326
CheckAddressParams {
27+
coin_config: [0; COIN_CONFIG_BUF_SIZE],
28+
coin_config_len: 0,
2429
dpath: [0; DPATH_STAGE_SIZE * 4],
2530
dpath_len: 0,
2631
ref_address: [0; ADDRESS_BUF_SIZE],
@@ -30,16 +35,20 @@ impl Default for CheckAddressParams {
3035
}
3136
}
3237

33-
pub struct PrintableAmountParams {
38+
pub struct PrintableAmountParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE> {
39+
pub coin_config: [u8; COIN_CONFIG_BUF_SIZE],
40+
pub coin_config_len: usize,
3441
pub amount: [u8; AMOUNT_BUF_SIZE],
3542
pub amount_len: usize,
3643
pub amount_str: *mut i8,
3744
pub is_fee: bool,
3845
}
3946

40-
impl Default for PrintableAmountParams {
47+
impl<const COIN_CONFIG_BUF_SIZE: usize> Default for PrintableAmountParams<COIN_CONFIG_BUF_SIZE> {
4148
fn default() -> Self {
4249
PrintableAmountParams {
50+
coin_config: [0; COIN_CONFIG_BUF_SIZE],
51+
coin_config_len: 0,
4352
amount: [0; AMOUNT_BUF_SIZE],
4453
amount_len: 0,
4554
amount_str: core::ptr::null_mut(),
@@ -48,7 +57,9 @@ impl Default for PrintableAmountParams {
4857
}
4958
}
5059

51-
pub struct CreateTxParams {
60+
pub struct CreateTxParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE> {
61+
pub coin_config: [u8; COIN_CONFIG_BUF_SIZE],
62+
pub coin_config_len: usize,
5263
pub amount: [u8; AMOUNT_BUF_SIZE],
5364
pub amount_len: usize,
5465
pub fee_amount: [u8; AMOUNT_BUF_SIZE],
@@ -58,9 +69,11 @@ pub struct CreateTxParams {
5869
pub result: *mut u8,
5970
}
6071

61-
impl Default for CreateTxParams {
72+
impl<const COIN_CONFIG_BUF_SIZE: usize> Default for CreateTxParams<COIN_CONFIG_BUF_SIZE> {
6273
fn default() -> Self {
6374
CreateTxParams {
75+
coin_config: [0; COIN_CONFIG_BUF_SIZE],
76+
coin_config_len: 0,
6477
amount: [0; AMOUNT_BUF_SIZE],
6578
amount_len: 0,
6679
fee_amount: [0; AMOUNT_BUF_SIZE],
@@ -72,7 +85,9 @@ impl Default for CreateTxParams {
7285
}
7386
}
7487

75-
pub fn get_check_address_params(arg0: u32) -> CheckAddressParams {
88+
pub fn get_check_address_params<const COIN_CONFIG_BUF_SIZE: usize>(
89+
arg0: u32,
90+
) -> CheckAddressParams<COIN_CONFIG_BUF_SIZE> {
7691
debug_print("=> get_check_address_params\n");
7792

7893
let mut libarg: libargs_t = libargs_t::default();
@@ -88,7 +103,18 @@ pub fn get_check_address_params(arg0: u32) -> CheckAddressParams {
88103
let params: check_address_parameters_t =
89104
unsafe { *(libarg.__bindgen_anon_1.check_address as *const check_address_parameters_t) };
90105

91-
let mut check_address_params: CheckAddressParams = Default::default();
106+
let mut check_address_params: CheckAddressParams<COIN_CONFIG_BUF_SIZE> = Default::default();
107+
108+
debug_print("==> GET_COIN_CONFIG_LENGTH\n");
109+
check_address_params.coin_config_len = params.coin_configuration_length as usize;
110+
111+
debug_print("==> GET_COIN_CONFIG \n");
112+
unsafe {
113+
params.coin_configuration.copy_to_nonoverlapping(
114+
check_address_params.coin_config.as_mut_ptr(),
115+
check_address_params.coin_config_len,
116+
);
117+
}
92118

93119
debug_print("==> GET_DPATH_LENGTH\n");
94120
check_address_params.dpath_len =
@@ -117,7 +143,9 @@ pub fn get_check_address_params(arg0: u32) -> CheckAddressParams {
117143
check_address_params
118144
}
119145

120-
pub fn get_printable_amount_params(arg0: u32) -> PrintableAmountParams {
146+
pub fn get_printable_amount_params<const COIN_CONFIG_BUF_SIZE: usize>(
147+
arg0: u32,
148+
) -> PrintableAmountParams<COIN_CONFIG_BUF_SIZE> {
121149
debug_print("=> get_printable_amount_params\n");
122150

123151
let mut libarg: libargs_t = libargs_t::default();
@@ -134,7 +162,19 @@ pub fn get_printable_amount_params(arg0: u32) -> PrintableAmountParams {
134162
*(libarg.__bindgen_anon_1.get_printable_amount as *const get_printable_amount_parameters_t)
135163
};
136164

137-
let mut printable_amount_params: PrintableAmountParams = Default::default();
165+
let mut printable_amount_params: PrintableAmountParams<COIN_CONFIG_BUF_SIZE> =
166+
Default::default();
167+
168+
debug_print("==> GET_COIN_CONFIG_LENGTH\n");
169+
printable_amount_params.coin_config_len = params.coin_configuration_length as usize;
170+
171+
debug_print("==> GET_COIN_CONFIG \n");
172+
unsafe {
173+
params.coin_configuration.copy_to_nonoverlapping(
174+
printable_amount_params.coin_config.as_mut_ptr(),
175+
printable_amount_params.coin_config_len,
176+
);
177+
}
138178

139179
debug_print("==> GET_IS_FEE\n");
140180
printable_amount_params.is_fee = params.is_fee == true;
@@ -162,7 +202,9 @@ extern "C" {
162202
fn c_boot_std();
163203
}
164204

165-
pub fn sign_tx_params(arg0: u32) -> CreateTxParams {
205+
pub fn sign_tx_params<const COIN_CONFIG_BUF_SIZE: usize>(
206+
arg0: u32,
207+
) -> CreateTxParams<COIN_CONFIG_BUF_SIZE> {
166208
debug_print("=> sign_tx_params\n");
167209

168210
let mut libarg: libargs_t = libargs_t::default();
@@ -179,7 +221,18 @@ pub fn sign_tx_params(arg0: u32) -> CreateTxParams {
179221
*(libarg.__bindgen_anon_1.create_transaction as *const create_transaction_parameters_t)
180222
};
181223

182-
let mut create_tx_params: CreateTxParams = Default::default();
224+
let mut create_tx_params: CreateTxParams<COIN_CONFIG_BUF_SIZE> = Default::default();
225+
226+
debug_print("==> GET_COIN_CONFIG_LENGTH\n");
227+
create_tx_params.coin_config_len = params.coin_configuration_length as usize;
228+
229+
debug_print("==> GET_COIN_CONFIG \n");
230+
unsafe {
231+
params.coin_configuration.copy_to_nonoverlapping(
232+
create_tx_params.coin_config.as_mut_ptr(),
233+
create_tx_params.coin_config_len,
234+
);
235+
}
183236

184237
debug_print("==> GET_AMOUNT\n");
185238
create_tx_params.amount_len = AMOUNT_BUF_SIZE.min(params.amount_length as usize);

0 commit comments

Comments
 (0)