async def _finish_recovery_dry_run(ctx: wire.GenericContext, secret: bytes, backup_type: EnumTypeBackupType) -> Success: if backup_type is None: raise RuntimeError digest_input = sha256(secret).digest() stored = mnemonic.get_secret() digest_stored = sha256(stored).digest() result = utils.consteq(digest_stored, digest_input) is_slip39 = backup_types.is_slip39_backup_type(backup_type) # Check that the identifier and iteration exponent match as well if is_slip39: result &= (storage_device.get_slip39_identifier() == storage_recovery.get_slip39_identifier()) result &= (storage_device.get_slip39_iteration_exponent() == storage_recovery.get_slip39_iteration_exponent()) await layout.show_dry_run_result(ctx, result, is_slip39) storage_recovery.end_progress() if result: return Success("The seed is valid and matches the one in the device") else: raise wire.ProcessError( "The seed does not match the one in the device")
def _validate_reset_device(msg: ResetDevice) -> None: msg.backup_type = msg.backup_type or _DEFAULT_BACKUP_TYPE if msg.backup_type not in ( BackupType.Bip39, BackupType.Slip39_Basic, BackupType.Slip39_Advanced, ): raise wire.ProcessError("Backup type not implemented.") if backup_types.is_slip39_backup_type(msg.backup_type): if msg.strength not in (128, 256): raise wire.ProcessError("Invalid strength (has to be 128 or 256 bits)") else: # BIP-39 if msg.strength not in (128, 192, 256): raise wire.ProcessError("Invalid strength (has to be 128, 192 or 256 bits)") if msg.display_random and (msg.skip_backup or msg.no_backup): raise wire.ProcessError("Can't show internal entropy when backup is skipped") if storage.device.is_initialized(): raise wire.UnexpectedMessage("Already initialized")