on master help sign in
Allow (opt-in) use of arbitrary strings as mnemonic seeds
commitbc8d8c0fdf645df289eefd15d178da7d8c0fb3b7 authorFang <git@fang.io> dateThu 19 Dec 2019, 18:43 (7 years ago) parentf0d6c17
3 files changed+46−17
src/form/validators.js+2 src/lib/wallet.js+10−4 src/views/Login/Mnemonic.js+34−13
src/form/validators.js+2
@@ -60,6 +60,8 @@ export const hasErrors = iter =>
6060
6161export const buildPatqValidator = (validators = []) =>
6262 buildValidator([validateNotEmpty, validatePatq, ...validators]);
63+export const buildAnyMnemonicValidator = () =>
64+ buildValidator([validateNotEmpty]);
6365export const buildMnemonicValidator = () =>
6466 buildValidator([validateNotEmpty, validateMnemonic]);
6567export const buildCheckboxValidator = mustBe =>
src/lib/wallet.js+10−4
@@ -81,10 +81,16 @@ export const urbitWalletFromTicket = async (ticket, point, passphrase) => {
8181 });
8282};
8383
84−export const walletFromMnemonic = (mnemonic, hdpath, passphrase) => {
85− const seed = bip39.validateMnemonic(mnemonic)
86− ? Just(bip39.mnemonicToSeed(mnemonic, passphrase))
87− : Nothing();
84+export const walletFromMnemonic = (
85+ mnemonic,
86+ hdpath,
87+ passphrase,
88+ skipMnemonicCheck
89+) => {
90+ const seed =
91+ skipMnemonicCheck || bip39.validateMnemonic(mnemonic)
92+ ? Just(bip39.mnemonicToSeed(mnemonic, passphrase))
93+ : Nothing();
8894
8995 const toWallet = (sd, path) => {
9096 let wal;
src/views/Login/Mnemonic.js+34−13
@@ -1,4 +1,4 @@
1−import React, { useCallback, useMemo } from 'react';
1+import React, { useCallback, useState, useMemo } from 'react';
22import cn from 'classnames';
33import { Just, Nothing } from 'folktale/maybe';
44import { Grid, CheckboxInput } from 'indigo-react';
@@ -10,6 +10,7 @@ import useLoginView from 'lib/useLoginView';
1010import { MnemonicInput, HdPathInput, PassphraseInput } from 'form/Inputs';
1111import {
1212 composeValidator,
13+ buildAnyMnemonicValidator,
1314 buildMnemonicValidator,
1415 buildCheckboxValidator,
1516 buildPassphraseValidator,
@@ -25,25 +26,34 @@ export default function Mnemonic({ className, goHome }) {
2526
2627 const { setWallet, setAuthMnemonic, setWalletHdPath } = useWallet();
2728
28− const validate = useMemo(
29− () =>
30− composeValidator({
31− useAdvanced: buildCheckboxValidator(),
32− mnemonic: buildMnemonicValidator(),
33− passphrase: buildPassphraseValidator(),
34− hdpath: buildHdPathValidator(),
35− }),
36− []
37− );
29+ const [anyMnemonic, setAnyMnemonic] = useState(false);
30+
31+ const validate = useMemo(() => {
32+ const mnemonicValidator = anyMnemonic
33+ ? buildAnyMnemonicValidator()
34+ : buildMnemonicValidator();
35+ return composeValidator({
36+ useAdvanced: buildCheckboxValidator(),
37+ mnemonic: mnemonicValidator,
38+ passphrase: buildPassphraseValidator(),
39+ hdpath: buildHdPathValidator(),
40+ });
41+ }, [anyMnemonic]);
3842
3943 // when the properties change, re-derive wallet and set global state
4044 const onValues = useCallback(
4145 ({ valid, values }) => {
46+ setAnyMnemonic(values.anyMnemonic);
4247 if (valid) {
4348 setWalletHdPath(values.hdpath);
4449 setAuthMnemonic(Just(values.mnemonic));
4550 setWallet(
46− walletFromMnemonic(values.mnemonic, values.hdpath, values.passphrase)
51+ walletFromMnemonic(
52+ values.mnemonic,
53+ values.hdpath,
54+ values.passphrase,
55+ values.anyMnemonic
56+ )
4757 );
4858 } else {
4959 setAuthMnemonic(Nothing());
@@ -53,7 +63,11 @@ export default function Mnemonic({ className, goHome }) {
5363 [setAuthMnemonic, setWallet, setWalletHdPath]
5464 );
5565
56− const initialValues = { hdpath: DEFAULT_HD_PATH, useAdvanced: false };
66+ const initialValues = {
67+ hdpath: DEFAULT_HD_PATH,
68+ useAdvanced: false,
69+ anyMnemonic: false,
70+ };
5771
5872 return (
5973 <Grid className={cn('mt4', className)}>
@@ -71,6 +85,13 @@ export default function Mnemonic({ className, goHome }) {
7185 label="BIP39 Mnemonic"
7286 />
7387
88+ <Grid.Item
89+ full
90+ as={CheckboxInput}
91+ name="anyMnemonic"
92+ label="Skip mnemonic validation"
93+ />
94+
7495 <Condition when="useAdvanced" is={true}>
7596 <Grid.Item
7697 full