LoadDevice: validate mnemonic, import xprv

This commit is contained in:
Jan Pochyla 2016-10-01 13:52:19 +02:00
parent e62ded3a2f
commit 6b94511472
1 changed files with 15 additions and 11 deletions

View File

@ -4,6 +4,7 @@ from trezor.utils import unimport
@unimport @unimport
async def layout_load_device(message, session_id): async def layout_load_device(message, session_id):
from trezor.crypto import bip39
from trezor.messages.Storage import Storage from trezor.messages.Storage import Storage
from trezor.messages.Success import Success from trezor.messages.Success import Success
from trezor.messages.FailureType import UnexpectedMessage, Other from trezor.messages.FailureType import UnexpectedMessage, Other
@ -13,6 +14,15 @@ async def layout_load_device(message, session_id):
if get_storage(session_id): if get_storage(session_id):
raise wire.FailureError(UnexpectedMessage, 'Already initialized') raise wire.FailureError(UnexpectedMessage, 'Already initialized')
storage = Storage()
storage.imported = True
if hasattr(message, 'node'):
storage.node = message.node
elif hasattr(message, 'mnemonic'):
if not message.skip_checksum and not bip39.check(message.mnemonic):
raise wire.FailureError(Other, 'Mnemonic is not valid')
storage.mnemonic = message.mnemonic
ui.display.clear() ui.display.clear()
@ -21,18 +31,12 @@ async def layout_load_device(message, session_id):
ui.BOLD, 'Loading private seed', 'is not recommended.', ui.BOLD, 'Loading private seed', 'is not recommended.',
ui.NORMAL, 'Continue only if you', 'know what you are doing!')) ui.NORMAL, 'Continue only if you', 'know what you are doing!'))
node = getattr(message, 'node', None) storage.version = 1
mnemonic = getattr(message, 'mnemonic', None) storage.pin = message.pin
storage.passphrase_protection = message.passphrase_protection,
storage.language = message.language
storage.label = message.label
# if node is not None:
# raise wire.FailureError(Other, 'XPRV import is not implemented')
# if mnemonic is not None and not message.skip_checksum:
# raise wire.FailureError(Other, 'Mnemonic checksum is not implemented')
storage = Storage(
version=1, imported=1, mnemonic=mnemonic, node=node,
pin=message.pin, passphrase_protection=message.passphrase_protection,
language=message.language, label=message.label)
set_storage(session_id, await storage.dumps()) set_storage(session_id, await storage.dumps())
return Success(message='Device loaded') return Success(message='Device loaded')