mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-06 14:52:33 +00:00
feat(core/sdbackup): insert/eject emulator SD card
- access through DebugLink - card can be initialized with - serial_number (used for filename and later for shamir backup functionality) - capacity in bytes - manufacturer ID (used for recognition of Trezor card together with capacity) - one debug protobuf message added serial_number set to None means ejecting the card from emulator - TODO: initialize the card with preexisting data
This commit is contained in:
parent
b82e80fbf6
commit
f35ffa0c18
@ -173,7 +173,6 @@ message DebugLinkFlashErase {
|
|||||||
optional uint32 sector = 1;
|
optional uint32 sector = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request: Erase the SD card
|
* Request: Erase the SD card
|
||||||
* @start
|
* @start
|
||||||
@ -185,6 +184,16 @@ message DebugLinkEraseSdCard {
|
|||||||
// if false, it will be all 0xFF bytes.
|
// if false, it will be all 0xFF bytes.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request: Insert SD card into device (emulator).
|
||||||
|
* If serial_number is not supplied, the message is interpreted as a request for ejecting a card.
|
||||||
|
* @next Success
|
||||||
|
*/
|
||||||
|
message DebugLinkInsertSdCard {
|
||||||
|
optional uint32 serial_number = 1; // mocked serial number of the card (e.g.: 1, 2, 3,...)
|
||||||
|
optional uint32 capacity_bytes = 2; // capacity of the card in bytes
|
||||||
|
optional uint32 manuf_ID = 3; // mocked manufacturer ID
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request: Start or stop tracking layout changes
|
* Request: Start or stop tracking layout changes
|
||||||
|
@ -113,7 +113,7 @@ message Features {
|
|||||||
Capability_Solana = 18;
|
Capability_Solana = 18;
|
||||||
}
|
}
|
||||||
optional BackupType backup_type = 31; // type of device backup (BIP-39 / SLIP-39 basic / SLIP-39 advanced)
|
optional BackupType backup_type = 31; // type of device backup (BIP-39 / SLIP-39 basic / SLIP-39 advanced)
|
||||||
optional bool sd_card_present = 32; // is SD card present
|
optional bool sd_card_present = 32; // is SD card inserted in the device
|
||||||
optional bool sd_protection = 33; // is SD Protect enabled
|
optional bool sd_protection = 33; // is SD Protect enabled
|
||||||
optional bool wipe_code_protection = 34; // is wipe code protection enabled
|
optional bool wipe_code_protection = 34; // is wipe code protection enabled
|
||||||
optional bytes session_id = 35;
|
optional bytes session_id = 35;
|
||||||
|
@ -184,8 +184,9 @@ enum MessageType {
|
|||||||
MessageType_DebugLinkReseedRandom = 9002 [(bitcoin_only) = true, (wire_debug_in) = true];
|
MessageType_DebugLinkReseedRandom = 9002 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||||
MessageType_DebugLinkRecordScreen = 9003 [(bitcoin_only) = true, (wire_debug_in) = true];
|
MessageType_DebugLinkRecordScreen = 9003 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||||
MessageType_DebugLinkEraseSdCard = 9005 [(bitcoin_only) = true, (wire_debug_in) = true];
|
MessageType_DebugLinkEraseSdCard = 9005 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||||
MessageType_DebugLinkWatchLayout = 9006 [(bitcoin_only) = true, (wire_debug_in) = true];
|
MessageType_DebugLinkInsertSdCard = 9006 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||||
MessageType_DebugLinkResetDebugEvents = 9007 [(bitcoin_only) = true, (wire_debug_in) = true];
|
MessageType_DebugLinkWatchLayout = 9007 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||||
|
MessageType_DebugLinkResetDebugEvents = 9008 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||||
|
|
||||||
// Ethereum
|
// Ethereum
|
||||||
MessageType_EthereumGetPublicKey = 450 [(wire_in) = true];
|
MessageType_EthereumGetPublicKey = 450 [(wire_in) = true];
|
||||||
|
@ -380,6 +380,7 @@ SOURCE_UNIX = [
|
|||||||
'embed/unix/main.c',
|
'embed/unix/main.c',
|
||||||
'embed/unix/main_main.c',
|
'embed/unix/main_main.c',
|
||||||
'embed/unix/profile.c',
|
'embed/unix/profile.c',
|
||||||
|
'embed/unix/sdcard_emu_mock.c',
|
||||||
'vendor/micropython/shared/runtime/gchelper_generic.c',
|
'vendor/micropython/shared/runtime/gchelper_generic.c',
|
||||||
'vendor/micropython/ports/unix/alloc.c',
|
'vendor/micropython/ports/unix/alloc.c',
|
||||||
'vendor/micropython/ports/unix/gccollect.c',
|
'vendor/micropython/ports/unix/gccollect.c',
|
||||||
|
111
core/embed/extmod/modtrezorio/modtrezorio-sdcard_switcher.h
Normal file
111
core/embed/extmod/modtrezorio/modtrezorio-sdcard_switcher.h
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Trezor project, https://trezor.io/
|
||||||
|
*
|
||||||
|
* Copyright (c) SatoshiLabs
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "embed/extmod/trezorobj.h"
|
||||||
|
#include "py/mpconfig.h"
|
||||||
|
#include "sdcard.h"
|
||||||
|
#include "sdcard_emu_mock.h"
|
||||||
|
|
||||||
|
/// package: trezorio.sdcard_switcher
|
||||||
|
|
||||||
|
/// def insert(
|
||||||
|
/// card_sn: int,
|
||||||
|
/// capacity_bytes: int | None = 122_945_536,
|
||||||
|
/// manuf_id: int | None = 27,
|
||||||
|
/// ) -> None:
|
||||||
|
/// """
|
||||||
|
/// Inserts SD card to the emulator.
|
||||||
|
/// """
|
||||||
|
STATIC mp_obj_t mod_trezorio_sdcard_switcher_insert(size_t n_args,
|
||||||
|
const mp_obj_t *args,
|
||||||
|
mp_map_t *kw_args) {
|
||||||
|
STATIC const mp_arg_t allowed_args[] = {
|
||||||
|
{MP_QSTR_card_sn, MP_ARG_REQUIRED | MP_ARG_INT},
|
||||||
|
{MP_QSTR_capacity_bytes,
|
||||||
|
MP_ARG_OBJ,
|
||||||
|
{.u_rom_obj = MP_ROM_INT(122945536)}},
|
||||||
|
{MP_QSTR_manuf_id, MP_ARG_OBJ, {.u_rom_obj = MP_ROM_INT(27)}},
|
||||||
|
};
|
||||||
|
|
||||||
|
mp_arg_val_t vals[MP_ARRAY_SIZE(allowed_args)] = {0};
|
||||||
|
mp_arg_parse_all(n_args, args, kw_args, MP_ARRAY_SIZE(allowed_args),
|
||||||
|
allowed_args, vals);
|
||||||
|
|
||||||
|
const mp_int_t card_sn = vals[0].u_int;
|
||||||
|
|
||||||
|
// FIXME: default arguments should be somehow accessible by .u_rom_obj, no?
|
||||||
|
mp_int_t capacity_bytes;
|
||||||
|
if (vals[1].u_obj == mp_const_none) {
|
||||||
|
/* capacity_bytes = mp_obj_get_int(vals[1].u_rom_obj); */
|
||||||
|
capacity_bytes = 122945536;
|
||||||
|
} else {
|
||||||
|
capacity_bytes = mp_obj_get_int(vals[1].u_obj);
|
||||||
|
}
|
||||||
|
mp_int_t manuf_id;
|
||||||
|
if (vals[2].u_obj == mp_const_none) {
|
||||||
|
/* manuf_id = mp_obj_get_int(vals[2].u_rom_obj); */
|
||||||
|
manuf_id = 27;
|
||||||
|
} else {
|
||||||
|
manuf_id = mp_obj_get_int(vals[2].u_obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_PARAM_RANGE(card_sn, 1, 16)
|
||||||
|
CHECK_PARAM_RANGE(capacity_bytes, ONE_MEBIBYTE,
|
||||||
|
1024 * ONE_MEBIBYTE) // capacity between 1 MiB and 1 GiB
|
||||||
|
|
||||||
|
printf("mod_trezorio_sdcard_switcher_insert, arg: %ld, %ld, %ld\n", card_sn,
|
||||||
|
capacity_bytes, manuf_id);
|
||||||
|
sdcard_mock.inserted = sectrue;
|
||||||
|
set_sdcard_mock_filename(&sdcard_mock, (int)card_sn);
|
||||||
|
sdcard_mock.buffer = NULL;
|
||||||
|
sdcard_mock.serial_number = card_sn;
|
||||||
|
sdcard_mock.capacity_bytes = capacity_bytes;
|
||||||
|
sdcard_mock.blocks = capacity_bytes / SDCARD_BLOCK_SIZE;
|
||||||
|
sdcard_mock.manuf_ID = manuf_id;
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_trezorio_sdcard_switcher_insert_obj, 1,
|
||||||
|
mod_trezorio_sdcard_switcher_insert);
|
||||||
|
|
||||||
|
/// def eject() -> None:
|
||||||
|
/// """
|
||||||
|
/// Ejects SD card from the emulator.
|
||||||
|
/// """
|
||||||
|
STATIC mp_obj_t mod_trezorio_sdcard_switcher_eject() {
|
||||||
|
sdcard_mock.inserted = secfalse;
|
||||||
|
sdcard_mock.buffer = NULL;
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_switcher_eject_obj,
|
||||||
|
mod_trezorio_sdcard_switcher_eject);
|
||||||
|
|
||||||
|
STATIC const mp_rom_map_elem_t mod_trezorio_sdcard_switcher_globals_table[] = {
|
||||||
|
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sdcard_switcher)},
|
||||||
|
{MP_ROM_QSTR(MP_QSTR_insert),
|
||||||
|
MP_ROM_PTR(&mod_trezorio_sdcard_switcher_insert_obj)},
|
||||||
|
{MP_ROM_QSTR(MP_QSTR_eject),
|
||||||
|
MP_ROM_PTR(&mod_trezorio_sdcard_switcher_eject_obj)},
|
||||||
|
};
|
||||||
|
STATIC MP_DEFINE_CONST_DICT(mod_trezorio_sdcard_switcher_globals,
|
||||||
|
mod_trezorio_sdcard_switcher_globals_table);
|
||||||
|
|
||||||
|
STATIC const mp_obj_module_t mod_trezorio_sdcard_switcher_module = {
|
||||||
|
.base = {&mp_type_module},
|
||||||
|
.globals = (mp_obj_dict_t *)&mod_trezorio_sdcard_switcher_globals,
|
||||||
|
};
|
@ -54,10 +54,11 @@ bool usb_connected_previously = true;
|
|||||||
#ifdef USE_SD_CARD
|
#ifdef USE_SD_CARD
|
||||||
#include "modtrezorio-fatfs.h"
|
#include "modtrezorio-fatfs.h"
|
||||||
#include "modtrezorio-sdcard.h"
|
#include "modtrezorio-sdcard.h"
|
||||||
|
#include "modtrezorio-sdcard_switcher.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// package: trezorio.__init__
|
/// package: trezorio.__init__
|
||||||
/// from . import fatfs, sdcard
|
/// from . import fatfs, sdcard, sdcard_switcher
|
||||||
|
|
||||||
/// POLL_READ: int # wait until interface is readable and return read data
|
/// POLL_READ: int # wait until interface is readable and return read data
|
||||||
/// POLL_WRITE: int # wait until interface is writable
|
/// POLL_WRITE: int # wait until interface is writable
|
||||||
@ -87,6 +88,7 @@ STATIC const mp_rom_map_elem_t mp_module_trezorio_globals_table[] = {
|
|||||||
#ifdef USE_SD_CARD
|
#ifdef USE_SD_CARD
|
||||||
{MP_ROM_QSTR(MP_QSTR_fatfs), MP_ROM_PTR(&mod_trezorio_fatfs_module)},
|
{MP_ROM_QSTR(MP_QSTR_fatfs), MP_ROM_PTR(&mod_trezorio_fatfs_module)},
|
||||||
{MP_ROM_QSTR(MP_QSTR_sdcard), MP_ROM_PTR(&mod_trezorio_sdcard_module)},
|
{MP_ROM_QSTR(MP_QSTR_sdcard), MP_ROM_PTR(&mod_trezorio_sdcard_module)},
|
||||||
|
{MP_ROM_QSTR(MP_QSTR_sdcard_switcher), MP_ROM_PTR(&mod_trezorio_sdcard_switcher_module)},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_TOUCH
|
#ifdef USE_TOUCH
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
@ -26,27 +27,24 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "profile.h"
|
|
||||||
#include "sdcard.h"
|
#include "sdcard.h"
|
||||||
|
#include "sdcard_emu_mock.h"
|
||||||
|
|
||||||
#ifndef SDCARD_FILE
|
#define SDCARD_FILE sdcard_mock.filename
|
||||||
#define SDCARD_FILE profile_sdcard_path()
|
#define SDCARD_BUFFER sdcard_mock.buffer
|
||||||
#endif
|
#define SDCARD_SIZE sdcard_mock.capacity_bytes
|
||||||
|
|
||||||
#define SDCARD_SIZE (64 * 1024 * 1024)
|
|
||||||
#define SDCARD_BLOCKS (SDCARD_SIZE / SDCARD_BLOCK_SIZE)
|
#define SDCARD_BLOCKS (SDCARD_SIZE / SDCARD_BLOCK_SIZE)
|
||||||
|
|
||||||
static uint8_t *sdcard_buffer = NULL;
|
|
||||||
static secbool sdcard_powered = secfalse;
|
static secbool sdcard_powered = secfalse;
|
||||||
|
|
||||||
static void sdcard_exit(void) {
|
static void sdcard_exit(void) {
|
||||||
int r = munmap(sdcard_buffer, SDCARD_SIZE);
|
int r = munmap(SDCARD_BUFFER, SDCARD_SIZE);
|
||||||
ensure(sectrue * (r == 0), "munmap failed");
|
ensure(sectrue * (r == 0), "munmap failed");
|
||||||
sdcard_buffer = NULL;
|
SDCARD_BUFFER = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sdcard_init(void) {
|
void sdcard_init(void) {
|
||||||
if (sdcard_buffer != NULL) {
|
if (SDCARD_BUFFER != NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,10 +72,10 @@ void sdcard_init(void) {
|
|||||||
void *map = mmap(0, SDCARD_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
void *map = mmap(0, SDCARD_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||||
ensure(sectrue * (map != MAP_FAILED), "mmap failed");
|
ensure(sectrue * (map != MAP_FAILED), "mmap failed");
|
||||||
|
|
||||||
sdcard_buffer = (uint8_t *)map;
|
SDCARD_BUFFER = (uint8_t *)map;
|
||||||
|
|
||||||
if (should_clear) {
|
if (should_clear) {
|
||||||
for (int i = 0; i < SDCARD_SIZE; ++i) sdcard_buffer[i] = 0xFF;
|
for (int i = 0; i < SDCARD_SIZE; ++i) SDCARD_BUFFER[i] = 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdcard_powered = secfalse;
|
sdcard_powered = secfalse;
|
||||||
@ -85,9 +83,12 @@ void sdcard_init(void) {
|
|||||||
atexit(sdcard_exit);
|
atexit(sdcard_exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
secbool sdcard_is_present(void) { return sectrue; }
|
secbool sdcard_is_present(void) { return sdcard_mock.inserted; }
|
||||||
|
|
||||||
secbool sdcard_power_on(void) {
|
secbool sdcard_power_on(void) {
|
||||||
|
if (sdcard_mock.inserted == secfalse) {
|
||||||
|
return secfalse;
|
||||||
|
}
|
||||||
sdcard_init();
|
sdcard_init();
|
||||||
sdcard_powered = sectrue;
|
sdcard_powered = sectrue;
|
||||||
return sectrue;
|
return sectrue;
|
||||||
@ -110,7 +111,7 @@ secbool sdcard_read_blocks(uint32_t *dest, uint32_t block_num,
|
|||||||
if (num_blocks > SDCARD_BLOCKS - block_num) {
|
if (num_blocks > SDCARD_BLOCKS - block_num) {
|
||||||
return secfalse;
|
return secfalse;
|
||||||
}
|
}
|
||||||
memcpy(dest, sdcard_buffer + block_num * SDCARD_BLOCK_SIZE,
|
memcpy(dest, SDCARD_BUFFER + block_num * SDCARD_BLOCK_SIZE,
|
||||||
num_blocks * SDCARD_BLOCK_SIZE);
|
num_blocks * SDCARD_BLOCK_SIZE);
|
||||||
return sectrue;
|
return sectrue;
|
||||||
}
|
}
|
||||||
@ -126,12 +127,9 @@ secbool sdcard_write_blocks(const uint32_t *src, uint32_t block_num,
|
|||||||
if (num_blocks > SDCARD_BLOCKS - block_num) {
|
if (num_blocks > SDCARD_BLOCKS - block_num) {
|
||||||
return secfalse;
|
return secfalse;
|
||||||
}
|
}
|
||||||
memcpy(sdcard_buffer + block_num * SDCARD_BLOCK_SIZE, src,
|
memcpy(SDCARD_BUFFER + block_num * SDCARD_BLOCK_SIZE, src,
|
||||||
num_blocks * SDCARD_BLOCK_SIZE);
|
num_blocks * SDCARD_BLOCK_SIZE);
|
||||||
return sectrue;
|
return sectrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t __wur sdcard_get_mid(void) {
|
uint64_t __wur sdcard_get_mid(void) { return (uint64_t)sdcard_mock.manuf_ID; }
|
||||||
// TODO mock
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
@ -61,12 +61,6 @@ const char *profile_flash_path(void) {
|
|||||||
return _flash_path;
|
return _flash_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *profile_sdcard_path(void) {
|
|
||||||
SVAR(_sdcard_path);
|
|
||||||
FILE_PATH(_sdcard_path, "/trezor.sdcard");
|
|
||||||
return _sdcard_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *profile_usb_disconnect_path(void) {
|
const char *profile_usb_disconnect_path(void) {
|
||||||
SVAR(_disconnect_path);
|
SVAR(_disconnect_path);
|
||||||
FILE_PATH(_disconnect_path, "/trezor.usb_data_disconnected");
|
FILE_PATH(_disconnect_path, "/trezor.usb_data_disconnected");
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
const char *profile_name(void);
|
const char *profile_name(void);
|
||||||
const char *profile_dir(void);
|
const char *profile_dir(void);
|
||||||
const char *profile_flash_path(void);
|
const char *profile_flash_path(void);
|
||||||
const char *profile_sdcard_path(void);
|
|
||||||
const char *profile_usb_disconnect_path(void);
|
const char *profile_usb_disconnect_path(void);
|
||||||
|
|
||||||
#endif // __TREZOR_PROFILE_H__
|
#endif // __TREZOR_PROFILE_H__
|
||||||
|
68
core/embed/unix/sdcard_emu_mock.c
Normal file
68
core/embed/unix/sdcard_emu_mock.c
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#include "sdcard_emu_mock.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "profile.h"
|
||||||
|
#include "sdcard.h"
|
||||||
|
|
||||||
|
// default SD Card filename serves for unit testing logic which requires SD card
|
||||||
|
// tests with emulator should call debuglink.insert_sdcard(...)
|
||||||
|
#define SDCARD_FILENAME_DEFAULT PROFILE_DIR_DEFAULT "/trezor.sdcard_def"
|
||||||
|
|
||||||
|
// default SD card data
|
||||||
|
SDCardMock sdcard_mock = {
|
||||||
|
.inserted = sectrue,
|
||||||
|
.filename = SDCARD_FILENAME_DEFAULT,
|
||||||
|
.buffer = NULL,
|
||||||
|
.serial_number = 1,
|
||||||
|
.capacity_bytes = 64 * ONE_MEBIBYTE,
|
||||||
|
.blocks = (64 * ONE_MEBIBYTE) / SDCARD_BLOCK_SIZE,
|
||||||
|
.manuf_ID = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
// "not inserted" SD card data
|
||||||
|
/* SDCardMock sdcard_mock = { */
|
||||||
|
/* .inserted = secfalse, */
|
||||||
|
/* .filename = NULL, */
|
||||||
|
/* .buffer = NULL, */
|
||||||
|
/* .serial_number = 0, */
|
||||||
|
/* .capacity_bytes = 0, */
|
||||||
|
/* .blocks = 0 / SDCARD_BLOCK_SIZE, */
|
||||||
|
/* .manuf_ID = 0, */
|
||||||
|
/* }; */
|
||||||
|
|
||||||
|
void set_sdcard_mock_filename(SDCardMock *card, int serial_number) {
|
||||||
|
if (card == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *dir_path = profile_dir();
|
||||||
|
if (dir_path == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the length needed for the new full path
|
||||||
|
// "trezor.sdcardXX" is 15 characters, plus the directory path and null
|
||||||
|
// terminator
|
||||||
|
const int full_path_length =
|
||||||
|
snprintf(NULL, 0, "%s/trezor.sdcard%02d", dir_path, serial_number) + 1;
|
||||||
|
char *new_filename = (char *)malloc(full_path_length);
|
||||||
|
|
||||||
|
if (new_filename == NULL) {
|
||||||
|
// memory allocation failure
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Construct the full path with leading zero in the filename for numbers less
|
||||||
|
// than 10
|
||||||
|
snprintf(new_filename, full_path_length, "%s/trezor.sdcard%02d", dir_path,
|
||||||
|
serial_number);
|
||||||
|
|
||||||
|
// free the old filename
|
||||||
|
if (card->filename != NULL &&
|
||||||
|
strcmp(card->filename, SDCARD_FILENAME_DEFAULT) != 0) {
|
||||||
|
free(card->filename);
|
||||||
|
card->filename = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
card->filename = new_filename;
|
||||||
|
}
|
25
core/embed/unix/sdcard_emu_mock.h
Normal file
25
core/embed/unix/sdcard_emu_mock.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef __TREZOR_SDCARD_EMULATOR_MOCK_H__
|
||||||
|
#define __TREZOR_SDCARD_EMULATOR_MOCK_H__
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "secbool.h"
|
||||||
|
|
||||||
|
#ifndef ONE_MEBIBYTE
|
||||||
|
#define ONE_MEBIBYTE (1024 * 1024)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
secbool inserted;
|
||||||
|
char *filename;
|
||||||
|
uint8_t *buffer;
|
||||||
|
uint32_t serial_number;
|
||||||
|
uint32_t capacity_bytes;
|
||||||
|
uint32_t blocks;
|
||||||
|
uint8_t manuf_ID;
|
||||||
|
} SDCardMock;
|
||||||
|
|
||||||
|
extern SDCardMock sdcard_mock;
|
||||||
|
|
||||||
|
void set_sdcard_mock_filename(SDCardMock *card, int serial_number);
|
||||||
|
|
||||||
|
#endif // __TREZOR_SDCARD_EMULATOR_MOCK_H__
|
@ -33,7 +33,7 @@ PROFILE_BASE = Path.home() / ".trezoremu"
|
|||||||
|
|
||||||
TREZOR_STORAGE_FILES = (
|
TREZOR_STORAGE_FILES = (
|
||||||
"trezor.flash",
|
"trezor.flash",
|
||||||
"trezor.sdcard",
|
*["trezor.sdcard{:02d}".format(i) for i in range(1, 17)],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -190,7 +190,7 @@ class WebUSB:
|
|||||||
"""
|
"""
|
||||||
Sends message using USB WebUSB (device) or UDP (emulator).
|
Sends message using USB WebUSB (device) or UDP (emulator).
|
||||||
"""
|
"""
|
||||||
from . import fatfs, sdcard
|
from . import fatfs, sdcard, sdcard_switcher
|
||||||
POLL_READ: int # wait until interface is readable and return read data
|
POLL_READ: int # wait until interface is readable and return read data
|
||||||
POLL_WRITE: int # wait until interface is writable
|
POLL_WRITE: int # wait until interface is writable
|
||||||
TOUCH: int # interface id of the touch events
|
TOUCH: int # interface id of the touch events
|
||||||
|
19
core/mocks/generated/trezorio/sdcard_switcher.pyi
Normal file
19
core/mocks/generated/trezorio/sdcard_switcher.pyi
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from typing import *
|
||||||
|
|
||||||
|
|
||||||
|
# extmod/modtrezorio/modtrezorio-sdcard_switcher.h
|
||||||
|
def insert(
|
||||||
|
card_sn: int,
|
||||||
|
capacity_bytes: int | None = 122_945_536,
|
||||||
|
manuf_id: int | None = 27,
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
Inserts SD card to the emulator.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
# extmod/modtrezorio/modtrezorio-sdcard_switcher.h
|
||||||
|
def eject() -> None:
|
||||||
|
"""
|
||||||
|
Ejects SD card from the emulator.
|
||||||
|
"""
|
@ -22,6 +22,7 @@ if __debug__:
|
|||||||
DebugLinkDecision,
|
DebugLinkDecision,
|
||||||
DebugLinkEraseSdCard,
|
DebugLinkEraseSdCard,
|
||||||
DebugLinkGetState,
|
DebugLinkGetState,
|
||||||
|
DebugLinkInsertSdCard,
|
||||||
DebugLinkRecordScreen,
|
DebugLinkRecordScreen,
|
||||||
DebugLinkReseedRandom,
|
DebugLinkReseedRandom,
|
||||||
DebugLinkResetDebugEvents,
|
DebugLinkResetDebugEvents,
|
||||||
@ -255,6 +256,21 @@ if __debug__:
|
|||||||
sdcard.power_off()
|
sdcard.power_off()
|
||||||
return Success()
|
return Success()
|
||||||
|
|
||||||
|
async def dispatch_DebugLinkInsertSdCard(msg: DebugLinkInsertSdCard) -> Success:
|
||||||
|
from trezor import io
|
||||||
|
|
||||||
|
sdcard_switcher = io.sdcard_switcher # local_cache_attribute
|
||||||
|
if msg.serial_number is None:
|
||||||
|
sdcard_switcher.eject()
|
||||||
|
else:
|
||||||
|
sdcard_switcher.insert(
|
||||||
|
msg.serial_number,
|
||||||
|
capacity_bytes=msg.capacity_bytes,
|
||||||
|
manuf_id=msg.manuf_ID,
|
||||||
|
)
|
||||||
|
|
||||||
|
return Success()
|
||||||
|
|
||||||
def boot() -> None:
|
def boot() -> None:
|
||||||
register = workflow_handlers.register # local_cache_attribute
|
register = workflow_handlers.register # local_cache_attribute
|
||||||
|
|
||||||
@ -263,6 +279,7 @@ if __debug__:
|
|||||||
register(MessageType.DebugLinkReseedRandom, dispatch_DebugLinkReseedRandom)
|
register(MessageType.DebugLinkReseedRandom, dispatch_DebugLinkReseedRandom)
|
||||||
register(MessageType.DebugLinkRecordScreen, dispatch_DebugLinkRecordScreen)
|
register(MessageType.DebugLinkRecordScreen, dispatch_DebugLinkRecordScreen)
|
||||||
register(MessageType.DebugLinkEraseSdCard, dispatch_DebugLinkEraseSdCard)
|
register(MessageType.DebugLinkEraseSdCard, dispatch_DebugLinkEraseSdCard)
|
||||||
|
register(MessageType.DebugLinkInsertSdCard, dispatch_DebugLinkInsertSdCard)
|
||||||
register(MessageType.DebugLinkWatchLayout, dispatch_DebugLinkWatchLayout)
|
register(MessageType.DebugLinkWatchLayout, dispatch_DebugLinkWatchLayout)
|
||||||
register(
|
register(
|
||||||
MessageType.DebugLinkResetDebugEvents, dispatch_DebugLinkResetDebugEvents
|
MessageType.DebugLinkResetDebugEvents, dispatch_DebugLinkResetDebugEvents
|
||||||
|
@ -92,8 +92,9 @@ DebugLinkLayout = 9001
|
|||||||
DebugLinkReseedRandom = 9002
|
DebugLinkReseedRandom = 9002
|
||||||
DebugLinkRecordScreen = 9003
|
DebugLinkRecordScreen = 9003
|
||||||
DebugLinkEraseSdCard = 9005
|
DebugLinkEraseSdCard = 9005
|
||||||
DebugLinkWatchLayout = 9006
|
DebugLinkInsertSdCard = 9006
|
||||||
DebugLinkResetDebugEvents = 9007
|
DebugLinkWatchLayout = 9007
|
||||||
|
DebugLinkResetDebugEvents = 9008
|
||||||
if not utils.BITCOIN_ONLY:
|
if not utils.BITCOIN_ONLY:
|
||||||
SetU2FCounter = 63
|
SetU2FCounter = 63
|
||||||
GetNextU2FCounter = 80
|
GetNextU2FCounter = 80
|
||||||
|
@ -115,8 +115,9 @@ if TYPE_CHECKING:
|
|||||||
DebugLinkReseedRandom = 9002
|
DebugLinkReseedRandom = 9002
|
||||||
DebugLinkRecordScreen = 9003
|
DebugLinkRecordScreen = 9003
|
||||||
DebugLinkEraseSdCard = 9005
|
DebugLinkEraseSdCard = 9005
|
||||||
DebugLinkWatchLayout = 9006
|
DebugLinkInsertSdCard = 9006
|
||||||
DebugLinkResetDebugEvents = 9007
|
DebugLinkWatchLayout = 9007
|
||||||
|
DebugLinkResetDebugEvents = 9008
|
||||||
EthereumGetPublicKey = 450
|
EthereumGetPublicKey = 450
|
||||||
EthereumPublicKey = 451
|
EthereumPublicKey = 451
|
||||||
EthereumGetAddress = 56
|
EthereumGetAddress = 56
|
||||||
|
@ -2923,6 +2923,24 @@ if TYPE_CHECKING:
|
|||||||
def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkEraseSdCard"]:
|
def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkEraseSdCard"]:
|
||||||
return isinstance(msg, cls)
|
return isinstance(msg, cls)
|
||||||
|
|
||||||
|
class DebugLinkInsertSdCard(protobuf.MessageType):
|
||||||
|
serial_number: "int | None"
|
||||||
|
capacity_bytes: "int | None"
|
||||||
|
manuf_ID: "int | None"
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
serial_number: "int | None" = None,
|
||||||
|
capacity_bytes: "int | None" = None,
|
||||||
|
manuf_ID: "int | None" = None,
|
||||||
|
) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkInsertSdCard"]:
|
||||||
|
return isinstance(msg, cls)
|
||||||
|
|
||||||
class DebugLinkWatchLayout(protobuf.MessageType):
|
class DebugLinkWatchLayout(protobuf.MessageType):
|
||||||
watch: "bool | None"
|
watch: "bool | None"
|
||||||
|
|
||||||
|
@ -241,9 +241,10 @@ class CoreEmulator(Emulator):
|
|||||||
if workdir is not None:
|
if workdir is not None:
|
||||||
self.workdir = Path(workdir).resolve()
|
self.workdir = Path(workdir).resolve()
|
||||||
|
|
||||||
self.sdcard = self.profile_dir / "trezor.sdcard"
|
# FIXME does not work with switchable SD cards
|
||||||
if sdcard is not None:
|
# self.sdcard = self.profile_dir / "trezor.sdcard"
|
||||||
self.sdcard.write_bytes(sdcard)
|
# if sdcard is not None:
|
||||||
|
# self.sdcard.write_bytes(sdcard)
|
||||||
|
|
||||||
if port:
|
if port:
|
||||||
self.port = port
|
self.port = port
|
||||||
@ -274,6 +275,11 @@ class CoreEmulator(Emulator):
|
|||||||
+ self.extra_args
|
+ self.extra_args
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def stop(self) -> None:
|
||||||
|
super().stop()
|
||||||
|
for i in range(1, 17):
|
||||||
|
_rm_f(self.profile_dir / "trezor.sdcard{:02d}".format(i))
|
||||||
|
|
||||||
|
|
||||||
class LegacyEmulator(Emulator):
|
class LegacyEmulator(Emulator):
|
||||||
STORAGE_FILENAME = "emulator.img"
|
STORAGE_FILENAME = "emulator.img"
|
||||||
|
@ -370,6 +370,7 @@ class DebugLink:
|
|||||||
# To be set by TrezorClientDebugLink (is not known during creation time)
|
# To be set by TrezorClientDebugLink (is not known during creation time)
|
||||||
self.model: Optional[str] = None
|
self.model: Optional[str] = None
|
||||||
self.version: Tuple[int, int, int] = (0, 0, 0)
|
self.version: Tuple[int, int, int] = (0, 0, 0)
|
||||||
|
self.is_emulator: bool = False
|
||||||
|
|
||||||
# Where screenshots are being saved
|
# Where screenshots are being saved
|
||||||
self.screenshot_recording_dir: Optional[str] = None
|
self.screenshot_recording_dir: Optional[str] = None
|
||||||
@ -739,6 +740,33 @@ class DebugLink:
|
|||||||
def erase_sd_card(self, format: bool = True) -> messages.Success:
|
def erase_sd_card(self, format: bool = True) -> messages.Success:
|
||||||
return self._call(messages.DebugLinkEraseSdCard(format=format))
|
return self._call(messages.DebugLinkEraseSdCard(format=format))
|
||||||
|
|
||||||
|
@expect(messages.Success)
|
||||||
|
def insert_sd_card(
|
||||||
|
self,
|
||||||
|
serial_number: int = 1,
|
||||||
|
capacity_bytes: Optional[int] = None,
|
||||||
|
manuf_ID: Optional[int] = None,
|
||||||
|
) -> messages.Success:
|
||||||
|
if not self.model == "T":
|
||||||
|
raise RuntimeError("SD card not supported by this device.")
|
||||||
|
if not self.is_emulator:
|
||||||
|
raise RuntimeError("SD card mocking is only supported on emulator.")
|
||||||
|
return self._call(
|
||||||
|
messages.DebugLinkInsertSdCard(
|
||||||
|
serial_number=serial_number,
|
||||||
|
capacity_bytes=capacity_bytes,
|
||||||
|
manuf_ID=manuf_ID,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
@expect(messages.Success)
|
||||||
|
def eject_sd_card(self) -> messages.Success:
|
||||||
|
if not self.model == "T":
|
||||||
|
raise RuntimeError("SD card not supported by this device.")
|
||||||
|
if not self.is_emulator:
|
||||||
|
raise RuntimeError("SD card mocking is only supported on emulator.")
|
||||||
|
return self._call(messages.DebugLinkInsertSdCard(serial_number=None))
|
||||||
|
|
||||||
def take_t1_screenshot_if_relevant(self) -> None:
|
def take_t1_screenshot_if_relevant(self) -> None:
|
||||||
"""Conditionally take screenshots on T1.
|
"""Conditionally take screenshots on T1.
|
||||||
|
|
||||||
@ -976,6 +1004,7 @@ class TrezorClientDebugLink(TrezorClient):
|
|||||||
# and know the supported debug capabilities
|
# and know the supported debug capabilities
|
||||||
self.debug.model = self.features.model
|
self.debug.model = self.features.model
|
||||||
self.debug.version = self.version
|
self.debug.version = self.version
|
||||||
|
self.debug.is_emulator = self.is_emulator()
|
||||||
|
|
||||||
def reset_debug_features(self) -> None:
|
def reset_debug_features(self) -> None:
|
||||||
"""Prepare the debugging client for a new testcase.
|
"""Prepare the debugging client for a new testcase.
|
||||||
@ -1233,6 +1262,10 @@ class TrezorClientDebugLink(TrezorClient):
|
|||||||
|
|
||||||
raise RuntimeError("Unexpected call")
|
raise RuntimeError("Unexpected call")
|
||||||
|
|
||||||
|
def is_emulator(self) -> bool:
|
||||||
|
"""Check if we are connected to emulator, in contrast to hardware device."""
|
||||||
|
return self.features.fw_vendor == "EMULATOR"
|
||||||
|
|
||||||
|
|
||||||
@expect(messages.Success, field="message", ret_type=str)
|
@expect(messages.Success, field="message", ret_type=str)
|
||||||
def load_device(
|
def load_device(
|
||||||
@ -1310,7 +1343,7 @@ def record_screen(
|
|||||||
session_dir.mkdir(parents=True, exist_ok=True)
|
session_dir.mkdir(parents=True, exist_ok=True)
|
||||||
return session_dir
|
return session_dir
|
||||||
|
|
||||||
if not _is_emulator(debug_client):
|
if not debug_client.is_emulator():
|
||||||
raise RuntimeError("Recording is only supported on emulator.")
|
raise RuntimeError("Recording is only supported on emulator.")
|
||||||
|
|
||||||
if directory is None:
|
if directory is None:
|
||||||
@ -1329,8 +1362,3 @@ def record_screen(
|
|||||||
debug_client.debug.start_recording(str(current_session_dir))
|
debug_client.debug.start_recording(str(current_session_dir))
|
||||||
if report_func is not None:
|
if report_func is not None:
|
||||||
report_func(f"Recording started into {current_session_dir}.")
|
report_func(f"Recording started into {current_session_dir}.")
|
||||||
|
|
||||||
|
|
||||||
def _is_emulator(debug_client: "TrezorClientDebugLink") -> bool:
|
|
||||||
"""Check if we are connected to emulator, in contrast to hardware device."""
|
|
||||||
return debug_client.features.fw_vendor == "EMULATOR"
|
|
||||||
|
@ -123,8 +123,9 @@ class MessageType(IntEnum):
|
|||||||
DebugLinkReseedRandom = 9002
|
DebugLinkReseedRandom = 9002
|
||||||
DebugLinkRecordScreen = 9003
|
DebugLinkRecordScreen = 9003
|
||||||
DebugLinkEraseSdCard = 9005
|
DebugLinkEraseSdCard = 9005
|
||||||
DebugLinkWatchLayout = 9006
|
DebugLinkInsertSdCard = 9006
|
||||||
DebugLinkResetDebugEvents = 9007
|
DebugLinkWatchLayout = 9007
|
||||||
|
DebugLinkResetDebugEvents = 9008
|
||||||
EthereumGetPublicKey = 450
|
EthereumGetPublicKey = 450
|
||||||
EthereumPublicKey = 451
|
EthereumPublicKey = 451
|
||||||
EthereumGetAddress = 56
|
EthereumGetAddress = 56
|
||||||
@ -4084,8 +4085,28 @@ class DebugLinkEraseSdCard(protobuf.MessageType):
|
|||||||
self.format = format
|
self.format = format
|
||||||
|
|
||||||
|
|
||||||
class DebugLinkWatchLayout(protobuf.MessageType):
|
class DebugLinkInsertSdCard(protobuf.MessageType):
|
||||||
MESSAGE_WIRE_TYPE = 9006
|
MESSAGE_WIRE_TYPE = 9006
|
||||||
|
FIELDS = {
|
||||||
|
1: protobuf.Field("serial_number", "uint32", repeated=False, required=False, default=None),
|
||||||
|
2: protobuf.Field("capacity_bytes", "uint32", repeated=False, required=False, default=None),
|
||||||
|
3: protobuf.Field("manuf_ID", "uint32", repeated=False, required=False, default=None),
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
serial_number: Optional["int"] = None,
|
||||||
|
capacity_bytes: Optional["int"] = None,
|
||||||
|
manuf_ID: Optional["int"] = None,
|
||||||
|
) -> None:
|
||||||
|
self.serial_number = serial_number
|
||||||
|
self.capacity_bytes = capacity_bytes
|
||||||
|
self.manuf_ID = manuf_ID
|
||||||
|
|
||||||
|
|
||||||
|
class DebugLinkWatchLayout(protobuf.MessageType):
|
||||||
|
MESSAGE_WIRE_TYPE = 9007
|
||||||
FIELDS = {
|
FIELDS = {
|
||||||
1: protobuf.Field("watch", "bool", repeated=False, required=False, default=None),
|
1: protobuf.Field("watch", "bool", repeated=False, required=False, default=None),
|
||||||
}
|
}
|
||||||
@ -4099,7 +4120,7 @@ class DebugLinkWatchLayout(protobuf.MessageType):
|
|||||||
|
|
||||||
|
|
||||||
class DebugLinkResetDebugEvents(protobuf.MessageType):
|
class DebugLinkResetDebugEvents(protobuf.MessageType):
|
||||||
MESSAGE_WIRE_TYPE = 9007
|
MESSAGE_WIRE_TYPE = 9008
|
||||||
|
|
||||||
|
|
||||||
class EosGetPublicKey(protobuf.MessageType):
|
class EosGetPublicKey(protobuf.MessageType):
|
||||||
|
1
rust/trezor-client/src/messages/generated.rs
generated
1
rust/trezor-client/src/messages/generated.rs
generated
@ -77,6 +77,7 @@ trezor_message_impl! {
|
|||||||
DebugLinkReseedRandom => MessageType_DebugLinkReseedRandom,
|
DebugLinkReseedRandom => MessageType_DebugLinkReseedRandom,
|
||||||
DebugLinkRecordScreen => MessageType_DebugLinkRecordScreen,
|
DebugLinkRecordScreen => MessageType_DebugLinkRecordScreen,
|
||||||
DebugLinkEraseSdCard => MessageType_DebugLinkEraseSdCard,
|
DebugLinkEraseSdCard => MessageType_DebugLinkEraseSdCard,
|
||||||
|
DebugLinkInsertSdCard => MessageType_DebugLinkInsertSdCard,
|
||||||
DebugLinkWatchLayout => MessageType_DebugLinkWatchLayout,
|
DebugLinkWatchLayout => MessageType_DebugLinkWatchLayout,
|
||||||
DebugLinkResetDebugEvents => MessageType_DebugLinkResetDebugEvents,
|
DebugLinkResetDebugEvents => MessageType_DebugLinkResetDebugEvents,
|
||||||
}
|
}
|
||||||
|
465
rust/trezor-client/src/protos/generated/messages.rs
generated
465
rust/trezor-client/src/protos/generated/messages.rs
generated
@ -216,10 +216,12 @@ pub enum MessageType {
|
|||||||
MessageType_DebugLinkRecordScreen = 9003,
|
MessageType_DebugLinkRecordScreen = 9003,
|
||||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkEraseSdCard)
|
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkEraseSdCard)
|
||||||
MessageType_DebugLinkEraseSdCard = 9005,
|
MessageType_DebugLinkEraseSdCard = 9005,
|
||||||
|
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkInsertSdCard)
|
||||||
|
MessageType_DebugLinkInsertSdCard = 9006,
|
||||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkWatchLayout)
|
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkWatchLayout)
|
||||||
MessageType_DebugLinkWatchLayout = 9006,
|
MessageType_DebugLinkWatchLayout = 9007,
|
||||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkResetDebugEvents)
|
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkResetDebugEvents)
|
||||||
MessageType_DebugLinkResetDebugEvents = 9007,
|
MessageType_DebugLinkResetDebugEvents = 9008,
|
||||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EthereumGetPublicKey)
|
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EthereumGetPublicKey)
|
||||||
MessageType_EthereumGetPublicKey = 450,
|
MessageType_EthereumGetPublicKey = 450,
|
||||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EthereumPublicKey)
|
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EthereumPublicKey)
|
||||||
@ -613,8 +615,9 @@ impl ::protobuf::Enum for MessageType {
|
|||||||
9002 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkReseedRandom),
|
9002 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkReseedRandom),
|
||||||
9003 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkRecordScreen),
|
9003 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkRecordScreen),
|
||||||
9005 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkEraseSdCard),
|
9005 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkEraseSdCard),
|
||||||
9006 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout),
|
9006 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkInsertSdCard),
|
||||||
9007 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents),
|
9007 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout),
|
||||||
|
9008 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents),
|
||||||
450 => ::std::option::Option::Some(MessageType::MessageType_EthereumGetPublicKey),
|
450 => ::std::option::Option::Some(MessageType::MessageType_EthereumGetPublicKey),
|
||||||
451 => ::std::option::Option::Some(MessageType::MessageType_EthereumPublicKey),
|
451 => ::std::option::Option::Some(MessageType::MessageType_EthereumPublicKey),
|
||||||
56 => ::std::option::Option::Some(MessageType::MessageType_EthereumGetAddress),
|
56 => ::std::option::Option::Some(MessageType::MessageType_EthereumGetAddress),
|
||||||
@ -859,6 +862,7 @@ impl ::protobuf::Enum for MessageType {
|
|||||||
"MessageType_DebugLinkReseedRandom" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkReseedRandom),
|
"MessageType_DebugLinkReseedRandom" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkReseedRandom),
|
||||||
"MessageType_DebugLinkRecordScreen" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkRecordScreen),
|
"MessageType_DebugLinkRecordScreen" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkRecordScreen),
|
||||||
"MessageType_DebugLinkEraseSdCard" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkEraseSdCard),
|
"MessageType_DebugLinkEraseSdCard" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkEraseSdCard),
|
||||||
|
"MessageType_DebugLinkInsertSdCard" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkInsertSdCard),
|
||||||
"MessageType_DebugLinkWatchLayout" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout),
|
"MessageType_DebugLinkWatchLayout" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout),
|
||||||
"MessageType_DebugLinkResetDebugEvents" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents),
|
"MessageType_DebugLinkResetDebugEvents" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents),
|
||||||
"MessageType_EthereumGetPublicKey" => ::std::option::Option::Some(MessageType::MessageType_EthereumGetPublicKey),
|
"MessageType_EthereumGetPublicKey" => ::std::option::Option::Some(MessageType::MessageType_EthereumGetPublicKey),
|
||||||
@ -1104,6 +1108,7 @@ impl ::protobuf::Enum for MessageType {
|
|||||||
MessageType::MessageType_DebugLinkReseedRandom,
|
MessageType::MessageType_DebugLinkReseedRandom,
|
||||||
MessageType::MessageType_DebugLinkRecordScreen,
|
MessageType::MessageType_DebugLinkRecordScreen,
|
||||||
MessageType::MessageType_DebugLinkEraseSdCard,
|
MessageType::MessageType_DebugLinkEraseSdCard,
|
||||||
|
MessageType::MessageType_DebugLinkInsertSdCard,
|
||||||
MessageType::MessageType_DebugLinkWatchLayout,
|
MessageType::MessageType_DebugLinkWatchLayout,
|
||||||
MessageType::MessageType_DebugLinkResetDebugEvents,
|
MessageType::MessageType_DebugLinkResetDebugEvents,
|
||||||
MessageType::MessageType_EthereumGetPublicKey,
|
MessageType::MessageType_EthereumGetPublicKey,
|
||||||
@ -1355,152 +1360,153 @@ impl ::protobuf::EnumFull for MessageType {
|
|||||||
MessageType::MessageType_DebugLinkReseedRandom => 91,
|
MessageType::MessageType_DebugLinkReseedRandom => 91,
|
||||||
MessageType::MessageType_DebugLinkRecordScreen => 92,
|
MessageType::MessageType_DebugLinkRecordScreen => 92,
|
||||||
MessageType::MessageType_DebugLinkEraseSdCard => 93,
|
MessageType::MessageType_DebugLinkEraseSdCard => 93,
|
||||||
MessageType::MessageType_DebugLinkWatchLayout => 94,
|
MessageType::MessageType_DebugLinkInsertSdCard => 94,
|
||||||
MessageType::MessageType_DebugLinkResetDebugEvents => 95,
|
MessageType::MessageType_DebugLinkWatchLayout => 95,
|
||||||
MessageType::MessageType_EthereumGetPublicKey => 96,
|
MessageType::MessageType_DebugLinkResetDebugEvents => 96,
|
||||||
MessageType::MessageType_EthereumPublicKey => 97,
|
MessageType::MessageType_EthereumGetPublicKey => 97,
|
||||||
MessageType::MessageType_EthereumGetAddress => 98,
|
MessageType::MessageType_EthereumPublicKey => 98,
|
||||||
MessageType::MessageType_EthereumAddress => 99,
|
MessageType::MessageType_EthereumGetAddress => 99,
|
||||||
MessageType::MessageType_EthereumSignTx => 100,
|
MessageType::MessageType_EthereumAddress => 100,
|
||||||
MessageType::MessageType_EthereumSignTxEIP1559 => 101,
|
MessageType::MessageType_EthereumSignTx => 101,
|
||||||
MessageType::MessageType_EthereumTxRequest => 102,
|
MessageType::MessageType_EthereumSignTxEIP1559 => 102,
|
||||||
MessageType::MessageType_EthereumTxAck => 103,
|
MessageType::MessageType_EthereumTxRequest => 103,
|
||||||
MessageType::MessageType_EthereumSignMessage => 104,
|
MessageType::MessageType_EthereumTxAck => 104,
|
||||||
MessageType::MessageType_EthereumVerifyMessage => 105,
|
MessageType::MessageType_EthereumSignMessage => 105,
|
||||||
MessageType::MessageType_EthereumMessageSignature => 106,
|
MessageType::MessageType_EthereumVerifyMessage => 106,
|
||||||
MessageType::MessageType_EthereumSignTypedData => 107,
|
MessageType::MessageType_EthereumMessageSignature => 107,
|
||||||
MessageType::MessageType_EthereumTypedDataStructRequest => 108,
|
MessageType::MessageType_EthereumSignTypedData => 108,
|
||||||
MessageType::MessageType_EthereumTypedDataStructAck => 109,
|
MessageType::MessageType_EthereumTypedDataStructRequest => 109,
|
||||||
MessageType::MessageType_EthereumTypedDataValueRequest => 110,
|
MessageType::MessageType_EthereumTypedDataStructAck => 110,
|
||||||
MessageType::MessageType_EthereumTypedDataValueAck => 111,
|
MessageType::MessageType_EthereumTypedDataValueRequest => 111,
|
||||||
MessageType::MessageType_EthereumTypedDataSignature => 112,
|
MessageType::MessageType_EthereumTypedDataValueAck => 112,
|
||||||
MessageType::MessageType_EthereumSignTypedHash => 113,
|
MessageType::MessageType_EthereumTypedDataSignature => 113,
|
||||||
MessageType::MessageType_NEMGetAddress => 114,
|
MessageType::MessageType_EthereumSignTypedHash => 114,
|
||||||
MessageType::MessageType_NEMAddress => 115,
|
MessageType::MessageType_NEMGetAddress => 115,
|
||||||
MessageType::MessageType_NEMSignTx => 116,
|
MessageType::MessageType_NEMAddress => 116,
|
||||||
MessageType::MessageType_NEMSignedTx => 117,
|
MessageType::MessageType_NEMSignTx => 117,
|
||||||
MessageType::MessageType_NEMDecryptMessage => 118,
|
MessageType::MessageType_NEMSignedTx => 118,
|
||||||
MessageType::MessageType_NEMDecryptedMessage => 119,
|
MessageType::MessageType_NEMDecryptMessage => 119,
|
||||||
MessageType::MessageType_TezosGetAddress => 120,
|
MessageType::MessageType_NEMDecryptedMessage => 120,
|
||||||
MessageType::MessageType_TezosAddress => 121,
|
MessageType::MessageType_TezosGetAddress => 121,
|
||||||
MessageType::MessageType_TezosSignTx => 122,
|
MessageType::MessageType_TezosAddress => 122,
|
||||||
MessageType::MessageType_TezosSignedTx => 123,
|
MessageType::MessageType_TezosSignTx => 123,
|
||||||
MessageType::MessageType_TezosGetPublicKey => 124,
|
MessageType::MessageType_TezosSignedTx => 124,
|
||||||
MessageType::MessageType_TezosPublicKey => 125,
|
MessageType::MessageType_TezosGetPublicKey => 125,
|
||||||
MessageType::MessageType_StellarSignTx => 126,
|
MessageType::MessageType_TezosPublicKey => 126,
|
||||||
MessageType::MessageType_StellarTxOpRequest => 127,
|
MessageType::MessageType_StellarSignTx => 127,
|
||||||
MessageType::MessageType_StellarGetAddress => 128,
|
MessageType::MessageType_StellarTxOpRequest => 128,
|
||||||
MessageType::MessageType_StellarAddress => 129,
|
MessageType::MessageType_StellarGetAddress => 129,
|
||||||
MessageType::MessageType_StellarCreateAccountOp => 130,
|
MessageType::MessageType_StellarAddress => 130,
|
||||||
MessageType::MessageType_StellarPaymentOp => 131,
|
MessageType::MessageType_StellarCreateAccountOp => 131,
|
||||||
MessageType::MessageType_StellarPathPaymentStrictReceiveOp => 132,
|
MessageType::MessageType_StellarPaymentOp => 132,
|
||||||
MessageType::MessageType_StellarManageSellOfferOp => 133,
|
MessageType::MessageType_StellarPathPaymentStrictReceiveOp => 133,
|
||||||
MessageType::MessageType_StellarCreatePassiveSellOfferOp => 134,
|
MessageType::MessageType_StellarManageSellOfferOp => 134,
|
||||||
MessageType::MessageType_StellarSetOptionsOp => 135,
|
MessageType::MessageType_StellarCreatePassiveSellOfferOp => 135,
|
||||||
MessageType::MessageType_StellarChangeTrustOp => 136,
|
MessageType::MessageType_StellarSetOptionsOp => 136,
|
||||||
MessageType::MessageType_StellarAllowTrustOp => 137,
|
MessageType::MessageType_StellarChangeTrustOp => 137,
|
||||||
MessageType::MessageType_StellarAccountMergeOp => 138,
|
MessageType::MessageType_StellarAllowTrustOp => 138,
|
||||||
MessageType::MessageType_StellarManageDataOp => 139,
|
MessageType::MessageType_StellarAccountMergeOp => 139,
|
||||||
MessageType::MessageType_StellarBumpSequenceOp => 140,
|
MessageType::MessageType_StellarManageDataOp => 140,
|
||||||
MessageType::MessageType_StellarManageBuyOfferOp => 141,
|
MessageType::MessageType_StellarBumpSequenceOp => 141,
|
||||||
MessageType::MessageType_StellarPathPaymentStrictSendOp => 142,
|
MessageType::MessageType_StellarManageBuyOfferOp => 142,
|
||||||
MessageType::MessageType_StellarClaimClaimableBalanceOp => 143,
|
MessageType::MessageType_StellarPathPaymentStrictSendOp => 143,
|
||||||
MessageType::MessageType_StellarSignedTx => 144,
|
MessageType::MessageType_StellarClaimClaimableBalanceOp => 144,
|
||||||
MessageType::MessageType_CardanoGetPublicKey => 145,
|
MessageType::MessageType_StellarSignedTx => 145,
|
||||||
MessageType::MessageType_CardanoPublicKey => 146,
|
MessageType::MessageType_CardanoGetPublicKey => 146,
|
||||||
MessageType::MessageType_CardanoGetAddress => 147,
|
MessageType::MessageType_CardanoPublicKey => 147,
|
||||||
MessageType::MessageType_CardanoAddress => 148,
|
MessageType::MessageType_CardanoGetAddress => 148,
|
||||||
MessageType::MessageType_CardanoTxItemAck => 149,
|
MessageType::MessageType_CardanoAddress => 149,
|
||||||
MessageType::MessageType_CardanoTxAuxiliaryDataSupplement => 150,
|
MessageType::MessageType_CardanoTxItemAck => 150,
|
||||||
MessageType::MessageType_CardanoTxWitnessRequest => 151,
|
MessageType::MessageType_CardanoTxAuxiliaryDataSupplement => 151,
|
||||||
MessageType::MessageType_CardanoTxWitnessResponse => 152,
|
MessageType::MessageType_CardanoTxWitnessRequest => 152,
|
||||||
MessageType::MessageType_CardanoTxHostAck => 153,
|
MessageType::MessageType_CardanoTxWitnessResponse => 153,
|
||||||
MessageType::MessageType_CardanoTxBodyHash => 154,
|
MessageType::MessageType_CardanoTxHostAck => 154,
|
||||||
MessageType::MessageType_CardanoSignTxFinished => 155,
|
MessageType::MessageType_CardanoTxBodyHash => 155,
|
||||||
MessageType::MessageType_CardanoSignTxInit => 156,
|
MessageType::MessageType_CardanoSignTxFinished => 156,
|
||||||
MessageType::MessageType_CardanoTxInput => 157,
|
MessageType::MessageType_CardanoSignTxInit => 157,
|
||||||
MessageType::MessageType_CardanoTxOutput => 158,
|
MessageType::MessageType_CardanoTxInput => 158,
|
||||||
MessageType::MessageType_CardanoAssetGroup => 159,
|
MessageType::MessageType_CardanoTxOutput => 159,
|
||||||
MessageType::MessageType_CardanoToken => 160,
|
MessageType::MessageType_CardanoAssetGroup => 160,
|
||||||
MessageType::MessageType_CardanoTxCertificate => 161,
|
MessageType::MessageType_CardanoToken => 161,
|
||||||
MessageType::MessageType_CardanoTxWithdrawal => 162,
|
MessageType::MessageType_CardanoTxCertificate => 162,
|
||||||
MessageType::MessageType_CardanoTxAuxiliaryData => 163,
|
MessageType::MessageType_CardanoTxWithdrawal => 163,
|
||||||
MessageType::MessageType_CardanoPoolOwner => 164,
|
MessageType::MessageType_CardanoTxAuxiliaryData => 164,
|
||||||
MessageType::MessageType_CardanoPoolRelayParameters => 165,
|
MessageType::MessageType_CardanoPoolOwner => 165,
|
||||||
MessageType::MessageType_CardanoGetNativeScriptHash => 166,
|
MessageType::MessageType_CardanoPoolRelayParameters => 166,
|
||||||
MessageType::MessageType_CardanoNativeScriptHash => 167,
|
MessageType::MessageType_CardanoGetNativeScriptHash => 167,
|
||||||
MessageType::MessageType_CardanoTxMint => 168,
|
MessageType::MessageType_CardanoNativeScriptHash => 168,
|
||||||
MessageType::MessageType_CardanoTxCollateralInput => 169,
|
MessageType::MessageType_CardanoTxMint => 169,
|
||||||
MessageType::MessageType_CardanoTxRequiredSigner => 170,
|
MessageType::MessageType_CardanoTxCollateralInput => 170,
|
||||||
MessageType::MessageType_CardanoTxInlineDatumChunk => 171,
|
MessageType::MessageType_CardanoTxRequiredSigner => 171,
|
||||||
MessageType::MessageType_CardanoTxReferenceScriptChunk => 172,
|
MessageType::MessageType_CardanoTxInlineDatumChunk => 172,
|
||||||
MessageType::MessageType_CardanoTxReferenceInput => 173,
|
MessageType::MessageType_CardanoTxReferenceScriptChunk => 173,
|
||||||
MessageType::MessageType_RippleGetAddress => 174,
|
MessageType::MessageType_CardanoTxReferenceInput => 174,
|
||||||
MessageType::MessageType_RippleAddress => 175,
|
MessageType::MessageType_RippleGetAddress => 175,
|
||||||
MessageType::MessageType_RippleSignTx => 176,
|
MessageType::MessageType_RippleAddress => 176,
|
||||||
MessageType::MessageType_RippleSignedTx => 177,
|
MessageType::MessageType_RippleSignTx => 177,
|
||||||
MessageType::MessageType_MoneroTransactionInitRequest => 178,
|
MessageType::MessageType_RippleSignedTx => 178,
|
||||||
MessageType::MessageType_MoneroTransactionInitAck => 179,
|
MessageType::MessageType_MoneroTransactionInitRequest => 179,
|
||||||
MessageType::MessageType_MoneroTransactionSetInputRequest => 180,
|
MessageType::MessageType_MoneroTransactionInitAck => 180,
|
||||||
MessageType::MessageType_MoneroTransactionSetInputAck => 181,
|
MessageType::MessageType_MoneroTransactionSetInputRequest => 181,
|
||||||
MessageType::MessageType_MoneroTransactionInputViniRequest => 182,
|
MessageType::MessageType_MoneroTransactionSetInputAck => 182,
|
||||||
MessageType::MessageType_MoneroTransactionInputViniAck => 183,
|
MessageType::MessageType_MoneroTransactionInputViniRequest => 183,
|
||||||
MessageType::MessageType_MoneroTransactionAllInputsSetRequest => 184,
|
MessageType::MessageType_MoneroTransactionInputViniAck => 184,
|
||||||
MessageType::MessageType_MoneroTransactionAllInputsSetAck => 185,
|
MessageType::MessageType_MoneroTransactionAllInputsSetRequest => 185,
|
||||||
MessageType::MessageType_MoneroTransactionSetOutputRequest => 186,
|
MessageType::MessageType_MoneroTransactionAllInputsSetAck => 186,
|
||||||
MessageType::MessageType_MoneroTransactionSetOutputAck => 187,
|
MessageType::MessageType_MoneroTransactionSetOutputRequest => 187,
|
||||||
MessageType::MessageType_MoneroTransactionAllOutSetRequest => 188,
|
MessageType::MessageType_MoneroTransactionSetOutputAck => 188,
|
||||||
MessageType::MessageType_MoneroTransactionAllOutSetAck => 189,
|
MessageType::MessageType_MoneroTransactionAllOutSetRequest => 189,
|
||||||
MessageType::MessageType_MoneroTransactionSignInputRequest => 190,
|
MessageType::MessageType_MoneroTransactionAllOutSetAck => 190,
|
||||||
MessageType::MessageType_MoneroTransactionSignInputAck => 191,
|
MessageType::MessageType_MoneroTransactionSignInputRequest => 191,
|
||||||
MessageType::MessageType_MoneroTransactionFinalRequest => 192,
|
MessageType::MessageType_MoneroTransactionSignInputAck => 192,
|
||||||
MessageType::MessageType_MoneroTransactionFinalAck => 193,
|
MessageType::MessageType_MoneroTransactionFinalRequest => 193,
|
||||||
MessageType::MessageType_MoneroKeyImageExportInitRequest => 194,
|
MessageType::MessageType_MoneroTransactionFinalAck => 194,
|
||||||
MessageType::MessageType_MoneroKeyImageExportInitAck => 195,
|
MessageType::MessageType_MoneroKeyImageExportInitRequest => 195,
|
||||||
MessageType::MessageType_MoneroKeyImageSyncStepRequest => 196,
|
MessageType::MessageType_MoneroKeyImageExportInitAck => 196,
|
||||||
MessageType::MessageType_MoneroKeyImageSyncStepAck => 197,
|
MessageType::MessageType_MoneroKeyImageSyncStepRequest => 197,
|
||||||
MessageType::MessageType_MoneroKeyImageSyncFinalRequest => 198,
|
MessageType::MessageType_MoneroKeyImageSyncStepAck => 198,
|
||||||
MessageType::MessageType_MoneroKeyImageSyncFinalAck => 199,
|
MessageType::MessageType_MoneroKeyImageSyncFinalRequest => 199,
|
||||||
MessageType::MessageType_MoneroGetAddress => 200,
|
MessageType::MessageType_MoneroKeyImageSyncFinalAck => 200,
|
||||||
MessageType::MessageType_MoneroAddress => 201,
|
MessageType::MessageType_MoneroGetAddress => 201,
|
||||||
MessageType::MessageType_MoneroGetWatchKey => 202,
|
MessageType::MessageType_MoneroAddress => 202,
|
||||||
MessageType::MessageType_MoneroWatchKey => 203,
|
MessageType::MessageType_MoneroGetWatchKey => 203,
|
||||||
MessageType::MessageType_DebugMoneroDiagRequest => 204,
|
MessageType::MessageType_MoneroWatchKey => 204,
|
||||||
MessageType::MessageType_DebugMoneroDiagAck => 205,
|
MessageType::MessageType_DebugMoneroDiagRequest => 205,
|
||||||
MessageType::MessageType_MoneroGetTxKeyRequest => 206,
|
MessageType::MessageType_DebugMoneroDiagAck => 206,
|
||||||
MessageType::MessageType_MoneroGetTxKeyAck => 207,
|
MessageType::MessageType_MoneroGetTxKeyRequest => 207,
|
||||||
MessageType::MessageType_MoneroLiveRefreshStartRequest => 208,
|
MessageType::MessageType_MoneroGetTxKeyAck => 208,
|
||||||
MessageType::MessageType_MoneroLiveRefreshStartAck => 209,
|
MessageType::MessageType_MoneroLiveRefreshStartRequest => 209,
|
||||||
MessageType::MessageType_MoneroLiveRefreshStepRequest => 210,
|
MessageType::MessageType_MoneroLiveRefreshStartAck => 210,
|
||||||
MessageType::MessageType_MoneroLiveRefreshStepAck => 211,
|
MessageType::MessageType_MoneroLiveRefreshStepRequest => 211,
|
||||||
MessageType::MessageType_MoneroLiveRefreshFinalRequest => 212,
|
MessageType::MessageType_MoneroLiveRefreshStepAck => 212,
|
||||||
MessageType::MessageType_MoneroLiveRefreshFinalAck => 213,
|
MessageType::MessageType_MoneroLiveRefreshFinalRequest => 213,
|
||||||
MessageType::MessageType_EosGetPublicKey => 214,
|
MessageType::MessageType_MoneroLiveRefreshFinalAck => 214,
|
||||||
MessageType::MessageType_EosPublicKey => 215,
|
MessageType::MessageType_EosGetPublicKey => 215,
|
||||||
MessageType::MessageType_EosSignTx => 216,
|
MessageType::MessageType_EosPublicKey => 216,
|
||||||
MessageType::MessageType_EosTxActionRequest => 217,
|
MessageType::MessageType_EosSignTx => 217,
|
||||||
MessageType::MessageType_EosTxActionAck => 218,
|
MessageType::MessageType_EosTxActionRequest => 218,
|
||||||
MessageType::MessageType_EosSignedTx => 219,
|
MessageType::MessageType_EosTxActionAck => 219,
|
||||||
MessageType::MessageType_BinanceGetAddress => 220,
|
MessageType::MessageType_EosSignedTx => 220,
|
||||||
MessageType::MessageType_BinanceAddress => 221,
|
MessageType::MessageType_BinanceGetAddress => 221,
|
||||||
MessageType::MessageType_BinanceGetPublicKey => 222,
|
MessageType::MessageType_BinanceAddress => 222,
|
||||||
MessageType::MessageType_BinancePublicKey => 223,
|
MessageType::MessageType_BinanceGetPublicKey => 223,
|
||||||
MessageType::MessageType_BinanceSignTx => 224,
|
MessageType::MessageType_BinancePublicKey => 224,
|
||||||
MessageType::MessageType_BinanceTxRequest => 225,
|
MessageType::MessageType_BinanceSignTx => 225,
|
||||||
MessageType::MessageType_BinanceTransferMsg => 226,
|
MessageType::MessageType_BinanceTxRequest => 226,
|
||||||
MessageType::MessageType_BinanceOrderMsg => 227,
|
MessageType::MessageType_BinanceTransferMsg => 227,
|
||||||
MessageType::MessageType_BinanceCancelMsg => 228,
|
MessageType::MessageType_BinanceOrderMsg => 228,
|
||||||
MessageType::MessageType_BinanceSignedTx => 229,
|
MessageType::MessageType_BinanceCancelMsg => 229,
|
||||||
MessageType::MessageType_WebAuthnListResidentCredentials => 230,
|
MessageType::MessageType_BinanceSignedTx => 230,
|
||||||
MessageType::MessageType_WebAuthnCredentials => 231,
|
MessageType::MessageType_WebAuthnListResidentCredentials => 231,
|
||||||
MessageType::MessageType_WebAuthnAddResidentCredential => 232,
|
MessageType::MessageType_WebAuthnCredentials => 232,
|
||||||
MessageType::MessageType_WebAuthnRemoveResidentCredential => 233,
|
MessageType::MessageType_WebAuthnAddResidentCredential => 233,
|
||||||
MessageType::MessageType_SolanaGetPublicKey => 234,
|
MessageType::MessageType_WebAuthnRemoveResidentCredential => 234,
|
||||||
MessageType::MessageType_SolanaPublicKey => 235,
|
MessageType::MessageType_SolanaGetPublicKey => 235,
|
||||||
MessageType::MessageType_SolanaGetAddress => 236,
|
MessageType::MessageType_SolanaPublicKey => 236,
|
||||||
MessageType::MessageType_SolanaAddress => 237,
|
MessageType::MessageType_SolanaGetAddress => 237,
|
||||||
MessageType::MessageType_SolanaSignTx => 238,
|
MessageType::MessageType_SolanaAddress => 238,
|
||||||
MessageType::MessageType_SolanaTxSignature => 239,
|
MessageType::MessageType_SolanaSignTx => 239,
|
||||||
|
MessageType::MessageType_SolanaTxSignature => 240,
|
||||||
};
|
};
|
||||||
Self::enum_descriptor().value_by_index(index)
|
Self::enum_descriptor().value_by_index(index)
|
||||||
}
|
}
|
||||||
@ -1550,7 +1556,7 @@ pub mod exts {
|
|||||||
|
|
||||||
static file_descriptor_proto_data: &'static [u8] = b"\
|
static file_descriptor_proto_data: &'static [u8] = b"\
|
||||||
\n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\x20google/protobuf/de\
|
\n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\x20google/protobuf/de\
|
||||||
scriptor.proto*\x8bS\n\x0bMessageType\x12(\n\x16MessageType_Initialize\
|
scriptor.proto*\xbdS\n\x0bMessageType\x12(\n\x16MessageType_Initialize\
|
||||||
\x10\0\x1a\x0c\x80\xa6\x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\
|
\x10\0\x1a\x0c\x80\xa6\x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\
|
||||||
\x10MessageType_Ping\x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12\
|
\x10MessageType_Ping\x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12\
|
||||||
%\n\x13MessageType_Success\x10\x02\x1a\x0c\x80\xa6\x1d\x01\xa8\xb5\x18\
|
%\n\x13MessageType_Success\x10\x02\x1a\x0c\x80\xa6\x1d\x01\xa8\xb5\x18\
|
||||||
@ -1661,84 +1667,85 @@ static file_descriptor_proto_data: &'static [u8] = b"\
|
|||||||
\x120\n!MessageType_DebugLinkReseedRandom\x10\xaaF\x1a\x08\x80\xa6\x1d\
|
\x120\n!MessageType_DebugLinkReseedRandom\x10\xaaF\x1a\x08\x80\xa6\x1d\
|
||||||
\x01\xa0\xb5\x18\x01\x120\n!MessageType_DebugLinkRecordScreen\x10\xabF\
|
\x01\xa0\xb5\x18\x01\x120\n!MessageType_DebugLinkRecordScreen\x10\xabF\
|
||||||
\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x20MessageType_DebugLink\
|
\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x20MessageType_DebugLink\
|
||||||
EraseSdCard\x10\xadF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x20M\
|
EraseSdCard\x10\xadF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x120\n!Mess\
|
||||||
essageType_DebugLinkWatchLayout\x10\xaeF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\
|
ageType_DebugLinkInsertSdCard\x10\xaeF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\
|
||||||
\x18\x01\x124\n%MessageType_DebugLinkResetDebugEvents\x10\xafF\x1a\x08\
|
\x18\x01\x12/\n\x20MessageType_DebugLinkWatchLayout\x10\xafF\x1a\x08\x80\
|
||||||
\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12+\n\x20MessageType_EthereumGetPublic\
|
\xa6\x1d\x01\xa0\xb5\x18\x01\x124\n%MessageType_DebugLinkResetDebugEvent\
|
||||||
Key\x10\xc2\x03\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_EthereumPu\
|
s\x10\xb0F\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12+\n\x20MessageType\
|
||||||
blicKey\x10\xc3\x03\x1a\x04\x98\xb5\x18\x01\x12(\n\x1eMessageType_Ethere\
|
_EthereumGetPublicKey\x10\xc2\x03\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMess\
|
||||||
umGetAddress\x108\x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMessageType_Ethereum\
|
ageType_EthereumPublicKey\x10\xc3\x03\x1a\x04\x98\xb5\x18\x01\x12(\n\x1e\
|
||||||
Address\x109\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_EthereumSignT\
|
MessageType_EthereumGetAddress\x108\x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMe\
|
||||||
x\x10:\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_EthereumSignTxEIP1559\
|
ssageType_EthereumAddress\x109\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessage\
|
||||||
\x10\xc4\x03\x1a\x04\x90\xb5\x18\x01\x12'\n\x1dMessageType_EthereumTxReq\
|
Type_EthereumSignTx\x10:\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_Ethe\
|
||||||
uest\x10;\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\
|
reumSignTxEIP1559\x10\xc4\x03\x1a\x04\x90\xb5\x18\x01\x12'\n\x1dMessageT\
|
||||||
\x10<\x1a\x04\x90\xb5\x18\x01\x12)\n\x1fMessageType_EthereumSignMessage\
|
ype_EthereumTxRequest\x10;\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType\
|
||||||
\x10@\x1a\x04\x90\xb5\x18\x01\x12+\n!MessageType_EthereumVerifyMessage\
|
_EthereumTxAck\x10<\x1a\x04\x90\xb5\x18\x01\x12)\n\x1fMessageType_Ethere\
|
||||||
\x10A\x1a\x04\x90\xb5\x18\x01\x12.\n$MessageType_EthereumMessageSignatur\
|
umSignMessage\x10@\x1a\x04\x90\xb5\x18\x01\x12+\n!MessageType_EthereumVe\
|
||||||
e\x10B\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedData\
|
rifyMessage\x10A\x1a\x04\x90\xb5\x18\x01\x12.\n$MessageType_EthereumMess\
|
||||||
\x10\xd0\x03\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_EthereumTypedDat\
|
ageSignature\x10B\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSig\
|
||||||
aStructRequest\x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&MessageType_Et\
|
nTypedData\x10\xd0\x03\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_Ethere\
|
||||||
hereumTypedDataStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\x124\n)Mess\
|
umTypedDataStructRequest\x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&Mess\
|
||||||
ageType_EthereumTypedDataValueRequest\x10\xd3\x03\x1a\x04\x98\xb5\x18\
|
ageType_EthereumTypedDataStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\
|
||||||
\x01\x120\n%MessageType_EthereumTypedDataValueAck\x10\xd4\x03\x1a\x04\
|
\x124\n)MessageType_EthereumTypedDataValueRequest\x10\xd3\x03\x1a\x04\
|
||||||
\x90\xb5\x18\x01\x121\n&MessageType_EthereumTypedDataSignature\x10\xd5\
|
\x98\xb5\x18\x01\x120\n%MessageType_EthereumTypedDataValueAck\x10\xd4\
|
||||||
\x03\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedHash\
|
\x03\x1a\x04\x90\xb5\x18\x01\x121\n&MessageType_EthereumTypedDataSignatu\
|
||||||
\x10\xd6\x03\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGetAddress\
|
re\x10\xd5\x03\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTy\
|
||||||
\x10C\x1a\x04\x90\xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\x10D\
|
pedHash\x10\xd6\x03\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGet\
|
||||||
\x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\x1a\x04\
|
Address\x10C\x1a\x04\x90\xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\
|
||||||
\x90\xb5\x18\x01\x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\x98\xb5\
|
\x10D\x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\
|
||||||
\x18\x01\x12'\n\x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\x90\xb5\
|
\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\
|
||||||
\x18\x01\x12)\n\x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\x98\xb5\
|
\x98\xb5\x18\x01\x12'\n\x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\
|
||||||
\x18\x01\x12&\n\x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\x04\x90\
|
\x90\xb5\x18\x01\x12)\n\x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\
|
||||||
\xb5\x18\x01\x12#\n\x18MessageType_TezosAddress\x10\x97\x01\x1a\x04\x98\
|
\x98\xb5\x18\x01\x12&\n\x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\
|
||||||
\xb5\x18\x01\x12\"\n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\x04\x90\
|
\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_TezosAddress\x10\x97\x01\x1a\
|
||||||
\xb5\x18\x01\x12$\n\x19MessageType_TezosSignedTx\x10\x99\x01\x1a\x04\x98\
|
\x04\x98\xb5\x18\x01\x12\"\n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\
|
||||||
\xb5\x18\x01\x12(\n\x1dMessageType_TezosGetPublicKey\x10\x9a\x01\x1a\x04\
|
\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_TezosSignedTx\x10\x99\x01\x1a\
|
||||||
\x90\xb5\x18\x01\x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\x01\x1a\
|
\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_TezosGetPublicKey\x10\x9a\x01\
|
||||||
\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\x01\x1a\
|
\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\
|
||||||
\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_StellarTxOpRequest\x10\xcb\
|
\x01\x1a\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\
|
||||||
\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAddress\x10\
|
\x01\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_StellarTxOpRequest\
|
||||||
\xcf\x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAddress\
|
\x10\xcb\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAdd\
|
||||||
\x10\xd0\x01\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCreateAc\
|
ress\x10\xcf\x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAd\
|
||||||
countOp\x10\xd2\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_Stella\
|
dress\x10\xd0\x01\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCre\
|
||||||
rPaymentOp\x10\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_Stella\
|
ateAccountOp\x10\xd2\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_S\
|
||||||
rPathPaymentStrictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12/\n$M\
|
tellarPaymentOp\x10\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_S\
|
||||||
essageType_StellarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\x01\
|
tellarPathPaymentStrictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12\
|
||||||
\x126\n+MessageType_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\x04\
|
/\n$MessageType_StellarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\
|
||||||
\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\x01\
|
\x01\x126\n+MessageType_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\
|
||||||
\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\x10\
|
\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\
|
||||||
\xd8\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowTrust\
|
\x01\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\
|
||||||
Op\x10\xd9\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAccount\
|
\x10\xd8\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowT\
|
||||||
MergeOp\x10\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Stella\
|
rustOp\x10\xd9\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAcc\
|
||||||
rManageDataOp\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_Ste\
|
ountMergeOp\x10\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_St\
|
||||||
llarBumpSequenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageTyp\
|
ellarManageDataOp\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType\
|
||||||
e_StellarManageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n*Mes\
|
_StellarBumpSequenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#Messag\
|
||||||
sageType_StellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\x18\
|
eType_StellarManageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n\
|
||||||
\x01\x125\n*MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\x1a\
|
*MessageType_StellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\
|
||||||
\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\x01\
|
\x18\x01\x125\n*MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\
|
||||||
\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\x10\
|
\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\
|
||||||
\xb1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublicKey\
|
\x01\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\
|
||||||
\x10\xb2\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGetAdd\
|
\x10\xb1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublic\
|
||||||
ress\x10\xb3\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoAd\
|
Key\x10\xb2\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGet\
|
||||||
dress\x10\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_CardanoT\
|
Address\x10\xb3\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_Cardan\
|
||||||
xItemAck\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_CardanoT\
|
oAddress\x10\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_Carda\
|
||||||
xAuxiliaryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#Mess\
|
noTxItemAck\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_Carda\
|
||||||
ageType_CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\x12/\
|
noTxAuxiliaryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#M\
|
||||||
\n$MessageType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\x18\
|
essageType_CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\
|
||||||
\x01\x12'\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\xb5\
|
\x12/\n$MessageType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\
|
||||||
\x18\x01\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\x98\
|
\x18\x01\x12'\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\
|
||||||
\xb5\x18\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\x1a\
|
\xb5\x18\x01\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\
|
||||||
\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\x02\
|
\x98\xb5\x18\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\
|
||||||
\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\xc1\
|
\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\
|
||||||
\x02\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\x10\
|
\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\
|
||||||
\xc2\x02\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetGroup\
|
\xc1\x02\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\
|
||||||
\x10\xc3\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoToken\
|
\x10\xc2\x02\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetG\
|
||||||
\x10\xc4\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxCert\
|
roup\x10\xc3\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoTo\
|
||||||
ificate\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Cardan\
|
ken\x10\xc4\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxC\
|
||||||
oTxWithdrawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType_Ca\
|
ertificate\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Car\
|
||||||
rdanoTxAuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessa\
|
danoTxWithdrawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType\
|
||||||
geType_CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Messa\
|
_CardanoTxAuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMe\
|
||||||
geType_CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\
|
ssageType_CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Me\
|
||||||
|
ssageType_CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\
|
||||||
\x121\n&MessageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\x04\x90\
|
\x121\n&MessageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\x04\x90\
|
||||||
\xb5\x18\x01\x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\x02\x1a\
|
\xb5\x18\x01\x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\x02\x1a\
|
||||||
\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\x02\x1a\
|
\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\x02\x1a\
|
||||||
|
@ -3210,6 +3210,221 @@ impl ::protobuf::reflect::ProtobufValue for DebugLinkEraseSdCard {
|
|||||||
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
|
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @@protoc_insertion_point(message:hw.trezor.messages.debug.DebugLinkInsertSdCard)
|
||||||
|
#[derive(PartialEq,Clone,Default,Debug)]
|
||||||
|
pub struct DebugLinkInsertSdCard {
|
||||||
|
// message fields
|
||||||
|
// @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkInsertSdCard.serial_number)
|
||||||
|
pub serial_number: ::std::option::Option<u32>,
|
||||||
|
// @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkInsertSdCard.capacity_bytes)
|
||||||
|
pub capacity_bytes: ::std::option::Option<u32>,
|
||||||
|
// @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkInsertSdCard.manuf_ID)
|
||||||
|
pub manuf_ID: ::std::option::Option<u32>,
|
||||||
|
// special fields
|
||||||
|
// @@protoc_insertion_point(special_field:hw.trezor.messages.debug.DebugLinkInsertSdCard.special_fields)
|
||||||
|
pub special_fields: ::protobuf::SpecialFields,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> ::std::default::Default for &'a DebugLinkInsertSdCard {
|
||||||
|
fn default() -> &'a DebugLinkInsertSdCard {
|
||||||
|
<DebugLinkInsertSdCard as ::protobuf::Message>::default_instance()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DebugLinkInsertSdCard {
|
||||||
|
pub fn new() -> DebugLinkInsertSdCard {
|
||||||
|
::std::default::Default::default()
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional uint32 serial_number = 1;
|
||||||
|
|
||||||
|
pub fn serial_number(&self) -> u32 {
|
||||||
|
self.serial_number.unwrap_or(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn clear_serial_number(&mut self) {
|
||||||
|
self.serial_number = ::std::option::Option::None;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn has_serial_number(&self) -> bool {
|
||||||
|
self.serial_number.is_some()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Param is passed by value, moved
|
||||||
|
pub fn set_serial_number(&mut self, v: u32) {
|
||||||
|
self.serial_number = ::std::option::Option::Some(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional uint32 capacity_bytes = 2;
|
||||||
|
|
||||||
|
pub fn capacity_bytes(&self) -> u32 {
|
||||||
|
self.capacity_bytes.unwrap_or(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn clear_capacity_bytes(&mut self) {
|
||||||
|
self.capacity_bytes = ::std::option::Option::None;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn has_capacity_bytes(&self) -> bool {
|
||||||
|
self.capacity_bytes.is_some()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Param is passed by value, moved
|
||||||
|
pub fn set_capacity_bytes(&mut self, v: u32) {
|
||||||
|
self.capacity_bytes = ::std::option::Option::Some(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional uint32 manuf_ID = 3;
|
||||||
|
|
||||||
|
pub fn manuf_ID(&self) -> u32 {
|
||||||
|
self.manuf_ID.unwrap_or(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn clear_manuf_ID(&mut self) {
|
||||||
|
self.manuf_ID = ::std::option::Option::None;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn has_manuf_ID(&self) -> bool {
|
||||||
|
self.manuf_ID.is_some()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Param is passed by value, moved
|
||||||
|
pub fn set_manuf_ID(&mut self, v: u32) {
|
||||||
|
self.manuf_ID = ::std::option::Option::Some(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
|
||||||
|
let mut fields = ::std::vec::Vec::with_capacity(3);
|
||||||
|
let mut oneofs = ::std::vec::Vec::with_capacity(0);
|
||||||
|
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||||
|
"serial_number",
|
||||||
|
|m: &DebugLinkInsertSdCard| { &m.serial_number },
|
||||||
|
|m: &mut DebugLinkInsertSdCard| { &mut m.serial_number },
|
||||||
|
));
|
||||||
|
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||||
|
"capacity_bytes",
|
||||||
|
|m: &DebugLinkInsertSdCard| { &m.capacity_bytes },
|
||||||
|
|m: &mut DebugLinkInsertSdCard| { &mut m.capacity_bytes },
|
||||||
|
));
|
||||||
|
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||||
|
"manuf_ID",
|
||||||
|
|m: &DebugLinkInsertSdCard| { &m.manuf_ID },
|
||||||
|
|m: &mut DebugLinkInsertSdCard| { &mut m.manuf_ID },
|
||||||
|
));
|
||||||
|
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<DebugLinkInsertSdCard>(
|
||||||
|
"DebugLinkInsertSdCard",
|
||||||
|
fields,
|
||||||
|
oneofs,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::protobuf::Message for DebugLinkInsertSdCard {
|
||||||
|
const NAME: &'static str = "DebugLinkInsertSdCard";
|
||||||
|
|
||||||
|
fn is_initialized(&self) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
|
||||||
|
while let Some(tag) = is.read_raw_tag_or_eof()? {
|
||||||
|
match tag {
|
||||||
|
8 => {
|
||||||
|
self.serial_number = ::std::option::Option::Some(is.read_uint32()?);
|
||||||
|
},
|
||||||
|
16 => {
|
||||||
|
self.capacity_bytes = ::std::option::Option::Some(is.read_uint32()?);
|
||||||
|
},
|
||||||
|
24 => {
|
||||||
|
self.manuf_ID = ::std::option::Option::Some(is.read_uint32()?);
|
||||||
|
},
|
||||||
|
tag => {
|
||||||
|
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
::std::result::Result::Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute sizes of nested messages
|
||||||
|
#[allow(unused_variables)]
|
||||||
|
fn compute_size(&self) -> u64 {
|
||||||
|
let mut my_size = 0;
|
||||||
|
if let Some(v) = self.serial_number {
|
||||||
|
my_size += ::protobuf::rt::uint32_size(1, v);
|
||||||
|
}
|
||||||
|
if let Some(v) = self.capacity_bytes {
|
||||||
|
my_size += ::protobuf::rt::uint32_size(2, v);
|
||||||
|
}
|
||||||
|
if let Some(v) = self.manuf_ID {
|
||||||
|
my_size += ::protobuf::rt::uint32_size(3, v);
|
||||||
|
}
|
||||||
|
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
|
||||||
|
self.special_fields.cached_size().set(my_size as u32);
|
||||||
|
my_size
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
|
||||||
|
if let Some(v) = self.serial_number {
|
||||||
|
os.write_uint32(1, v)?;
|
||||||
|
}
|
||||||
|
if let Some(v) = self.capacity_bytes {
|
||||||
|
os.write_uint32(2, v)?;
|
||||||
|
}
|
||||||
|
if let Some(v) = self.manuf_ID {
|
||||||
|
os.write_uint32(3, v)?;
|
||||||
|
}
|
||||||
|
os.write_unknown_fields(self.special_fields.unknown_fields())?;
|
||||||
|
::std::result::Result::Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn special_fields(&self) -> &::protobuf::SpecialFields {
|
||||||
|
&self.special_fields
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
|
||||||
|
&mut self.special_fields
|
||||||
|
}
|
||||||
|
|
||||||
|
fn new() -> DebugLinkInsertSdCard {
|
||||||
|
DebugLinkInsertSdCard::new()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn clear(&mut self) {
|
||||||
|
self.serial_number = ::std::option::Option::None;
|
||||||
|
self.capacity_bytes = ::std::option::Option::None;
|
||||||
|
self.manuf_ID = ::std::option::Option::None;
|
||||||
|
self.special_fields.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_instance() -> &'static DebugLinkInsertSdCard {
|
||||||
|
static instance: DebugLinkInsertSdCard = DebugLinkInsertSdCard {
|
||||||
|
serial_number: ::std::option::Option::None,
|
||||||
|
capacity_bytes: ::std::option::Option::None,
|
||||||
|
manuf_ID: ::std::option::Option::None,
|
||||||
|
special_fields: ::protobuf::SpecialFields::new(),
|
||||||
|
};
|
||||||
|
&instance
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::protobuf::MessageFull for DebugLinkInsertSdCard {
|
||||||
|
fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
|
||||||
|
static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
|
||||||
|
descriptor.get(|| file_descriptor().message_by_package_relative_name("DebugLinkInsertSdCard").unwrap()).clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::std::fmt::Display for DebugLinkInsertSdCard {
|
||||||
|
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
||||||
|
::protobuf::text_format::fmt(self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::protobuf::reflect::ProtobufValue for DebugLinkInsertSdCard {
|
||||||
|
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(message:hw.trezor.messages.debug.DebugLinkWatchLayout)
|
// @@protoc_insertion_point(message:hw.trezor.messages.debug.DebugLinkWatchLayout)
|
||||||
#[derive(PartialEq,Clone,Default,Debug)]
|
#[derive(PartialEq,Clone,Default,Debug)]
|
||||||
pub struct DebugLinkWatchLayout {
|
pub struct DebugLinkWatchLayout {
|
||||||
@ -3499,10 +3714,13 @@ static file_descriptor_proto_data: &'static [u8] = b"\
|
|||||||
\x01(\rR\x07address\x12\x16\n\x06memory\x18\x02\x20\x01(\x0cR\x06memory\
|
\x01(\rR\x07address\x12\x16\n\x06memory\x18\x02\x20\x01(\x0cR\x06memory\
|
||||||
\x12\x14\n\x05flash\x18\x03\x20\x01(\x08R\x05flash\"-\n\x13DebugLinkFlas\
|
\x12\x14\n\x05flash\x18\x03\x20\x01(\x08R\x05flash\"-\n\x13DebugLinkFlas\
|
||||||
hErase\x12\x16\n\x06sector\x18\x01\x20\x01(\rR\x06sector\".\n\x14DebugLi\
|
hErase\x12\x16\n\x06sector\x18\x01\x20\x01(\rR\x06sector\".\n\x14DebugLi\
|
||||||
nkEraseSdCard\x12\x16\n\x06format\x18\x01\x20\x01(\x08R\x06format\",\n\
|
nkEraseSdCard\x12\x16\n\x06format\x18\x01\x20\x01(\x08R\x06format\"~\n\
|
||||||
\x14DebugLinkWatchLayout\x12\x14\n\x05watch\x18\x01\x20\x01(\x08R\x05wat\
|
\x15DebugLinkInsertSdCard\x12#\n\rserial_number\x18\x01\x20\x01(\rR\x0cs\
|
||||||
ch\"\x1b\n\x19DebugLinkResetDebugEventsB=\n#com.satoshilabs.trezor.lib.p\
|
erialNumber\x12%\n\x0ecapacity_bytes\x18\x02\x20\x01(\rR\rcapacityBytes\
|
||||||
rotobufB\x12TrezorMessageDebug\x80\xa6\x1d\x01\
|
\x12\x19\n\x08manuf_ID\x18\x03\x20\x01(\rR\x07manufID\",\n\x14DebugLinkW\
|
||||||
|
atchLayout\x12\x14\n\x05watch\x18\x01\x20\x01(\x08R\x05watch\"\x1b\n\x19\
|
||||||
|
DebugLinkResetDebugEventsB=\n#com.satoshilabs.trezor.lib.protobufB\x12Tr\
|
||||||
|
ezorMessageDebug\x80\xa6\x1d\x01\
|
||||||
";
|
";
|
||||||
|
|
||||||
/// `FileDescriptorProto` object which was a source for this generated file
|
/// `FileDescriptorProto` object which was a source for this generated file
|
||||||
@ -3523,7 +3741,7 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
|
|||||||
deps.push(super::messages::file_descriptor().clone());
|
deps.push(super::messages::file_descriptor().clone());
|
||||||
deps.push(super::messages_common::file_descriptor().clone());
|
deps.push(super::messages_common::file_descriptor().clone());
|
||||||
deps.push(super::messages_management::file_descriptor().clone());
|
deps.push(super::messages_management::file_descriptor().clone());
|
||||||
let mut messages = ::std::vec::Vec::with_capacity(15);
|
let mut messages = ::std::vec::Vec::with_capacity(16);
|
||||||
messages.push(DebugLinkDecision::generated_message_descriptor_data());
|
messages.push(DebugLinkDecision::generated_message_descriptor_data());
|
||||||
messages.push(DebugLinkLayout::generated_message_descriptor_data());
|
messages.push(DebugLinkLayout::generated_message_descriptor_data());
|
||||||
messages.push(DebugLinkReseedRandom::generated_message_descriptor_data());
|
messages.push(DebugLinkReseedRandom::generated_message_descriptor_data());
|
||||||
@ -3537,6 +3755,7 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
|
|||||||
messages.push(DebugLinkMemoryWrite::generated_message_descriptor_data());
|
messages.push(DebugLinkMemoryWrite::generated_message_descriptor_data());
|
||||||
messages.push(DebugLinkFlashErase::generated_message_descriptor_data());
|
messages.push(DebugLinkFlashErase::generated_message_descriptor_data());
|
||||||
messages.push(DebugLinkEraseSdCard::generated_message_descriptor_data());
|
messages.push(DebugLinkEraseSdCard::generated_message_descriptor_data());
|
||||||
|
messages.push(DebugLinkInsertSdCard::generated_message_descriptor_data());
|
||||||
messages.push(DebugLinkWatchLayout::generated_message_descriptor_data());
|
messages.push(DebugLinkWatchLayout::generated_message_descriptor_data());
|
||||||
messages.push(DebugLinkResetDebugEvents::generated_message_descriptor_data());
|
messages.push(DebugLinkResetDebugEvents::generated_message_descriptor_data());
|
||||||
let mut enums = ::std::vec::Vec::with_capacity(3);
|
let mut enums = ::std::vec::Vec::with_capacity(3);
|
||||||
|
@ -198,14 +198,6 @@ def client(
|
|||||||
):
|
):
|
||||||
pytest.skip("Test excluded on Trezor R")
|
pytest.skip("Test excluded on Trezor R")
|
||||||
|
|
||||||
sd_marker = request.node.get_closest_marker("sd_card")
|
|
||||||
if sd_marker and not _raw_client.features.sd_card_present:
|
|
||||||
raise RuntimeError(
|
|
||||||
"This test requires SD card.\n"
|
|
||||||
"To skip all such tests, run:\n"
|
|
||||||
" pytest -m 'not sd_card' <test path>"
|
|
||||||
)
|
|
||||||
|
|
||||||
test_ui = request.config.getoption("ui")
|
test_ui = request.config.getoption("ui")
|
||||||
|
|
||||||
_raw_client.reset_debug_features()
|
_raw_client.reset_debug_features()
|
||||||
@ -223,7 +215,9 @@ def client(
|
|||||||
# we need to reseed before the wipe
|
# we need to reseed before the wipe
|
||||||
_raw_client.debug.reseed(0)
|
_raw_client.debug.reseed(0)
|
||||||
|
|
||||||
|
sd_marker = request.node.get_closest_marker("sd_card")
|
||||||
if sd_marker:
|
if sd_marker:
|
||||||
|
_raw_client.debug.insert_sd_card(1)
|
||||||
should_format = sd_marker.kwargs.get("formatted", True)
|
should_format = sd_marker.kwargs.get("formatted", True)
|
||||||
_raw_client.debug.erase_sd_card(format=should_format)
|
_raw_client.debug.erase_sd_card(format=should_format)
|
||||||
|
|
||||||
|
34
tests/device_tests/test_debug_sdcard_insert.py
Normal file
34
tests/device_tests/test_debug_sdcard_insert.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from trezorlib.debuglink import TrezorClientDebugLink as Client
|
||||||
|
|
||||||
|
pytestmark = [pytest.mark.skip_t1, pytest.mark.skip_tr]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sd_card(formatted=True)
|
||||||
|
def test_sd_eject(client: Client):
|
||||||
|
print(client.features)
|
||||||
|
assert client.features.sd_card_present is True
|
||||||
|
|
||||||
|
client.debug.eject_sd_card()
|
||||||
|
client.refresh_features()
|
||||||
|
print(client.features)
|
||||||
|
assert client.features.sd_card_present is False
|
||||||
|
|
||||||
|
client.debug.insert_sd_card(2)
|
||||||
|
client.debug.erase_sd_card(format=True)
|
||||||
|
client.refresh_features()
|
||||||
|
assert client.features.sd_card_present is True
|
||||||
|
|
||||||
|
client.debug.eject_sd_card()
|
||||||
|
client.refresh_features()
|
||||||
|
assert client.features.sd_card_present is False
|
||||||
|
|
||||||
|
client.debug.insert_sd_card(3)
|
||||||
|
client.debug.erase_sd_card(format=False)
|
||||||
|
client.refresh_features()
|
||||||
|
assert client.features.sd_card_present is True
|
||||||
|
|
||||||
|
client.debug.eject_sd_card()
|
||||||
|
client.refresh_features()
|
||||||
|
assert client.features.sd_card_present is False
|
Loading…
Reference in New Issue
Block a user