But like, how? 😅
Discussion
one of the first things I dug into about nostr; I started from ian coleman's bip39 initially, but found nostr-tools later on. with js, in node:
import {generateSeedWords, seedFromWords, privateKeyFromSeed} from 'nostr-tools/nip06.js'
import {getPublicKey} from 'nostr-tools/keys.js'
import {generateMnemonic} from 'micro-bip39'
import {wordlist} from 'micro-bip39/wordlists/english.js'
import {bech32} from 'bech32'
var phrase = generateMnemonic(wordlist, 256);
var seed = seedFromWords(phrase);
var key = privateKeyFromSeed(seed);
var pub = getPublicKey(key);
var bytes = Buffer.from(pub, 'hex');
var words = bech32.toWords(bytes);
var npub = bech32.encode('npub', words);
var kbytes = Buffer.from(key, 'hex');
var kwords = bech32.toWords(kbytes);
var nsec = bech32.encode('nsec', kwords);
console.log({phrase, seed, key, pub, npub, nsec});
with ian coleman's bip39 (in console or whatever):
var mnemonics = { "english": new Mnemonic("english") };
var mnemonic = mnemonics["english"];
var phrase = mnemonic.generate(256);
var seed = mnemonic.toSeed(phrase);
var rootKey = libs.bitcoin.HDNode.fromSeedHex(seed);
var key = rootKey.derivePath("m/44'/1237'/0'/0/0");
var privateKeyHex = key.keyPair.d.toBuffer().toString('hex');
var publicKeyHex = key.getPublicKeyBuffer().toString('hex').slice(2,);
console.log({phrase: phrase, seed: seed, rootKey58: rootKey.toBase58(), key58: key.toBase58(), key: privateKeyHex, pub: publicKeyHex});
I the brute forced random seeds until I found "npub1ace...." 😁