From c877dc8dd688728783f86d4c10f0419098aac955 Mon Sep 17 00:00:00 2001 From: Ondrej Mikle Date: Mon, 1 Jun 2020 15:44:36 +0200 Subject: [PATCH] core: port storage to T1 --- .../extmod/modtrezorconfig/norcow_config.h | 7 +-- core/embed/trezorhal/flash.c | 4 ++ core/embed/trezorhal/flash.h | 12 +++- core/embed/unix/flash.c | 4 ++ core/src1/main.py | 60 +++++++++++++++++++ core/src1/storage/__init__.py | 1 + core/src1/storage/cache.py | 1 + core/src1/storage/common.py | 1 + core/src1/storage/device.py | 1 + core/src1/storage/resident_credentials.py | 1 + core/src1/trezor/__init__.py | 1 + core/src1/trezor/crypto/__init__.py | 1 + core/src1/trezor/crypto/base32.py | 1 + core/src1/trezor/crypto/base58.py | 1 + core/src1/trezor/crypto/bech32.py | 1 + core/src1/trezor/crypto/cashaddr.py | 1 + core/src1/trezor/crypto/curve.py | 1 + core/src1/trezor/crypto/der.py | 1 + core/src1/trezor/crypto/hashlib.py | 1 + core/src1/trezor/crypto/hmac.py | 1 + core/src1/trezor/crypto/rlp.py | 1 + core/src1/trezor/crypto/scripts.py | 1 + core/src1/trezor/crypto/slip39.py | 1 + core/src1/trezor/log.py | 1 + core/src1/trezor/messages/BackupType.py | 1 + core/src1/trezor/utils.py | 1 + 26 files changed, 102 insertions(+), 6 deletions(-) create mode 120000 core/src1/storage/__init__.py create mode 120000 core/src1/storage/cache.py create mode 120000 core/src1/storage/common.py create mode 120000 core/src1/storage/device.py create mode 120000 core/src1/storage/resident_credentials.py create mode 120000 core/src1/trezor/__init__.py create mode 120000 core/src1/trezor/crypto/__init__.py create mode 120000 core/src1/trezor/crypto/base32.py create mode 120000 core/src1/trezor/crypto/base58.py create mode 120000 core/src1/trezor/crypto/bech32.py create mode 120000 core/src1/trezor/crypto/cashaddr.py create mode 120000 core/src1/trezor/crypto/curve.py create mode 120000 core/src1/trezor/crypto/der.py create mode 120000 core/src1/trezor/crypto/hashlib.py create mode 120000 core/src1/trezor/crypto/hmac.py create mode 120000 core/src1/trezor/crypto/rlp.py create mode 120000 core/src1/trezor/crypto/scripts.py create mode 120000 core/src1/trezor/crypto/slip39.py create mode 120000 core/src1/trezor/log.py create mode 120000 core/src1/trezor/messages/BackupType.py create mode 120000 core/src1/trezor/utils.py diff --git a/core/embed/extmod/modtrezorconfig/norcow_config.h b/core/embed/extmod/modtrezorconfig/norcow_config.h index 405d1441a..19b27acef 100644 --- a/core/embed/extmod/modtrezorconfig/norcow_config.h +++ b/core/embed/extmod/modtrezorconfig/norcow_config.h @@ -28,14 +28,10 @@ #if TREZOR_MODEL == T #define NORCOW_SECTOR_SIZE (64 * 1024) -#define NORCOW_SECTORS \ - { FLASH_SECTOR_STORAGE_1, FLASH_SECTOR_STORAGE_2 } #elif TREZOR_MODEL == 1 #define NORCOW_SECTOR_SIZE (16 * 1024) -#define NORCOW_SECTORS \ - { 2, 3 } #else @@ -43,6 +39,9 @@ #endif +#define NORCOW_SECTORS \ + { FLASH_SECTOR_STORAGE_1, FLASH_SECTOR_STORAGE_2 } + /* * Current storage version. */ diff --git a/core/embed/trezorhal/flash.c b/core/embed/trezorhal/flash.c index e456f3c97..2b90e45be 100644 --- a/core/embed/trezorhal/flash.c +++ b/core/embed/trezorhal/flash.c @@ -39,6 +39,7 @@ static const uint32_t FLASH_SECTOR_TABLE[FLASH_SECTOR_COUNT + 1] = { [9] = 0x080A0000, // - 0x080BFFFF | 128 KiB [10] = 0x080C0000, // - 0x080DFFFF | 128 KiB [11] = 0x080E0000, // - 0x080FFFFF | 128 KiB +#if TREZOR_MODEL == T [12] = 0x08100000, // - 0x08103FFF | 16 KiB [13] = 0x08104000, // - 0x08107FFF | 16 KiB [14] = 0x08108000, // - 0x0810BFFF | 16 KiB @@ -52,6 +53,9 @@ static const uint32_t FLASH_SECTOR_TABLE[FLASH_SECTOR_COUNT + 1] = { [22] = 0x081C0000, // - 0x081DFFFF | 128 KiB [23] = 0x081E0000, // - 0x081FFFFF | 128 KiB [24] = 0x08200000, // last element - not a valid sector +#elif TREZOR_MODEL == 1 + [12] = 0x08100000, // last element - not a valid sector +#endif }; const uint8_t FIRMWARE_SECTORS[FIRMWARE_SECTORS_COUNT] = { diff --git a/core/embed/trezorhal/flash.h b/core/embed/trezorhal/flash.h index 1c595f44b..64a9aef7c 100644 --- a/core/embed/trezorhal/flash.h +++ b/core/embed/trezorhal/flash.h @@ -26,7 +26,11 @@ // see docs/memory.md for more information +#if TREZOR_MODEL == T #define FLASH_SECTOR_COUNT 24 +#elif TREZOR_MODEL == 1 +#define FLASH_SECTOR_COUNT 12 +#endif #define FLASH_SECTOR_BOARDLOADER_START 0 // 1 @@ -34,7 +38,13 @@ // 3 +#if TREZOR_MODEL == T #define FLASH_SECTOR_STORAGE_1 4 +#define FLASH_SECTOR_STORAGE_2 16 +#elif TREZOR_MODEL == 1 +#define FLASH_SECTOR_STORAGE_1 2 +#define FLASH_SECTOR_STORAGE_2 3 +#endif #define FLASH_SECTOR_BOOTLOADER 5 @@ -50,8 +60,6 @@ // 14 #define FLASH_SECTOR_UNUSED_END 15 -#define FLASH_SECTOR_STORAGE_2 16 - #define FLASH_SECTOR_FIRMWARE_EXTRA_START 17 // 18 // 19 diff --git a/core/embed/unix/flash.c b/core/embed/unix/flash.c index 6a672107a..a0de59e13 100644 --- a/core/embed/unix/flash.c +++ b/core/embed/unix/flash.c @@ -47,6 +47,7 @@ static const uint32_t FLASH_SECTOR_TABLE[FLASH_SECTOR_COUNT + 1] = { [9] = 0x080A0000, // - 0x080BFFFF | 128 KiB [10] = 0x080C0000, // - 0x080DFFFF | 128 KiB [11] = 0x080E0000, // - 0x080FFFFF | 128 KiB +#if TREZOR_MODEL == T [12] = 0x08100000, // - 0x08103FFF | 16 KiB [13] = 0x08104000, // - 0x08107FFF | 16 KiB [14] = 0x08108000, // - 0x0810BFFF | 16 KiB @@ -60,6 +61,9 @@ static const uint32_t FLASH_SECTOR_TABLE[FLASH_SECTOR_COUNT + 1] = { [22] = 0x081C0000, // - 0x081DFFFF | 128 KiB [23] = 0x081E0000, // - 0x081FFFFF | 128 KiB [24] = 0x08200000, // last element - not a valid sector +#elif TREZOR_MODEL == 1 + [12] = 0x08100000, // last element - not a valid sector +#endif }; const uint8_t FIRMWARE_SECTORS[FIRMWARE_SECTORS_COUNT] = { diff --git a/core/src1/main.py b/core/src1/main.py index 55eef0b93..d53c22c0f 100644 --- a/core/src1/main.py +++ b/core/src1/main.py @@ -4,11 +4,70 @@ usb.bus.open() import trezorio as io from trezorui import Display +import storage +import storage.resident_credentials +from trezor import config d = Display() d.clear() d.backlight(255) +config.init(False) +salt = None +config.unlock(1, salt) +storage.init_unlocked() +storage.cache.start_session() +print("is_initialized: ", storage.is_initialized()) +print("version: ", storage.device.is_version_stored()) +print("version: ", storage.device.get_version()) +print("needs backup: ", storage.device.needs_backup()) +storage.device.set_backed_up() +print("needs backup: ", storage.device.needs_backup()) +flags = storage.device.get_flags() +print("flags", flags) +storage.device.set_flags(0x200) +print("flags", storage.device.get_flags()) + +secret = "0"*32 +backup_type = 0 +storage.device.store_mnemonic_secret( + secret, + backup_type, + needs_backup=True, + no_backup=True, +) + + +storage.device.set_unfinished_backup(False) +print("unfinished backup: ", storage.device.unfinished_backup()) +storage.device.set_unfinished_backup(True) +print("unfinished backup: ", storage.device.unfinished_backup()) + +key54 = storage.common.get(0x1, 54, public=True) +print("App key 54:", key54) +storage.common.set(0x1, 54, b"asdZ", public=True) +key54 = storage.common.get(0x1, 54, public=True) +print("App key 54 (2):", key54) +key54 = storage.common.delete(0x1, 54, public=True) +key54 = storage.common.get(0x1, 54, public=True) +print("App key 54 (3):", key54) +delay = storage.device.get_autolock_delay_ms() +print("delay", delay) +storage.device.set_autolock_delay_ms(150000) +delay = storage.device.get_autolock_delay_ms() +print("delay", delay) + +cache_seed = storage.cache.get(storage.cache.APP_COMMON_SEED) +print("cache seed", cache_seed) +storage.cache.set(storage.cache.APP_COMMON_SEED, 1234) +cache_seed = storage.cache.get(storage.cache.APP_COMMON_SEED) +print("cache seed", cache_seed) + +res1 = storage.resident_credentials.get(1) +print("Res credential 1", res1) +res1 = storage.resident_credentials.set(1, b"0"*31 + b"F") +res1 = storage.resident_credentials.get(1) +print("Res credential 1", res1) i = 0 @@ -20,3 +79,4 @@ while True: print("TOUCH", r) else: print("NOTOUCH") + # d.refresh() diff --git a/core/src1/storage/__init__.py b/core/src1/storage/__init__.py new file mode 120000 index 000000000..1ce3bd4ec --- /dev/null +++ b/core/src1/storage/__init__.py @@ -0,0 +1 @@ +../../src/storage/__init__.py \ No newline at end of file diff --git a/core/src1/storage/cache.py b/core/src1/storage/cache.py new file mode 120000 index 000000000..021740847 --- /dev/null +++ b/core/src1/storage/cache.py @@ -0,0 +1 @@ +../../src/storage/cache.py \ No newline at end of file diff --git a/core/src1/storage/common.py b/core/src1/storage/common.py new file mode 120000 index 000000000..289d84dc6 --- /dev/null +++ b/core/src1/storage/common.py @@ -0,0 +1 @@ +../../src/storage/common.py \ No newline at end of file diff --git a/core/src1/storage/device.py b/core/src1/storage/device.py new file mode 120000 index 000000000..9cc4824c3 --- /dev/null +++ b/core/src1/storage/device.py @@ -0,0 +1 @@ +../../src/storage/device.py \ No newline at end of file diff --git a/core/src1/storage/resident_credentials.py b/core/src1/storage/resident_credentials.py new file mode 120000 index 000000000..e5318eada --- /dev/null +++ b/core/src1/storage/resident_credentials.py @@ -0,0 +1 @@ +../../src/storage/resident_credentials.py \ No newline at end of file diff --git a/core/src1/trezor/__init__.py b/core/src1/trezor/__init__.py new file mode 120000 index 000000000..90e031de6 --- /dev/null +++ b/core/src1/trezor/__init__.py @@ -0,0 +1 @@ +../../src/trezor/__init__.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/__init__.py b/core/src1/trezor/crypto/__init__.py new file mode 120000 index 000000000..61eca6eee --- /dev/null +++ b/core/src1/trezor/crypto/__init__.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/__init__.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/base32.py b/core/src1/trezor/crypto/base32.py new file mode 120000 index 000000000..322169fba --- /dev/null +++ b/core/src1/trezor/crypto/base32.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/base32.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/base58.py b/core/src1/trezor/crypto/base58.py new file mode 120000 index 000000000..dcd0a720c --- /dev/null +++ b/core/src1/trezor/crypto/base58.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/base58.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/bech32.py b/core/src1/trezor/crypto/bech32.py new file mode 120000 index 000000000..8c8a00f16 --- /dev/null +++ b/core/src1/trezor/crypto/bech32.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/bech32.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/cashaddr.py b/core/src1/trezor/crypto/cashaddr.py new file mode 120000 index 000000000..ec04cb0ca --- /dev/null +++ b/core/src1/trezor/crypto/cashaddr.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/cashaddr.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/curve.py b/core/src1/trezor/crypto/curve.py new file mode 120000 index 000000000..62ab6753a --- /dev/null +++ b/core/src1/trezor/crypto/curve.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/curve.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/der.py b/core/src1/trezor/crypto/der.py new file mode 120000 index 000000000..99b55d435 --- /dev/null +++ b/core/src1/trezor/crypto/der.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/der.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/hashlib.py b/core/src1/trezor/crypto/hashlib.py new file mode 120000 index 000000000..f54a63fe0 --- /dev/null +++ b/core/src1/trezor/crypto/hashlib.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/hashlib.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/hmac.py b/core/src1/trezor/crypto/hmac.py new file mode 120000 index 000000000..cb55daf57 --- /dev/null +++ b/core/src1/trezor/crypto/hmac.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/hmac.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/rlp.py b/core/src1/trezor/crypto/rlp.py new file mode 120000 index 000000000..497d73a4f --- /dev/null +++ b/core/src1/trezor/crypto/rlp.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/rlp.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/scripts.py b/core/src1/trezor/crypto/scripts.py new file mode 120000 index 000000000..80c2a9aa0 --- /dev/null +++ b/core/src1/trezor/crypto/scripts.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/scripts.py \ No newline at end of file diff --git a/core/src1/trezor/crypto/slip39.py b/core/src1/trezor/crypto/slip39.py new file mode 120000 index 000000000..8c093f0e0 --- /dev/null +++ b/core/src1/trezor/crypto/slip39.py @@ -0,0 +1 @@ +../../../src/trezor/crypto/slip39.py \ No newline at end of file diff --git a/core/src1/trezor/log.py b/core/src1/trezor/log.py new file mode 120000 index 000000000..1eefd588a --- /dev/null +++ b/core/src1/trezor/log.py @@ -0,0 +1 @@ +../../src/trezor/log.py \ No newline at end of file diff --git a/core/src1/trezor/messages/BackupType.py b/core/src1/trezor/messages/BackupType.py new file mode 120000 index 000000000..05b024c97 --- /dev/null +++ b/core/src1/trezor/messages/BackupType.py @@ -0,0 +1 @@ +../../../src/trezor/messages/BackupType.py \ No newline at end of file diff --git a/core/src1/trezor/utils.py b/core/src1/trezor/utils.py new file mode 120000 index 000000000..fb4fcb694 --- /dev/null +++ b/core/src1/trezor/utils.py @@ -0,0 +1 @@ +../../src/trezor/utils.py \ No newline at end of file