Fixes for validation of bitcoin seed mnemonic text.

M committed Jan 19, 2022 at 17:27 UTC bc07f9d69b9357085d3bdea505c007e1fda3525a
2 files changed +25 -16
lib/src/screens/restore/wallet_restore_page.dart
+23 -10
@@ -1,5 +1,6 @@
1 import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
2 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
3 +import 'package:cw_core/wallet_type.dart';
4 import 'package:flutter/cupertino.dart';
5 import 'package:flutter/material.dart';
6 import 'package:keyboard_actions/keyboard_actions.dart';
@@ -46,15 +47,19 @@ class WalletRestorePage extends BasePage {
47 }
48 },
49 onSeedChange: (String seed) {
49 - final hasHeight = walletRestoreFromSeedFormKey
50 - .currentState
51 - .blockchainHeightKey
52 - .currentState
53 - .restoreHeightController
54 - .text
55 - .isNotEmpty;
56 - if (hasHeight) {
57 - walletRestoreViewModel.isButtonEnabled = _isValidSeed();
50 + if (walletRestoreViewModel.hasBlockchainHeightLanguageSelector) {
51 + final hasHeight = walletRestoreFromSeedFormKey
52 + .currentState
53 + .blockchainHeightKey
54 + .currentState
55 + .restoreHeightController
56 + .text
57 + .isNotEmpty;
58 + if (hasHeight) {
59 + walletRestoreViewModel.isButtonEnabled = _isValidSeed();
60 + }
61 + } else {
62 + walletRestoreViewModel.isButtonEnabled = _isValidSeed();
63 }
64 },
65 onLanguageChange: (_) {
@@ -209,8 +214,16 @@ class WalletRestorePage extends BasePage {
214 .currentState
215 .text
216 .split(' ');
217 +
218 + if (walletRestoreViewModel.type == WalletType.monero &&
219 + seedWords.length != WalletRestoreViewModelBase.moneroSeedMnemonicLength) {
220 + return false;
221 + }
222
213 - if (seedWords.length != walletRestoreViewModel.seedMnemonicLength) {
223 + if ((walletRestoreViewModel.type == WalletType.bitcoin ||
224 + walletRestoreViewModel.type == WalletType.litecoin) &&
225 + (seedWords.length != WalletRestoreViewModelBase.electrumSeedMnemonicLength &&
226 + seedWords.length != WalletRestoreViewModelBase.electrumShortSeedMnemonicLength)) {
227 return false;
228 }
229
lib/view_model/wallet_restore_view_model.dart
+2 -6
@@ -38,6 +38,7 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
38
39 static const moneroSeedMnemonicLength = 25;
40 static const electrumSeedMnemonicLength = 24;
41 + static const electrumShortSeedMnemonicLength = 12;
42
43 final List<WalletRestoreMode> availableModes;
44 final bool hasSeedLanguageSelector;
@@ -49,12 +50,7 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
50
51 @observable
52 bool isButtonEnabled;
52 -
53 - int get seedMnemonicLength =>
54 - type == WalletType.monero
55 - ? moneroSeedMnemonicLength
56 - : electrumSeedMnemonicLength;
57 -
53 +
54 @override
55 WalletCredentials getCredentials(dynamic options) {
56 final password = generateWalletPassword(type);