feat(core): compose Stellar authorization entry labels as root label + path.
What changed, and why it matters
This commit only changes the on-screen text labels shown when a Trezor device asks the user to confirm a Stellar blockchain authorization. It renames labels from formats like 'Authorization 2' and '1-2-1' to 'Authorization #2' and '#2.1.1'. There is no security vulnerability or fix here; it is a user-interface clarity improvement.
No security action required. Treat as a normal UI/UX change during review.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff modifies label composition in core/src/apps/stellar/operations/layout.py. _confirm_auth_entry now passes f”#{position}” instead of str(position) to _confirm_invocation, and _confirm_invocation recursively builds sub-invocation paths with dot separators (e.g., ‘#2.1.1’) instead of dash separators (e.g., ‘1-2-1’). The underlying authorization data, confirmation logic, and trust assumptions are unchanged.
Changed components
core/src/apps/stellar/operations/layout.pyInspect captured patch +6 / −5
diff --git a/core/src/apps/stellar/operations/layout.py b/core/src/apps/stellar/operations/layout.py
index a41f5100..fe92533a 100644
--- a/core/src/apps/stellar/operations/layout.py
+++ b/core/src/apps/stellar/operations/layout.py
@@ -563,7 +563,7 @@ async def _confirm_auth_entry(
raise DataError("Stellar: missing address_v2 credentials")
await confirm_address(
- f"{TR.words__authorization} {position}",
+ f"{TR.words__authorization} #{position}",
creds.address_v2.address,
description=TR.words__address,
br_name="op_auth_entry_address",
@@ -571,7 +571,7 @@ async def _confirm_auth_entry(
# Show the whole authorized invocation tree starting from its root (not just the
# nested sub-invocations), so the user sees exactly what this signature authorizes.
- await _confirm_invocation(auth.root_invocation, str(position), is_root=is_root)
+ await _confirm_invocation(auth.root_invocation, f"#{position}", is_root=is_root)
async def _confirm_invocation(
@@ -580,8 +580,9 @@ async def _confirm_invocation(
"""Confirm an authorized invocation and its sub-invocations recursively.
The whole authorization tree is shown by default (it is security-critical and
- can differ from the host function being invoked). `position` is the path in
- the auth tree (e.g. "1", "1-2", "1-2-1").
+ can differ from the host function being invoked). `position` is the root
+ label plus the dot-delimited path in the auth tree (e.g. "#2", "#2.1",
+ "#2.1.1"), so every label is composed as root label + path from the root.
"""
from trezor.enums import StellarSorobanAuthorizedFunctionType
@@ -604,7 +605,7 @@ async def _confirm_invocation(
)
for i, sub in enumerate(invocation.sub_invocations):
- await _confirm_invocation(sub, f"{position}-{i + 1}")
+ await _confirm_invocation(sub, f"{position}.{i + 1}")
def _escape_str(s: str) -> str:
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.