1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-26 09:28:13 +00:00

core/recovery_device: fix dry_run

This commit is contained in:
Jan Pochyla 2019-06-25 18:25:32 +02:00
parent 9fb093053d
commit 487cc19750
3 changed files with 27 additions and 5 deletions

View File

@ -34,5 +34,9 @@ def get_seed(secret: bytes, passphrase: str):
return seed return seed
def get_mnemonic_count(mnemonic: str) -> int:
return 1
def check(secret: bytes): def check(secret: bytes):
return bip39.check(secret) return bip39.check(secret)

View File

@ -84,3 +84,8 @@ def get_seed(encrypted_master_secret: bytes, passphrase: str):
) )
mnemonic._stop_progress() mnemonic._stop_progress()
return master_secret return master_secret
def get_mnemonic_count(mnemonic: str) -> int:
_, _, _, _, _, _, threshold, _ = slip39.decode_mnemonic(mnemonic)
return threshold

View File

@ -64,6 +64,10 @@ async def recovery_device(ctx, msg):
# show a note about the keyboard # show a note about the keyboard
await show_keyboard_info(ctx) await show_keyboard_info(ctx)
if msg.dry_run:
dry_run_mnemonics = []
dry_run_mnemonic_count = None
secret = None secret = None
while secret is None: while secret is None:
# ask for mnemonic words one by one # ask for mnemonic words one by one
@ -71,14 +75,23 @@ async def recovery_device(ctx, msg):
ctx, wordcount, mnemonic_module == mnemonic.slip39 ctx, wordcount, mnemonic_module == mnemonic.slip39
) )
try: try:
secret = mnemonic_module.process_single(words) if msg.dry_run:
if dry_run_mnemonic_count is None:
dry_run_mnemonic_count = mnemonic_module.get_mnemonic_count(words)
dry_run_mnemonics.append(words)
else:
secret = mnemonic_module.process_single(words)
except slip39.MnemonicError as e: except slip39.MnemonicError as e:
raise wire.ProcessError("Mnemonic is not valid: " + str(e)) raise wire.ProcessError("Mnemonic is not valid: " + str(e))
if msg.dry_run:
remaining = dry_run_mnemonic_count - len(dry_run_mnemonics)
if remaining == 0:
secret = mnemonic_module.process_all(dry_run_mnemonics)
else:
remaining = storage.get_slip39_remaining()
# show a number of remaining mnemonics for SLIP39 # show a number of remaining mnemonics for SLIP39
if secret is None and mnemonic_module == mnemonic.slip39: if secret is None and mnemonic_module == mnemonic.slip39:
await show_remaining_slip39_mnemonics( await show_remaining_slip39_mnemonics(ctx, title, remaining)
ctx, title, storage.get_slip39_remaining()
)
# check mnemonic validity # check mnemonic validity
# it is checked automatically in SLIP-39 # it is checked automatically in SLIP-39
@ -94,7 +107,7 @@ async def recovery_device(ctx, msg):
# dry run # dry run
if msg.dry_run: if msg.dry_run:
mnemonic.dry_run(secret) return mnemonic.dry_run(secret)
# save into storage # save into storage
if msg.pin_protection: if msg.pin_protection: