Skip to content

Commit ec37bef

Browse files
authored
Merge pull request #258 from Fingolfin69/bn-swap-params-generic-address-len
feat: Add const generic address buffer size to Swap params
2 parents 850f92c + 296bf0c commit ec37bef

File tree

3 files changed

+64
-24
lines changed

3 files changed

+64
-24
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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.22.4"
3+
version = "1.22.5"
44
authors = ["yhql", "yogh333", "agrojean-ledger", "kingofpayne"]
55
edition = "2021"
66
license.workspace = true

ledger_device_sdk/src/libcall/swap.rs

Lines changed: 62 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,16 @@ use ledger_secure_sdk_sys::{
66
libargs_s__bindgen_ty_1, libargs_t, MAX_PRINTABLE_AMOUNT_SIZE,
77
};
88

9+
pub const DEFAULT_COIN_CONFIG_BUF_SIZE: usize = 16;
10+
pub const DEFAULT_ADDRESS_BUF_SIZE: usize = 64;
11+
912
const DPATH_STAGE_SIZE: usize = 16;
10-
const ADDRESS_BUF_SIZE: usize = 64;
1113
const AMOUNT_BUF_SIZE: usize = 16;
12-
const DEFAULT_COIN_CONFIG_BUF_SIZE: usize = 16;
1314

