From 46bfe643a62e88ae4f31e0ebfefcd02f3807e290 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 26 Feb 2021 10:43:55 +0100 Subject: [PATCH] Additional tests for hdValidatePath (#897) * Additional tests for hdValidatePath * Additional * slip for Polkadot --- .../util-crypto/src/hd/ledger/index.spec.ts | 2 +- .../util-crypto/src/hd/validatePath.spec.ts | 28 +++++++++++++++++++ packages/util-crypto/src/hd/validatePath.ts | 12 ++++---- 3 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 packages/util-crypto/src/hd/validatePath.spec.ts diff --git a/packages/util-crypto/src/hd/ledger/index.spec.ts b/packages/util-crypto/src/hd/ledger/index.spec.ts index a21f878db..f478689ea 100644 --- a/packages/util-crypto/src/hd/ledger/index.spec.ts +++ b/packages/util-crypto/src/hd/ledger/index.spec.ts @@ -30,7 +30,7 @@ const TESTS = { ] }, Polkadot: { - slip44: 0x80000162, + slip44: 0x0162, tests: [ { ed25519: '0xe8c68348586d53e4e8d1a864b0e4e17c75e4eb06e0c63c1432bef2ba29e69d41', diff --git a/packages/util-crypto/src/hd/validatePath.spec.ts b/packages/util-crypto/src/hd/validatePath.spec.ts new file mode 100644 index 000000000..8b2ab81f4 --- /dev/null +++ b/packages/util-crypto/src/hd/validatePath.spec.ts @@ -0,0 +1,28 @@ +// Copyright 2017-2021 @polkadot/util-crypto authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { hdValidatePath } from '.'; + +const VECTORS: [string, boolean][] = [ + ["m/44'/60'/0'/0/0", true], + ['m/0', true], + ["m/123'", true], + ["n/44'/60'/0'/0/0", false], + ['m', false], + ['m/', false], + ["m/xyz'", false], + ['m/123x', false], + ['m/123"', false], + ["m/123''", false], + ["m/123'0'", false], + [`m/${0x80000000}`, false], + ['m/-1', false] +]; + +describe('hdValidatePath', (): void => { + VECTORS.forEach(([path, result]): void => { + it(`validates ${path} as ${result.toString()}`, (): void => { + expect(hdValidatePath(path)).toEqual(result); + }); + }); +}); diff --git a/packages/util-crypto/src/hd/validatePath.ts b/packages/util-crypto/src/hd/validatePath.ts index 989a14a17..782dc5315 100644 --- a/packages/util-crypto/src/hd/validatePath.ts +++ b/packages/util-crypto/src/hd/validatePath.ts @@ -8,9 +8,11 @@ export function hdValidatePath (path: string): boolean { return false; } - return !path - .split('/') - .slice(1) - .map((n) => parseInt(n.replace("'", ''), 10)) - .some((n) => isNaN(n) && n < HARDENED); + const parts = path.split('/').slice(1); + + return parts.every((n) => /^\d+'?$/.test(n)) && ( + !parts + .map((n) => parseInt(n.replace("'", ''), 10)) + .some((n) => isNaN(n) || (n >= HARDENED) || (n < 0)) + ); }