Skip to content

Commit 17fa220

Browse files
authored
Merge pull request #246 from Fingolfin69/bn-add-coin-config-to-swap-params
Add coin config to swap params
2 parents 774f60c + 0680588 commit 17fa220

File tree

2 files changed

+70
-13
lines changed

2 files changed

+70
-13
lines changed

ledger_device_sdk/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ledger_device_sdk"
3-
version = "1.21.2"
3+
version = "1.21.3"
44
authors = ["yhql", "yogh333", "agrojean-ledger", "kingofpayne"]
55
edition = "2021"
66
license.workspace = true

ledger_device_sdk/src/libcall/swap.rs

Lines changed: 69 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,20 @@ 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
116+
.coin_config_len
117+
.min(COIN_CONFIG_BUF_SIZE),
118+
);
119+
}
92120

93121
debug_print("==> GET_DPATH_LENGTH\n");
94122
check_address_params.dpath_len =
@@ -117,7 +145,9 @@ pub fn get_check_address_params(arg0: u32) -> CheckAddressParams {
117145
check_address_params
118146
}
119147

120-
pub fn get_printable_amount_params(arg0: u32) -> PrintableAmountParams {
148+
pub fn get_printable_amount_params<const COIN_CONFIG_BUF_SIZE: usize>(
149+
arg0: u32,
150+
) -> PrintableAmountParams<COIN_CONFIG_BUF_SIZE> {
121151
debug_print("=> get_printable_amount_params\n");
122152

123153
let mut libarg: libargs_t = libargs_t::default();
@@ -134,7 +164,21 @@ pub fn get_printable_amount_params(arg0: u32) -> PrintableAmountParams {
134164
*(libarg.__bindgen_anon_1.get_printable_amount as *const get_printable_amount_parameters_t)
135165
};
136166

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

139183
debug_print("==> GET_IS_FEE\n");
140184
printable_amount_params.is_fee = params.is_fee == true;
@@ -162,7 +206,9 @@ extern "C" {
162206
fn c_boot_std();
163207
}
164208

165-
pub fn sign_tx_params(arg0: u32) -> CreateTxParams {
209+
pub fn sign_tx_params<const COIN_CONFIG_BUF_SIZE: usize>(
210+
arg0: u32,
211+
) -> CreateTxParams<COIN_CONFIG_BUF_SIZE> {
166212
debug_print("=> sign_tx_params\n");
167213

168214
let mut libarg: libargs_t = libargs_t::default();
@@ -179,7 +225,18 @@ pub fn sign_tx_params(arg0: u32) -> CreateTxParams {
179225
*(libarg.__bindgen_anon_1.create_transaction as *const create_transaction_parameters_t)
180226
};
181227

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

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

0 commit comments

Comments
 (0)