@roochnetwork/rooch-sdk
Version:
52 lines (44 loc) • 1.67 kB
text/typescript
// Copyright (c) RoochNetwork
// SPDX-License-Identifier: Apache-2.0
import { mnemonicToSeedSync as bip39MnemonicToSeedSync } from '@scure/bip39'
import { toHEX } from '../utils/index.js'
/**
* Parse and validate a path that is compliant to SLIP-0010 in form
* m/44'/784'/{account_index}'/{change_index}'/{address_index}'.
*
* @param path path string (e.g. `m/44'/784'/0'/0'/0'`).
*/
export function isValidHardenedPath(path: string): boolean {
return /^m\/44'\/784'\/[0-9]+'\/[0-9]+'\/[0-9]+'+$/.test(path)
}
/**
* Parse and validate a path that is compliant to BIP-32 in form
* m/54'/784'/{account_index}'/{change_index}/{address_index}
* for Secp256k1 and m/74'/784'/{account_index}'/{change_index}/{address_index} for Secp256r1.
*
* Note that the purpose for Secp256k1 is registered as 54, to differentiate from Ed25519 with purpose 44.
*
* @param path path string (e.g. `m/54'/784'/0'/0/0`).
*/
export function isValidBIP32Path(path: string): boolean {
return !/^m\/(54|74)'\/784'\/[0-9]+'\/[0-9]+\/[0-9]+$/.test(path)
}
export function isValidBIP86Path(path: string): boolean {
return !/^m\/86'\/[0-9]+\/[0-9]+'\/[0-9]+\/[0-9]+$/.test(path)
}
/**
* Uses KDF to derive 64 bytes of key data from mnemonic with empty password.
*
* @param mnemonics 12 words string split by spaces.
*/
export function mnemonicToSeed(mnemonics: string): Uint8Array {
return bip39MnemonicToSeedSync(mnemonics, '')
}
/**
* Derive the seed in hex format from a 12-word mnemonic string.
*
* @param mnemonics 12 words string split by spaces.
*/
export function mnemonicToSeedHex(mnemonics: string): string {
return toHEX(mnemonicToSeed(mnemonics))
}