14-
pub struct CheckAddressParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE> {
15+
pub struct CheckAddressParams<
16+
const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE,
17+
const ADDRESS_BUF_SIZE: usize = DEFAULT_ADDRESS_BUF_SIZE,
18+
> {
1519
pub coin_config: [u8; COIN_CONFIG_BUF_SIZE],
1620
pub coin_config_len: usize,
1721
pub dpath: [u8; DPATH_STAGE_SIZE * 4],
@@ -21,7 +25,9 @@ pub struct CheckAddressParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_C
2125
pub result: *mut i32,
2226
}
2327

24-
impl<const COIN_CONFIG_BUF_SIZE: usize> Default for CheckAddressParams<COIN_CONFIG_BUF_SIZE> {
28+
impl<const COIN_CONFIG_BUF_SIZE: usize, const ADDRESS_BUF_SIZE: usize> Default
29+
for CheckAddressParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE>
30+
{
2531
fn default() -> Self {
2632
CheckAddressParams {
2733
coin_config: [0; COIN_CONFIG_BUF_SIZE],
@@ -35,7 +41,11 @@ impl<const COIN_CONFIG_BUF_SIZE: usize> Default for CheckAddressParams<COIN_CONF
3541
}
3642
}
3743

38-
pub struct PrintableAmountParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE> {
44+
pub struct PrintableAmountParams<
45+
const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE,
46+
// Unused const generic paramer here, to allow type inference in `swap_return` fn
47+
const ADDRESS_BUF_SIZE: usize = DEFAULT_ADDRESS_BUF_SIZE,
48+
> {
3949
pub coin_config: [u8; COIN_CONFIG_BUF_SIZE],
4050
pub coin_config_len: usize,
4151
pub amount: [u8; AMOUNT_BUF_SIZE],
@@ -44,7 +54,9 @@ pub struct PrintableAmountParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COI
4454
pub is_fee: bool,
4555
}
4656

47-
impl<const COIN_CONFIG_BUF_SIZE: usize> Default for PrintableAmountParams<COIN_CONFIG_BUF_SIZE> {
57+
impl<const COIN_CONFIG_BUF_SIZE: usize, const ADDRESS_BUF_SIZE: usize> Default
58+
for PrintableAmountParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE>
59+
{
4860
fn default() -> Self {
4961
PrintableAmountParams {
5062
coin_config: [0; COIN_CONFIG_BUF_SIZE],
@@ -57,7 +69,10 @@ impl<const COIN_CONFIG_BUF_SIZE: usize> Default for PrintableAmountParams<COIN_C
5769
}
5870
}
5971

60-
pub struct CreateTxParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE> {
72+
pub struct CreateTxParams<
73+
const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE,
74+
const ADDRESS_BUF_SIZE: usize = DEFAULT_ADDRESS_BUF_SIZE,
75+
> {
6176
pub coin_config: [u8; COIN_CONFIG_BUF_SIZE],
6277
pub coin_config_len: usize,
6378
pub amount: [u8; AMOUNT_BUF_SIZE],
@@ -69,7 +84,9 @@ pub struct CreateTxParams<const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFI
6984
pub result: *mut u8,
7085
}
7186

72-
impl<const COIN_CONFIG_BUF_SIZE: usize> Default for CreateTxParams<COIN_CONFIG_BUF_SIZE> {
87+
impl<const COIN_CONFIG_BUF_SIZE: usize, const ADDRESS_BUF_SIZE: usize> Default
88+
for CreateTxParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE>
89+
{
7390
fn default() -> Self {
7491
CreateTxParams {
7592
coin_config: [0; COIN_CONFIG_BUF_SIZE],
@@ -85,9 +102,12 @@ impl<const COIN_CONFIG_BUF_SIZE: usize> Default for CreateTxParams<COIN_CONFIG_B
85102
}
86103
}
87104

88-
pub fn get_check_address_params<const COIN_CONFIG_BUF_SIZE: usize>(
105+
pub fn get_check_address_params<
106+
const COIN_CONFIG_BUF_SIZE: usize,
107+
const ADDRESS_BUF_SIZE: usize,
108+
>(
89109
arg0: u32,
90-
) -> CheckAddressParams<COIN_CONFIG_BUF_SIZE> {
110+
) -> CheckAddressParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE> {
91111
debug_print("=> get_check_address_params\n");
92112

93113
let mut libarg: libargs_t = libargs_t::default();
@@ -103,7 +123,8 @@ pub fn get_check_address_params<const COIN_CONFIG_BUF_SIZE: usize>(
103123
let params: check_address_parameters_t =
104124
unsafe { *(libarg.__bindgen_anon_1.check_address as *const check_address_parameters_t) };
105125

106-
let mut check_address_params: CheckAddressParams<COIN_CONFIG_BUF_SIZE> = Default::default();
126+
let mut check_address_params: CheckAddressParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE> =
127+
Default::default();
107128

108129
debug_print("==> GET_COIN_CONFIG_LENGTH\n");
109130
check_address_params.coin_config_len = params.coin_configuration_length as usize;
@@ -145,9 +166,12 @@ pub fn get_check_address_params<const COIN_CONFIG_BUF_SIZE: usize>(
145166
check_address_params
146167
}
147168

148-
pub fn get_printable_amount_params<const COIN_CONFIG_BUF_SIZE: usize>(
169+
pub fn get_printable_amount_params<
170+
const COIN_CONFIG_BUF_SIZE: usize,
171+
const ADDRESS_BUF_SIZE: usize,
172+
>(
149173
arg0: u32,
150-
) -> PrintableAmountParams<COIN_CONFIG_BUF_SIZE> {
174+
) -> PrintableAmountParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE> {
151175
debug_print("=> get_printable_amount_params\n");
152176

153177
let mut libarg: libargs_t = libargs_t::default();
@@ -164,7 +188,7 @@ pub fn get_printable_amount_params<const COIN_CONFIG_BUF_SIZE: usize>(
164188
*(libarg.__bindgen_anon_1.get_printable_amount as *const get_printable_amount_parameters_t)
165189
};
166190

167-
let mut printable_amount_params: PrintableAmountParams<COIN_CONFIG_BUF_SIZE> =
191+
let mut printable_amount_params: PrintableAmountParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE> =
168192
Default::default();
169193

170194
debug_print("==> GET_COIN_CONFIG_LENGTH\n");
@@ -206,9 +230,9 @@ extern "C" {
206230
fn c_boot_std();
207231
}
208232

209-
pub fn sign_tx_params<const COIN_CONFIG_BUF_SIZE: usize>(
233+
pub fn sign_tx_params<const COIN_CONFIG_BUF_SIZE: usize, const ADDRESS_BUF_SIZE: usize>(
210234
arg0: u32,
211-
) -> CreateTxParams<COIN_CONFIG_BUF_SIZE> {
235+
) -> CreateTxParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE> {
212236
debug_print("=> sign_tx_params\n");
213237

214238
let mut libarg: libargs_t = libargs_t::default();
@@ -225,7 +249,8 @@ pub fn sign_tx_params<const COIN_CONFIG_BUF_SIZE: usize>(
225249
*(libarg.__bindgen_anon_1.create_transaction as *const create_transaction_parameters_t)
226250
};
227251

228-
let mut create_tx_params: CreateTxParams<COIN_CONFIG_BUF_SIZE> = Default::default();
252+
let mut create_tx_params: CreateTxParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE> =
253+
Default::default();
229254

230255
debug_print("==> GET_COIN_CONFIG_LENGTH\n");
231256
create_tx_params.coin_config_len = params.coin_configuration_length as usize;
@@ -279,13 +304,28 @@ pub fn sign_tx_params<const COIN_CONFIG_BUF_SIZE: usize>(
279304
create_tx_params
280305
}
281306

282-
pub enum SwapResult<'a> {
283-
CheckAddressResult(&'a mut CheckAddressParams, i32),
284-
PrintableAmountResult(&'a mut PrintableAmountParams, &'a str),
285-
CreateTxResult(&'a mut CreateTxParams, u8),
307+
pub enum SwapResult<
308+
'a,
309+
const COIN_CONFIG_BUF_SIZE: usize = DEFAULT_COIN_CONFIG_BUF_SIZE,
310+
const ADDRESS_BUF_SIZE: usize = DEFAULT_ADDRESS_BUF_SIZE,
311+
> {
312+
CheckAddressResult(
313+
&'a mut CheckAddressParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE>,
314+
i32,
315+
),
316+
PrintableAmountResult(
317+
&'a mut PrintableAmountParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE>,
318+
&'a str,
319+
),
320+
CreateTxResult(
321+
&'a mut CreateTxParams<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE>,
322+
u8,
323+
),
286324
}
287325

288-
pub fn swap_return(res: SwapResult) {
326+
pub fn swap_return<const COIN_CONFIG_BUF_SIZE: usize, const ADDRESS_BUF_SIZE: usize>(
327+
res: SwapResult<COIN_CONFIG_BUF_SIZE, ADDRESS_BUF_SIZE>,
328+
) {
289329
match res {
290330
SwapResult::CheckAddressResult(&mut ref p, r) => {
291331
unsafe { *(p.result) = r };

0 commit comments

Comments
 (0)