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:
parent
9fb093053d
commit
487cc19750
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user