diff --git a/core/embed/models/D001/model_D001.h b/core/embed/models/D001/model_D001.h index 261d59d921..e44ea85e52 100644 --- a/core/embed/models/D001/model_D001.h +++ b/core/embed/models/D001/model_D001.h @@ -10,6 +10,7 @@ #define MODEL_INTERNAL_NAME_QSTR MP_QSTR_D001 #define MODEL_USB_MANUFACTURER "Trezor DIY" #define MODEL_USB_PRODUCT MODEL_FULL_NAME +#define MODEL_HOMESCREEN_MAXSIZE 16384 /*** Discovery uses DEV keys in any build variant ***/ #define MODEL_BOARDLOADER_KEYS \ diff --git a/core/embed/models/D002/model_D002.h b/core/embed/models/D002/model_D002.h index e921216409..0f23e22b3c 100644 --- a/core/embed/models/D002/model_D002.h +++ b/core/embed/models/D002/model_D002.h @@ -12,6 +12,7 @@ #define MODEL_INTERNAL_NAME_QSTR MP_QSTR_D001 #define MODEL_USB_MANUFACTURER "Trezor DIY" #define MODEL_USB_PRODUCT MODEL_FULL_NAME +#define MODEL_HOMESCREEN_MAXSIZE 65536 /*** Discovery uses DEV keys in any build variant ***/ #define MODEL_BOARDLOADER_KEYS \ diff --git a/core/embed/models/T2B1/model_T2B1.h b/core/embed/models/T2B1/model_T2B1.h index 329fd7a1d7..c02668279f 100644 --- a/core/embed/models/T2B1/model_T2B1.h +++ b/core/embed/models/T2B1/model_T2B1.h @@ -10,6 +10,7 @@ #define MODEL_INTERNAL_NAME_QSTR MP_QSTR_T2B1 #define MODEL_USB_MANUFACTURER "SatoshiLabs" #define MODEL_USB_PRODUCT "TREZOR" +#define MODEL_HOMESCREEN_MAXSIZE 16384 /*** PRODUCTION KEYS ***/ #define MODEL_BOARDLOADER_KEYS \ diff --git a/core/embed/models/T2T1/model_T2T1.h b/core/embed/models/T2T1/model_T2T1.h index 238a36b21d..c081a07297 100644 --- a/core/embed/models/T2T1/model_T2T1.h +++ b/core/embed/models/T2T1/model_T2T1.h @@ -10,6 +10,7 @@ #define MODEL_INTERNAL_NAME_QSTR MP_QSTR_T2T1 #define MODEL_USB_MANUFACTURER "SatoshiLabs" #define MODEL_USB_PRODUCT "TREZOR" +#define MODEL_HOMESCREEN_MAXSIZE 16384 /*** PRODUCTION KEYS ***/ #define MODEL_BOARDLOADER_KEYS \ diff --git a/core/embed/models/T3B1/model_T3B1.h b/core/embed/models/T3B1/model_T3B1.h index c558ba598f..1b2af250e8 100644 --- a/core/embed/models/T3B1/model_T3B1.h +++ b/core/embed/models/T3B1/model_T3B1.h @@ -12,6 +12,7 @@ #define MODEL_INTERNAL_NAME_QSTR MP_QSTR_T3B1 #define MODEL_USB_MANUFACTURER "Trezor Company" #define MODEL_USB_PRODUCT MODEL_FULL_NAME +#define MODEL_HOMESCREEN_MAXSIZE 16384 #define MODEL_BOARDLOADER_KEYS \ (const uint8_t *)"\xbb\xc2\x1a\xdb\xc1\xb4\x4d\x6b\xfe\x10\xc5\x22\x3d\xe3\x3c\x28\x42\x9e\x52\x68\x07\x07\xd3\x24\x90\x07\xed\x42\xdc\xc5\xbe\x13", \ diff --git a/core/embed/models/T3T1/model_T3T1.h b/core/embed/models/T3T1/model_T3T1.h index 19212bc86c..d0db8a5791 100644 --- a/core/embed/models/T3T1/model_T3T1.h +++ b/core/embed/models/T3T1/model_T3T1.h @@ -12,6 +12,7 @@ #define MODEL_INTERNAL_NAME_QSTR MP_QSTR_T3T1 #define MODEL_USB_MANUFACTURER "Trezor Company" #define MODEL_USB_PRODUCT MODEL_FULL_NAME +#define MODEL_HOMESCREEN_MAXSIZE 16384 #define MODEL_BOARDLOADER_KEYS \ (const uint8_t *)"\x76\xaf\x42\x6e\x61\x40\x6b\xad\x7c\x07\x7b\x40\x9c\x66\xfd\xe3\x9f\xb8\x17\x91\x93\x13\xae\x1e\x4c\x02\x53\x5c\x80\xbe\xed\x96", \ diff --git a/core/embed/models/T3W1/model_T3W1.h b/core/embed/models/T3W1/model_T3W1.h index 85b27a7825..83bf16f7a6 100644 --- a/core/embed/models/T3W1/model_T3W1.h +++ b/core/embed/models/T3W1/model_T3W1.h @@ -12,6 +12,7 @@ #define MODEL_INTERNAL_NAME_QSTR MP_QSTR_T3W1 #define MODEL_USB_MANUFACTURER "Trezor Company" #define MODEL_USB_PRODUCT MODEL_FULL_NAME +#define MODEL_HOMESCREEN_MAXSIZE 65536 #define MODEL_BOARDLOADER_KEYS \ (const uint8_t *)"\xe8\x91\x2f\x81\xb3\xe7\x80\xee\x65\x0e\xd3\x85\x6d\xb5\x32\x6e\x0b\x9e\xff\x10\x36\x4b\x33\x91\x93\xe7\xa8\xf1\x0f\x76\x21\xb9", \ diff --git a/core/embed/upymod/modtrezorutils/modtrezorutils.c b/core/embed/upymod/modtrezorutils/modtrezorutils.c index 5e6d8844e0..8869206a41 100644 --- a/core/embed/upymod/modtrezorutils/modtrezorutils.c +++ b/core/embed/upymod/modtrezorutils/modtrezorutils.c @@ -405,6 +405,8 @@ STATIC mp_obj_tuple_t mod_trezorutils_version_obj = { /// """USB Product name.""" /// INTERNAL_MODEL: str /// """Internal model code.""" +/// HOMESCREEN_MAXSIZE: int +/// """Maximum size of user-uploaded homescreen in bytes.""" /// EMULATOR: bool /// """Whether the firmware is running in the emulator.""" /// BITCOIN_ONLY: bool @@ -488,6 +490,8 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { MP_ROM_PTR(&mod_trezorutils_model_usb_product_obj)}, {MP_ROM_QSTR(MP_QSTR_INTERNAL_MODEL), MP_ROM_QSTR(MODEL_INTERNAL_NAME_QSTR)}, + {MP_ROM_QSTR(MP_QSTR_HOMESCREEN_MAXSIZE), + MP_ROM_INT(MODEL_HOMESCREEN_MAXSIZE)}, #ifdef TREZOR_EMULATOR {MP_ROM_QSTR(MP_QSTR_EMULATOR), mp_const_true}, MEMINFO_DICT_ENTRIES diff --git a/core/mocks/generated/trezorutils.pyi b/core/mocks/generated/trezorutils.pyi index 60b0d56371..300c25eecf 100644 --- a/core/mocks/generated/trezorutils.pyi +++ b/core/mocks/generated/trezorutils.pyi @@ -146,6 +146,8 @@ MODEL_USB_PRODUCT: str """USB Product name.""" INTERNAL_MODEL: str """Internal model code.""" +HOMESCREEN_MAXSIZE: int +"""Maximum size of user-uploaded homescreen in bytes.""" EMULATOR: bool """Whether the firmware is running in the emulator.""" BITCOIN_ONLY: bool diff --git a/core/src/apps/management/apply_settings.py b/core/src/apps/management/apply_settings.py index 54a2c63c38..72bbc89a8f 100644 --- a/core/src/apps/management/apply_settings.py +++ b/core/src/apps/management/apply_settings.py @@ -16,14 +16,12 @@ BRT_PROTECT_CALL = ButtonRequestType.ProtectCall # CACHE def _validate_homescreen(homescreen: bytes) -> None: - import storage.device as storage_device - if homescreen == b"": return - if len(homescreen) > storage_device.HOMESCREEN_MAXSIZE: + if len(homescreen) > utils.HOMESCREEN_MAXSIZE: raise DataError( - f"Homescreen is too large, maximum size is {storage_device.HOMESCREEN_MAXSIZE} bytes" + f"Homescreen is too large, maximum size is {utils.HOMESCREEN_MAXSIZE} bytes" ) if not trezorui_api.check_homescreen_format(homescreen): raise DataError("Wrong homescreen format") diff --git a/core/src/storage/device.py b/core/src/storage/device.py index b6bb3ddb10..3d91616e87 100644 --- a/core/src/storage/device.py +++ b/core/src/storage/device.py @@ -50,7 +50,6 @@ if TYPE_CHECKING: StorageSafetyCheckLevel = Literal[0, 1] # fmt: on -HOMESCREEN_MAXSIZE = const(16384) LABEL_MAXLENGTH = const(32) if __debug__: @@ -171,7 +170,7 @@ def set_passphrase_enabled(enable: bool) -> None: def set_homescreen(homescreen: bytes) -> None: - if len(homescreen) > HOMESCREEN_MAXSIZE: + if len(homescreen) > utils.HOMESCREEN_MAXSIZE: raise ValueError # homescreen too large common.set(_NAMESPACE, _HOMESCREEN, homescreen, public=True) diff --git a/core/src/trezor/utils.py b/core/src/trezor/utils.py index 3fcb47af35..11ef808ff9 100644 --- a/core/src/trezor/utils.py +++ b/core/src/trezor/utils.py @@ -3,6 +3,7 @@ import sys from trezorutils import ( # noqa: F401 BITCOIN_ONLY, EMULATOR, + HOMESCREEN_MAXSIZE, INTERNAL_MODEL, MODEL, MODEL_FULL_NAME,