UNPKG

764 BJavaScriptView Raw
1// Copyright 2017-2022 @polkadot/util-crypto authors & contributors
2// SPDX-License-Identifier: Apache-2.0
3import { u8aConcat } from '@polkadot/util';
4import { hmacShaAsU8a } from "../../hmac/index.js";
5import { mnemonicToSeedSync } from "../../mnemonic/bip39.js";
6const ED25519_CRYPTO = 'ed25519 seed'; // gets an xprv from a mnemonic
7
8export function ledgerMaster(mnemonic, password) {
9 const seed = mnemonicToSeedSync(mnemonic, password);
10 const chainCode = hmacShaAsU8a(ED25519_CRYPTO, new Uint8Array([1, ...seed]), 256);
11 let priv;
12
13 while (!priv || priv[31] & 0b00100000) {
14 priv = hmacShaAsU8a(ED25519_CRYPTO, priv || seed, 512);
15 }
16
17 priv[0] &= 0b11111000;
18 priv[31] &= 0b01111111;
19 priv[31] |= 0b01000000;
20 return u8aConcat(priv, chainCode);
21}
\No newline at end of file