recover ed25519 keys and seed from bip-39 mnemonic
recover_ed25519.ts
31 lines 1.2 kB view raw
1import { ed25519 } from '@noble/curves/ed25519.js' 2import { bytesToHex } from '@noble/hashes/utils.js' 3import { mnemonicToSeedSync, validateMnemonic } from '@scure/bip39' 4import { wordlist } from '@scure/bip39/wordlists/english.js' 5 6const example_mnemonic = "runway civil fish reveal rather talk just annual sadness embody divert detect level hill sail tent hawk real arctic final nephew glad bicycle tilt" 7 8const deriveSeed = function (mnemonic: string): Uint8Array { 9 try { 10 validateMnemonic(mnemonic, wordlist) 11 } catch (err) { 12 console.error(err instanceof Error ? err.message : "Invalid mnemonic") 13 } 14 return mnemonicToSeedSync(mnemonic) 15} 16 17const deriveKeys = function (seed: Uint8Array) { 18 let priv: Uint8Array = seed.slice(0, 32) 19 return { privateKey: priv, publicKey: new Uint8Array(ed25519.getPublicKey(priv)) } 20} 21 22const main = function () { 23 const seed = deriveSeed(example_mnemonic) 24 console.log('Seed (Hex): ', bytesToHex(seed)) 25 26 const recoveredKeys = deriveKeys(seed) 27 console.log('\nPrivate Key (Hex):', bytesToHex(recoveredKeys.privateKey)) 28 console.log('Public Key (Hex): ', bytesToHex(recoveredKeys.publicKey)) 29} 30 31main()