1 | import { u8aConcat } from '@polkadot/util';
|
2 | import { hmacShaAsU8a } from '../../hmac/index.js';
|
3 | import { mnemonicToSeedSync } from '../../mnemonic/bip39.js';
|
4 | const ED25519_CRYPTO = 'ed25519 seed';
|
5 | export function ledgerMaster(mnemonic, password) {
|
6 | const seed = mnemonicToSeedSync(mnemonic, password);
|
7 | const chainCode = hmacShaAsU8a(ED25519_CRYPTO, new Uint8Array([1, ...seed]), 256);
|
8 | let priv;
|
9 | while (!priv || (priv[31] & 32)) {
|
10 | priv = hmacShaAsU8a(ED25519_CRYPTO, priv || seed, 512);
|
11 | }
|
12 | priv[0] &= 248;
|
13 | priv[31] &= 127;
|
14 | priv[31] |= 64;
|
15 | return u8aConcat(priv, chainCode);
|
16 | }
|