diff --git a/index.js b/index.js index c38b444..5bfe865 100644 --- a/index.js +++ b/index.js @@ -21,5 +21,3 @@ export { getPublicKey, getBlankEvent } -export * from './nip04' -export * from './nip05' diff --git a/nip04.js b/nip04.js index 1485ed8..cd3c4cb 100644 --- a/nip04.js +++ b/nip04.js @@ -1,11 +1,12 @@ import {Buffer} from 'buffer' +import randomBytes from 'randombytes' import * as secp256k1 from '@noble/secp256k1' export function encrypt(privkey, pubkey, text) { const key = secp256k1.getSharedSecret(privkey, '02' + pubkey) const normalizedKey = getOnlyXFromFullSharedSecret(key) - let iv = crypto.randomFillSync(new Uint8Array(16)) + let iv = Uint8Array.from(randomBytes(16)) var cipher = crypto.createCipheriv( 'aes-256-cbc', Buffer.from(normalizedKey, 'hex'), diff --git a/nip06.js b/nip06.js new file mode 100644 index 0000000..93f788f --- /dev/null +++ b/nip06.js @@ -0,0 +1,16 @@ +import createHmac from 'create-hmac' +import * as bip39 from 'bip39' + +export function privateKeyFromSeed(seed) { + let hmac = createHmac('sha512', Buffer.from('Nostr seed', 'utf8')) + hmac.update(seed) + return hmac.digest().slice(0, 32).toString('hex') +} + +export function seedFromWords(mnemonic) { + return bip39.mnemonicToSeedSync(mnemonic) +} + +export function generateSeedWords() { + return bip39.entropyToMnemonic(randomBytes(16).toString('hex')) +} diff --git a/package.json b/package.json index ed31294..0b1b025 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nostr-tools", - "version": "0.6.5", + "version": "0.7.0", "description": "Tools for making a Nostr client.", "repository": { "type": "git", @@ -8,8 +8,11 @@ }, "dependencies": { "@noble/secp256k1": "^1.3.0", + "bip39": "^3.0.4", "buffer": "^6.0.3", + "create-hmac": "^1.1.7", "dns-packet": "^5.2.4", + "randombytes": "^2.1.0", "websocket-polyfill": "^0.0.3" }, "keywords": [