chore(core/eckhart): Update regulatory screen
What changed, and why it matters
This commit updates the legal/regulatory information screen shown on a Trezor hardware wallet. It adds Japan to the list of regions, includes a new Japan icon, and adds the standard FCC compliance disclaimer text. There is no security-relevant change.
No security action needed; treat as routine UI/content update.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change is purely UI/content: the regulatory screen array is expanded from 6 to 8 pages, a title field is made optional so a page can contain only body text, the FCC Part 15 compliance notice is added, and a new Japan icon asset is included. No cryptographic, authentication, memory-safety, or firmware logic changes are present.
Changed components
core/embed/rust/src/ui/layout_eckhart/firmware/regulatory_screen.rscore/embed/rust/src/ui/layout_eckhart/res/japan.pngcore/embed/rust/src/ui/layout_eckhart/res/japan.toifcore/embed/rust/src/ui/layout_eckhart/theme/mod.rsInspect captured patch +36 / −17
diff --git a/core/embed/rust/src/ui/layout_eckhart/firmware/regulatory_screen.rs b/core/embed/rust/src/ui/layout_eckhart/firmware/regulatory_screen.rs
index 938ef2da..2f7cfdef 100644
--- a/core/embed/rust/src/ui/layout_eckhart/firmware/regulatory_screen.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/firmware/regulatory_screen.rs
@@ -140,22 +140,36 @@ struct RegulatoryContent {
}
impl RegulatoryContent {
- const ZONES_NUM: usize = 6;
- const ZONES: [(&'static str, &'static str, Option<Icon>); RegulatoryContent::ZONES_NUM] = [
- ("United States", "FCC ID: VUI-TS7A01", Some(theme::ICON_FCC)),
- ("Canada", "IC: 7582A-TS7A01", None),
+ const SCREENS: usize = 8;
+ const ZONES: [(Option<&'static str>, &'static str, Option<Icon>); RegulatoryContent::SCREENS] = [
(
- "Europe / UK",
+ Some("United States"),
+ "FCC ID: VUI-TS7A01",
+ Some(theme::ICON_FCC),
+ ),
+ (
+ None,
+ "This device complies with Part 15 of the FCC Rules. Operation is subject to two conditions: (1) it may not cause harmful interference, and (2) it must accept any interference, including that which causes undesired operation.",
+ None,
+ ),
+ (
+ Some("Canada"),
+ "IC: 7582A-TS7A01\nCAN ICES-003(B) /\nNMB-003(B)",
+ None,
+ ),
+ (
+ Some("Europe / UK"),
"Trezor Company s.r.o.\nKundratka 2359/17a\nPrague 8, Czech Republic",
Some(theme::ICON_EUROPE),
),
- ("Australia /\nNew Zealand", "", Some(theme::ICON_RCM)),
- ("Ukraine", "", Some(theme::ICON_UKRAINE)),
- ("South Korea", "", Some(theme::ICON_KOREA)),
+ (Some("Australia /\nNew Zealand"), "", Some(theme::ICON_RCM)),
+ (Some("Ukraine"), "", Some(theme::ICON_UKRAINE)),
+ (Some("Japan"), "", Some(theme::ICON_JAPAN)),
+ (Some("South Korea"), "", Some(theme::ICON_KOREA)),
];
pub fn new() -> Self {
- let pager = Pager::new(Self::ZONES_NUM as u16);
+ let pager = Pager::new(Self::SCREENS as u16);
Self {
area: Rect::zero(),
pager,
@@ -219,14 +233,18 @@ impl Component for RegulatoryContent {
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
let (title, content, icon) = Self::ZONES[self.pager.current() as usize];
- let rest = self.render_from_top(
- self.area,
- theme::TEXT_REGULAR,
- Alignment::Start,
- title,
- theme::TEXT_VERTICAL_SPACING,
- target,
- );
+ let rest = if let Some(title) = title {
+ self.render_from_top(
+ self.area,
+ theme::TEXT_REGULAR,
+ Alignment::Start,
+ title,
+ theme::TEXT_VERTICAL_SPACING,
+ target,
+ )
+ } else {
+ self.area
+ };
let rest = self.render_from_top(
rest,
diff --git a/core/embed/rust/src/ui/layout_eckhart/res/japan.png b/core/embed/rust/src/ui/layout_eckhart/res/japan.png
new file mode 100644
index 00000000..13d95e25
Binary files /dev/null and b/core/embed/rust/src/ui/layout_eckhart/res/japan.png differ
diff --git a/core/embed/rust/src/ui/layout_eckhart/res/japan.toif b/core/embed/rust/src/ui/layout_eckhart/res/japan.toif
new file mode 100644
index 00000000..ac7de069
Binary files /dev/null and b/core/embed/rust/src/ui/layout_eckhart/res/japan.toif differ
diff --git a/core/embed/rust/src/ui/layout_eckhart/theme/mod.rs b/core/embed/rust/src/ui/layout_eckhart/theme/mod.rs
index 89758dd6..56ae9299 100644
--- a/core/embed/rust/src/ui/layout_eckhart/theme/mod.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/theme/mod.rs
@@ -163,6 +163,7 @@ include_icon!(ICON_SECURED, "layout_eckhart/res/secured.toif");
// Regulatory screen icons
include_icon!(ICON_UKRAINE, "layout_eckhart/res/ukraine.toif");
+include_icon!(ICON_JAPAN, "layout_eckhart/res/japan.toif");
include_icon!(ICON_KOREA, "layout_eckhart/res/korea_full.toif");
include_icon!(ICON_EUROPE, "layout_eckhart/res/europe.toif");
include_icon!(ICON_RCM, "layout_eckhart/res/rcm.toif");
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.