But like, how? 😅

Reply to this note

Please Login to reply.

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...." 😁