on master help sign in
Properly validate HD derivation paths
9f7f830Fang
src/form/validators.js+2−1
@@ -4,6 +4,7 @@ import {
4 validateNotEmpty,
4 validateNotEmpty,
5 validatePatq,
5 validatePatq,
6 validateMnemonic,
6 validateMnemonic,
7+ validateHdPath,
7 validatePoint,
8 validatePoint,
8 validateMaximumPatpByteLength,
9 validateMaximumPatpByteLength,
9 validateOneOf,
10 validateOneOf,
@@ -67,7 +68,7 @@ export const buildCheckboxValidator = mustBe =>
67 ]);
68 ]);
68export const buildPassphraseValidator = () => buildValidator([]);
69export const buildPassphraseValidator = () => buildValidator([]);
69// TODO: validate hdpath format
70// TODO: validate hdpath format
70−export const buildHdPathValidator = () => buildValidator([validateNotEmpty]);
71+export const buildHdPathValidator = () => buildValidator([validateHdPath]);
71export const buildPointValidator = (size = 4, validators = []) =>
72export const buildPointValidator = (size = 4, validators = []) =>
72 buildValidator([
73 buildValidator([
73 validateNotEmpty,
74 validateNotEmpty,
src/lib/validators.js+4
@@ -24,6 +24,10 @@ const isHexPrefixed = /^0x/;
24export const validateMnemonic = v =>
24export const validateMnemonic = v =>
25 !bip39.validateMnemonic(v) && 'This is not a valid mnemonic.';
25 !bip39.validateMnemonic(v) && 'This is not a valid mnemonic.';
26
26
27+const isHdPath = /^m(\/[0-9]+'?)*$/;
28+export const validateHdPath = v =>
29+ !isHdPath.test(v) && 'Invalid HD derivation path.';
30+
27// Checks an empty field
31// Checks an empty field
28export const validateNotEmpty = v =>
32export const validateNotEmpty = v =>
29 (v === undefined || v.length === 0) && 'This field is required.';
33 (v === undefined || v.length === 0) && 'This field is required.';