1 |
|
2 |
|
3 | import { u8aConcat } from '@polkadot/util';
|
4 | import { hmacShaAsU8a } from "../../hmac/index.js";
|
5 | import { mnemonicToSeedSync } from "../../mnemonic/bip39.js";
|
6 | const ED25519_CRYPTO = 'ed25519 seed';
|
7 |
|
8 | export 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 |