What changed, and why it matters
This commit adds initial support for a new Ledger hardware device model called 'Apex P'. It is a routine platform-porting change: build scripts, icons, documentation, and one conditional UI icon definition are updated to include the new device. There is no indication of a security fix or vulnerability.
No security action required. Treat as normal feature/porting commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit extends the existing multi-target build system to include the APEX_P target. Changes are limited to CI matrix entries, Makefile icon paths, ledger_app.toml device list, README/test documentation, a new 48px glyph, and a new #elif defined(TARGET_APEX_P) branch in src/ui/display.h that selects smaller 48px icons for the Apex P screen. No cryptographic, parsing, or protocol logic is modified.
Changed components
CI workflow (.github/workflows/ci-workflow.yml)Makefileledger_app.tomlsrc/ui/display.hREADME.mdtests/README.mdtests_mainnet/test_dashboard.pyglyphs/Bitcoin_48px.pngicons/apex_p_app_bitcoin.pngInspect captured patch +21 / −11
diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml
index 571bb84..f70b9a1 100644
--- a/.github/workflows/ci-workflow.yml
+++ b/.github/workflows/ci-workflow.yml
@@ -13,7 +13,7 @@ on:
jobs:
job_build:
- name: Compilation for X, S+, Stax and Flex
+ name: Compilation for X, S+, Stax, Flex and Apex P
strategy:
matrix:
@@ -26,6 +26,8 @@ jobs:
SDK: "$STAX_SDK"
- model: flex
SDK: "$FLEX_SDK"
+ - model: apex_p
+ SDK: "$APEX_P_SDK"
runs-on: ubuntu-latest
@@ -113,7 +115,7 @@ jobs:
name: codecov-app-bitcoin
fail_ci_if_error: true
verbose: true
-
+
- name: HTML documentation
run: doxygen .doxygen/Doxyfile
@@ -131,6 +133,7 @@ jobs:
- model: nanosp
- model: stax
- model: flex
+ - model: apex_p
needs: job_build
runs-on: ubuntu-latest
@@ -157,7 +160,7 @@ jobs:
path: bin
- name: Install build dependencies
- run: apt update && apt install -y build-essential
+ run: apt update && apt install -y build-essential
- name: Run tests
run: |
diff --git a/Makefile b/Makefile
index 2ceac06..d1edcaf 100644
--- a/Makefile
+++ b/Makefile
@@ -125,6 +125,7 @@ ICON_NANOX = icons/nanox_app_bitcoin.gif
ICON_NANOSP = icons/nanox_app_bitcoin.gif
ICON_STAX = icons/stax_app_bitcoin.gif
ICON_FLEX = icons/flex_app_bitcoin.gif
+ICON_APEX_P = icons/apex_p_app_bitcoin.png
########################################
# Application communication interfaces #
diff --git a/README.md b/README.md
index 7fe924b..6e55e13 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Ledger Bitcoin Application
-This is the Bitcoin application for Ledger Nano X/SP, Stax and Flex.
+This is the Bitcoin application for Ledger devices.
## Quick start guide
@@ -78,6 +78,8 @@ You can choose which device to compile and load for by setting the `BOLOS_SDK` e
* `BOLOS_SDK=$NANOX_SDK`
* `BOLOS_SDK=$NANOSP_SDK`
* `BOLOS_SDK=$STAX_SDK`
+* `BOLOS_SDK=$FLEX_SDK`
+* `BOLOS_SDK=$APEX_P_SDK`
By default this variable is set to build/load for Nano S+.
diff --git a/glyphs/Bitcoin_48px.png b/glyphs/Bitcoin_48px.png
new file mode 100644
index 0000000..57acb13
Binary files /dev/null and b/glyphs/Bitcoin_48px.png differ
diff --git a/icons/apex_p_app_bitcoin.png b/icons/apex_p_app_bitcoin.png
new file mode 100644
index 0000000..25fd524
Binary files /dev/null and b/icons/apex_p_app_bitcoin.png differ
diff --git a/ledger_app.toml b/ledger_app.toml
index 3ca01d3..36d3f5e 100644
--- a/ledger_app.toml
+++ b/ledger_app.toml
@@ -1,7 +1,7 @@
[app]
build_directory = "./"
sdk = "C"
-devices = ["nanox", "nanos+", "stax", "flex"]
+devices = ["nanox", "nanos+", "stax", "flex", "apex_p"]
[tests]
unit_directory = "./unit-tests/"
diff --git a/src/ui/display.h b/src/ui/display.h
index 6b2c5c4..ab7f19e 100644
--- a/src/ui/display.h
+++ b/src/ui/display.h
@@ -20,10 +20,14 @@
#define MESSAGE_MAX_DISPLAY_SIZE \
(MESSAGE_CHUNK_SIZE * MESSAGE_CHUNK_PER_DISPLAY + 2 * sizeof("...") - 1)
-#ifdef SCREEN_SIZE_WALLET
-#define ICON_APP_IMPORTANT C_Important_Circle_64px
+#if defined(TARGET_STAX) || defined(TARGET_FLEX)
+#define ICON_APP_IMPORTANT IMPORTANT_CIRCLE_ICON
#define ICON_APP_HOME C_Bitcoin_64px
#define ICON_APP_ACTION C_Bitcoin_64px
+#elif defined(TARGET_APEX_P)
+#define ICON_APP_IMPORTANT IMPORTANT_CIRCLE_ICON
+#define ICON_APP_HOME C_Bitcoin_48px
+#define ICON_APP_ACTION C_Bitcoin_48px
#else
#define ICON_APP_IMPORTANT C_icon_warning
#define ICON_APP_HOME C_bitcoin_logo
diff --git a/tests/README.md b/tests/README.md
index 49e653c..49e788a 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -30,7 +30,7 @@ Build the app as normal from the root folder. For convenience, you probably want
DEBUG=1 make
```
-Then run all the tests from this folder, specifying the device: nanox, nanosp, stax, flex, or all:
+Then run all the tests from this folder, specifying the device: nanox, nanosp, stax, flex, apex_p or all:
```
pytest --device yourdevice
@@ -51,4 +51,4 @@ Be sure to have you device connected through USB (without any other software int
```
pytest --device yourdevice --backend ledgercomm
-```
\ No newline at end of file
+```
diff --git a/tests_mainnet/test_dashboard.py b/tests_mainnet/test_dashboard.py
index 30532b5..a6a6a54 100644
--- a/tests_mainnet/test_dashboard.py
+++ b/tests_mainnet/test_dashboard.py
@@ -9,8 +9,8 @@ def test_dashboard(comm: SpeculosClient, is_speculos: bool, app_version: str, mo
if not is_speculos:
pytest.skip("Requires speculos")
- if model in ["stax", "flex"]:
- pytest.skip("No dashboard test for stax or flex")
+ if model in ["stax", "flex", "apex_p"]:
+ pytest.skip("No dashboard test for stax, flex and apex_p")
comm.press_and_release("right")
comm.wait_for_text_event("App info")
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.