diff --git a/.github/workflows/check_csdk_build_parameters.yml b/.github/workflows/check_csdk_build_parameters.yml index 96e187d2..f3f9c4ee 100644 --- a/.github/workflows/check_csdk_build_parameters.yml +++ b/.github/workflows/check_csdk_build_parameters.yml @@ -13,7 +13,7 @@ jobs: check_csdk_build_parameters: runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest + image: jcaporossi/test-devtools:latest strategy: matrix: target: ["nanox", "nanosplus", "stax", "flex", "apex_p"] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 599b1701..e4afca87 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: name: Run static analysis runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest + image: jcaporossi/test-devtools:latest strategy: matrix: target: ["nanox", "nanosplus", "stax", "flex", "apex_p"] @@ -35,7 +35,7 @@ jobs: name: Check code formatting runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest + image: jcaporossi/test-devtools:latest steps: - name: Clone uses: actions/checkout@v4 @@ -47,7 +47,7 @@ jobs: name: Build SDK runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest + image: jcaporossi/test-devtools:latest strategy: matrix: target: ["nanox", "nanosplus", "stax", "flex", "apex_p"] @@ -66,7 +66,7 @@ jobs: name: Run unit and integration tests runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest + image: jcaporossi/test-devtools:latest strategy: matrix: target: ["nanox", "nanosplus", "stax", "flex", "apex_p"] diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 60809c62..09f5784c 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -20,7 +20,7 @@ jobs: contents: read runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-dev-tools:latest + image: jcaporossi/test-devtools:latest steps: - name: Clone uses: actions/checkout@v4 diff --git a/.github/workflows/reusable_build_all_apps.yml b/.github/workflows/reusable_build_all_apps.yml index f8fd8db3..39e69b21 100644 --- a/.github/workflows/reusable_build_all_apps.yml +++ b/.github/workflows/reusable_build_all_apps.yml @@ -77,7 +77,7 @@ jobs: include: ${{ fromJSON(needs.retrieve-rust-apps.outputs.rust_apps) }} runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest + image: jcaporossi/test-devtools:latest steps: - name: Install ledgered run: pip install ledgered --break-system-packages diff --git a/ledger_device_sdk/src/ecc.rs b/ledger_device_sdk/src/ecc.rs index 7730ab16..0976e5ae 100644 --- a/ledger_device_sdk/src/ecc.rs +++ b/ledger_device_sdk/src/ecc.rs @@ -189,7 +189,7 @@ impl ECPrivateKey { /// [here](https://blog.rust-lang.org/inside-rust/2021/09/06/Splitting-const-generics.html#featuregeneric_const_exprs) pub fn public_key(&self) -> Result, CxError> where - [(); Self::P]:, + [(); Self::P]: Sized, { let mut pubkey = ECPublicKey::<{ Self::P }, TY>::new(self.curve); let err = unsafe { diff --git a/ledger_device_sdk/src/io_legacy.rs b/ledger_device_sdk/src/io_legacy.rs index 80aa84a5..fd22a693 100644 --- a/ledger_device_sdk/src/io_legacy.rs +++ b/ledger_device_sdk/src/io_legacy.rs @@ -472,7 +472,7 @@ impl Comm { G_ux_params.u.pairing_request.pairing_info_len = (_len - 2) as u32; for i in 0..G_ux_params.u.pairing_request.pairing_info_len as usize { G_ux_params.u.pairing_request.pairing_info[i as usize] = - seph_buffer[5 + i] as i8; + seph_buffer[5 + i] as core::ffi::c_char; } G_ux_params.u.pairing_request.pairing_info [G_ux_params.u.pairing_request.pairing_info_len as usize] = 0; diff --git a/ledger_device_sdk/src/libcall/swap.rs b/ledger_device_sdk/src/libcall/swap.rs index 8b325e76..86bf1a29 100644 --- a/ledger_device_sdk/src/libcall/swap.rs +++ b/ledger_device_sdk/src/libcall/swap.rs @@ -205,7 +205,8 @@ pub fn get_check_address_params< } debug_print("==> GET_REF_ADDRESS\n"); - let (address, address_len) = read_c_string::(params.address_to_check); + let (address, address_len) = + read_c_string::(params.address_to_check as *const i8); check_address_params.ref_address = address; check_address_params.ref_address_len = address_len; @@ -274,7 +275,7 @@ pub fn get_printable_amount_params< debug_print("==> GET_AMOUNT_STR\n"); printable_amount_params.amount_str = unsafe { &(*(libarg.__bindgen_anon_1.get_printable_amount as *mut get_printable_amount_parameters_t)) - .printable_amount as *const i8 as *mut i8 + .printable_amount as *const core::ffi::c_char as *mut i8 }; printable_amount_params @@ -340,13 +341,15 @@ pub fn sign_tx_params< } debug_print("==> GET_DESTINATION_ADDRESS\n"); - let (address, address_len) = read_c_string::(params.destination_address); + let (address, address_len) = + read_c_string::(params.destination_address as *const i8); create_tx_params.dest_address = address; create_tx_params.dest_address_len = address_len; debug_print("==> GET_DESTINATION_ADDRESS_EXTRA_ID\n"); - let (extra_id, extra_id_len) = - read_c_string::(params.destination_address_extra_id); + let (extra_id, extra_id_len) = read_c_string::( + params.destination_address_extra_id as *const i8, + ); create_tx_params.dest_address_extra_id = extra_id; create_tx_params.dest_address_extra_id_len = extra_id_len; diff --git a/ledger_device_sdk/src/nbgl.rs b/ledger_device_sdk/src/nbgl.rs index 335233a1..a6d17903 100644 --- a/ledger_device_sdk/src/nbgl.rs +++ b/ledger_device_sdk/src/nbgl.rs @@ -228,8 +228,8 @@ impl From<&Field<'_>> for CField { impl From<&CField> for nbgl_contentTagValue_t { fn from(field: &CField) -> nbgl_contentTagValue_t { nbgl_contentTagValue_t { - item: (*field).name.as_ptr() as *const i8, - value: (*field).value.as_ptr() as *const i8, + item: (*field).name.as_ptr() as *const ::core::ffi::c_char, + value: (*field).value.as_ptr() as *const ::core::ffi::c_char, ..Default::default() } } diff --git a/ledger_device_sdk/src/nbgl/nbgl_advance_review.rs b/ledger_device_sdk/src/nbgl/nbgl_advance_review.rs index 0db80fe8..b22046bc 100644 --- a/ledger_device_sdk/src/nbgl/nbgl_advance_review.rs +++ b/ledger_device_sdk/src/nbgl/nbgl_advance_review.rs @@ -161,10 +161,10 @@ impl<'a> NbglAdvanceReview<'a> { let warning_details = match &self.warning_details_type { Some(w) => nbgl_warning_t { predefinedSet: (1u32 << W3C_RISK_DETECTED_WARN), - dAppProvider: w.dapp_provider_name.as_ptr() as *const i8, - reportUrl: w.report_url.as_ptr() as *const i8, - reportProvider: w.report_provider.as_ptr() as *const i8, - providerMessage: w.provider_message.as_ptr() as *const i8, + dAppProvider: w.dapp_provider_name.as_ptr() as *const ::core::ffi::c_char, + reportUrl: w.report_url.as_ptr() as *const ::core::ffi::c_char, + reportProvider: w.report_provider.as_ptr() as *const ::core::ffi::c_char, + providerMessage: w.provider_message.as_ptr() as *const ::core::ffi::c_char, ..Default::default() }, None => nbgl_warning_t::default(), diff --git a/ledger_device_sdk/src/nbgl/nbgl_generic_settings.rs b/ledger_device_sdk/src/nbgl/nbgl_generic_settings.rs index 0e451d09..89028bdd 100644 --- a/ledger_device_sdk/src/nbgl/nbgl_generic_settings.rs +++ b/ledger_device_sdk/src/nbgl/nbgl_generic_settings.rs @@ -87,8 +87,8 @@ impl NbglGenericSettings { } self.info_list = Some(nbgl_contentInfoList_t { - infoTypes: self.info.fields_ptr[..].as_ptr(), - infoContents: self.info.values_ptr[..].as_ptr(), + infoTypes: self.info.fields_ptr[..].as_ptr() as *const *const ::core::ffi::c_char, + infoContents: self.info.values_ptr[..].as_ptr() as *const *const ::core::ffi::c_char, nbInfos: fields_values.len() as u8, infoExtensions: core::ptr::null(), token: 0, diff --git a/ledger_device_sdk/src/nbgl/nbgl_review.rs b/ledger_device_sdk/src/nbgl/nbgl_review.rs index e8f5f33f..ab75a909 100644 --- a/ledger_device_sdk/src/nbgl/nbgl_review.rs +++ b/ledger_device_sdk/src/nbgl/nbgl_review.rs @@ -113,8 +113,8 @@ impl<'a> NbglReview<'a> { let mut tag_value_array: Vec = Vec::new(); for field in v.iter() { let val = nbgl_contentTagValue_t { - item: field.name.as_ptr() as *const i8, - value: field.value.as_ptr() as *const i8, + item: field.name.as_ptr() as *const ::core::ffi::c_char, + value: field.value.as_ptr() as *const ::core::ffi::c_char, ..Default::default() }; tag_value_array.push(val); diff --git a/ledger_device_sdk/src/nbgl/nbgl_streaming_review.rs b/ledger_device_sdk/src/nbgl/nbgl_streaming_review.rs index 58ac9f4c..4c2a4d37 100644 --- a/ledger_device_sdk/src/nbgl/nbgl_streaming_review.rs +++ b/ledger_device_sdk/src/nbgl/nbgl_streaming_review.rs @@ -145,10 +145,13 @@ impl NbglStreamingReview { Some(w) => { let warning_details = nbgl_warning_t { predefinedSet: (1u32 << W3C_RISK_DETECTED_WARN), - dAppProvider: w.dapp_provider_name.as_ptr() as *const i8, - reportUrl: w.report_url.as_ptr() as *const i8, - reportProvider: w.report_provider.as_ptr() as *const i8, - providerMessage: w.provider_message.as_ptr() as *const i8, + dAppProvider: w.dapp_provider_name.as_ptr() + as *const ::core::ffi::c_char, + reportUrl: w.report_url.as_ptr() as *const ::core::ffi::c_char, + reportProvider: w.report_provider.as_ptr() + as *const ::core::ffi::c_char, + providerMessage: w.provider_message.as_ptr() + as *const ::core::ffi::c_char, ..Default::default() }; nbgl_useCaseAdvancedReviewStreamingStart( @@ -218,8 +221,8 @@ impl NbglStreamingReview { let mut tag_value_array: Vec = Vec::new(); for field in v.iter() { let val = nbgl_contentTagValue_t { - item: field.name.as_ptr() as *const i8, - value: field.value.as_ptr() as *const i8, + item: field.name.as_ptr() as *const ::core::ffi::c_char, + value: field.value.as_ptr() as *const ::core::ffi::c_char, ..Default::default() }; tag_value_array.push(val); @@ -271,8 +274,8 @@ impl NbglStreamingReview { let mut tag_value_array: Vec = Vec::new(); for field in v.iter() { let val = nbgl_contentTagValue_t { - item: field.name.as_ptr() as *const i8, - value: field.value.as_ptr() as *const i8, + item: field.name.as_ptr() as *const ::core::ffi::c_char, + value: field.value.as_ptr() as *const ::core::ffi::c_char, ..Default::default() }; tag_value_array.push(val); diff --git a/ledger_secure_sdk_sys/devices/apex_p/apex_p.json b/ledger_secure_sdk_sys/devices/apex_p/apex_p.json index f4931197..38cf2708 100644 --- a/ledger_secure_sdk_sys/devices/apex_p/apex_p.json +++ b/ledger_secure_sdk_sys/devices/apex_p/apex_p.json @@ -9,6 +9,7 @@ "linker": "link_wrap.sh", "linker-flavor": "ld.lld", "llvm-target": "thumbv8m.main-none-eabi", + "llvm-floatabi": "soft", "max-atomic-width": 32, "panic-strategy": "abort", "pre-link-args": { @@ -23,7 +24,7 @@ }, "relocation-model": "ropi-rwpi", "singlethread": true, - "target-pointer-width": "32", + "target-pointer-width": 32, "os": "apex_p", "target-family": [ "bolos" ] } diff --git a/ledger_secure_sdk_sys/devices/flex/flex.json b/ledger_secure_sdk_sys/devices/flex/flex.json index e4039ab9..a54b8bf8 100644 --- a/ledger_secure_sdk_sys/devices/flex/flex.json +++ b/ledger_secure_sdk_sys/devices/flex/flex.json @@ -9,6 +9,7 @@ "linker": "link_wrap.sh", "linker-flavor": "ld.lld", "llvm-target": "thumbv8m.main-none-eabi", + "llvm-floatabi": "soft", "max-atomic-width": 32, "panic-strategy": "abort", "pre-link-args": { @@ -23,7 +24,7 @@ }, "relocation-model": "ropi-rwpi", "singlethread": true, - "target-pointer-width": "32", + "target-pointer-width": 32, "os": "flex", "target-family": [ "bolos" ] } diff --git a/ledger_secure_sdk_sys/devices/nanosplus/nanosplus.json b/ledger_secure_sdk_sys/devices/nanosplus/nanosplus.json index 5f3d2030..4507d7cf 100644 --- a/ledger_secure_sdk_sys/devices/nanosplus/nanosplus.json +++ b/ledger_secure_sdk_sys/devices/nanosplus/nanosplus.json @@ -9,6 +9,7 @@ "linker": "link_wrap.sh", "linker-flavor": "ld.lld", "llvm-target": "thumbv8m.main-none-eabi", + "llvm-floatabi": "soft", "max-atomic-width": 32, "panic-strategy": "abort", "pre-link-args": { @@ -23,7 +24,7 @@ }, "relocation-model": "ropi-rwpi", "singlethread": true, - "target-pointer-width": "32", + "target-pointer-width": 32, "os": "nanosplus", "target-family": [ "bolos" ] } diff --git a/ledger_secure_sdk_sys/devices/nanox/nanox.json b/ledger_secure_sdk_sys/devices/nanox/nanox.json index 245672ec..63d26d93 100644 --- a/ledger_secure_sdk_sys/devices/nanox/nanox.json +++ b/ledger_secure_sdk_sys/devices/nanox/nanox.json @@ -10,6 +10,7 @@ "linker": "link_wrap.sh", "linker-flavor": "ld.lld", "llvm-target": "thumbv6m-none-eabi", + "llvm-floatabi": "soft", "panic-strategy": "abort", "pre-link-args": { "ld.lld": [ @@ -23,7 +24,7 @@ }, "relocation-model": "ropi-rwpi", "singlethread": true, - "target-pointer-width": "32", + "target-pointer-width": 32, "os": "nanox", "target-family": [ "bolos" ] } diff --git a/ledger_secure_sdk_sys/devices/stax/stax.json b/ledger_secure_sdk_sys/devices/stax/stax.json index 035c1e11..7192498b 100644 --- a/ledger_secure_sdk_sys/devices/stax/stax.json +++ b/ledger_secure_sdk_sys/devices/stax/stax.json @@ -9,6 +9,7 @@ "linker": "link_wrap.sh", "linker-flavor": "ld.lld", "llvm-target": "thumbv8m.main-none-eabi", + "llvm-floatabi": "soft", "max-atomic-width": 32, "panic-strategy": "abort", "pre-link-args": { @@ -23,7 +24,7 @@ }, "relocation-model": "ropi-rwpi", "singlethread": true, - "target-pointer-width": "32", + "target-pointer-width": 32, "os": "stax", "target-family": [ "bolos" ] } diff --git a/ledger_secure_sdk_sys/src/lib.rs b/ledger_secure_sdk_sys/src/lib.rs index 0759acae..bf64a9c8 100644 --- a/ledger_secure_sdk_sys/src/lib.rs +++ b/ledger_secure_sdk_sys/src/lib.rs @@ -2,6 +2,7 @@ #![allow(non_upper_case_globals)] #![allow(non_camel_case_types)] #![allow(non_snake_case)] +#![allow(unnecessary_transmutes)] use core::ffi::c_void; #[cfg(all(feature = "heap"))] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index a9c14142..132a2886 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "nightly-2024-12-01" \ No newline at end of file +channel = "nightly-2025-10-24" \ No newline at end of file