def _boot_apps() -> None: # load applications import apps.homescreen import apps.management import apps.wallet if not utils.BITCOIN_ONLY: import apps.ethereum import apps.lisk import apps.monero import apps.nem import apps.stellar import apps.ripple import apps.cardano import apps.tezos import apps.eos import apps.binance import apps.webauthn if __debug__: import apps.debug # boot applications apps.homescreen.boot() apps.management.boot() apps.wallet.boot() if not utils.BITCOIN_ONLY: apps.ethereum.boot() apps.lisk.boot() apps.monero.boot() apps.nem.boot() apps.stellar.boot() apps.ripple.boot() apps.cardano.boot() apps.tezos.boot() apps.eos.boot() apps.binance.boot() apps.webauthn.boot() if __debug__: apps.debug.boot() # run main event loop and specify which screen is the default from apps.common.storage import recovery if recovery.is_in_progress(): from apps.management.recovery_device.homescreen import recovery_homescreen workflow.start_default(recovery_homescreen) else: from apps.homescreen.homescreen import homescreen workflow.start_default(homescreen)
def get_features() -> Features: f = Features() f.vendor = "trezor.io" f.language = "english" f.major_version = utils.VERSION_MAJOR f.minor_version = utils.VERSION_MINOR f.patch_version = utils.VERSION_PATCH f.revision = utils.GITREV.encode() f.model = utils.MODEL f.device_id = storage_device.get_device_id() f.label = storage_device.get_label() f.initialized = storage.is_initialized() f.pin_protection = config.has_pin() f.pin_cached = config.has_pin() f.passphrase_protection = storage_device.has_passphrase() f.passphrase_cached = cache.has_passphrase() f.needs_backup = storage_device.needs_backup() f.unfinished_backup = storage_device.unfinished_backup() f.no_backup = storage_device.no_backup() f.flags = storage_device.get_flags() f.recovery_mode = storage_recovery.is_in_progress() f.backup_type = mnemonic.get_type() if utils.BITCOIN_ONLY: f.capabilities = [ Capability.Bitcoin, Capability.Crypto, Capability.Shamir, Capability.ShamirGroups, ] else: f.capabilities = [ Capability.Bitcoin, Capability.Bitcoin_like, Capability.Binance, Capability.Cardano, Capability.Crypto, Capability.EOS, Capability.Ethereum, Capability.Lisk, Capability.Monero, Capability.NEM, Capability.Ripple, Capability.Stellar, Capability.Tezos, Capability.U2F, Capability.Shamir, Capability.ShamirGroups, ] f.sd_card_present = io.SDCard().present() f.sd_protection = storage.device.get_sd_salt_auth_key() is not None return f
async def recovery_device(ctx: wire.Context, msg: RecoveryDevice) -> Success: """ Recover BIP39/SLIP39 seed into empty device. Recovery is also possible with replugged Trezor. We call this process Persistance. User starts the process here using the RecoveryDevice msg and then they can unplug the device anytime and continue without a computer. """ _check_state(msg) if storage_recovery.is_in_progress(): return await recovery_process(ctx) await _continue_dialog(ctx, msg) # for dry run pin needs to be entered if msg.dry_run: curpin, salt = await request_pin_and_sd_salt(ctx, "Enter PIN") if not config.check_pin(pin_to_int(curpin), salt): await show_pin_invalid(ctx) raise wire.PinInvalid("PIN invalid") # set up pin if requested if msg.pin_protection: if msg.dry_run: raise wire.ProcessError("Can't setup PIN during dry_run recovery.") newpin = await request_pin_confirm(ctx, allow_cancel=False) config.change_pin(pin_to_int(""), pin_to_int(newpin), None, None) if msg.u2f_counter: storage_device.set_u2f_counter(msg.u2f_counter) storage_device.load_settings(label=msg.label, use_passphrase=msg.passphrase_protection) storage_recovery.set_in_progress(True) if msg.dry_run: storage_recovery.set_dry_run(msg.dry_run) workflow.replace_default(recovery_homescreen) return await recovery_process(ctx)
apps.eos.boot() apps.binance.boot() if __debug__: apps.debug.boot() else: apps.webauthn.boot(usb.iface_webauthn) # run main event loop and specify which screen is the default from apps.homescreen.homescreen import homescreen workflow.startdefault(homescreen) from trezor import loop, wire, workflow from apps.common.storage import recovery while True: # initialize the wire codec wire.setup(usb.iface_wire) if __debug__: wire.setup(usb.iface_debug) # boot either in recovery or default mode if recovery.is_in_progress(): _boot_recovery() else: _boot_default() loop.run() # loop is empty, reboot
def is_initialized() -> bool: return device.is_version_stored() and not recovery.is_in_progress()