diff --git a/Shared (Extension)/Resources/background.js b/Shared (Extension)/Resources/background.js index ff6914f..3b38b5d 100644 --- a/Shared (Extension)/Resources/background.js +++ b/Shared (Extension)/Resources/background.js @@ -1,4 +1,4 @@ -import { generatePrivateKey, getPublicKey, signEvent } from "nostr-tools"; +import { generatePrivateKey, getPublicKey, signEvent, nip04 } from "nostr-tools"; const storage = browser.storage.local; @@ -53,6 +53,14 @@ browser.runtime.onMessage.addListener(async (message, _sender, sendResponse) => let event = await signEvent_(message.payload); sendResponse(event); break; + case 'nip04.encrypt': + let cipherText = await nip04Encrypt(message.payload); + sendResponse(cipherText); + break; + case 'nip04.decrypt': + let plainText = await nip04Decrypt(message.payload); + sendResponse(plainText); + break; default: break; } @@ -144,4 +152,14 @@ async function signEvent_(event) { let privKey = await getPrivKey(); event.sig = signEvent(event, privKey); return event; +} + +async function nip04Encrypt({pubKey, plainText}) { + let privKey = await getPrivKey(); + return nip04.encrypt(privKey, pubKey, plainText); +} + +async function nip04Decrypt({pubKey, cipherText}) { + let privKey = await getPrivKey(); + return nip04.decrypt(privKey, pubKey, cipherText); } \ No newline at end of file diff --git a/Shared (Extension)/Resources/content.js b/Shared (Extension)/Resources/content.js index 3ed06ed..5f4e2a2 100644 --- a/Shared (Extension)/Resources/content.js +++ b/Shared (Extension)/Resources/content.js @@ -3,8 +3,9 @@ script.setAttribute('src', browser.runtime.getURL('nostr.build.js')); document.body.appendChild(script); window.addEventListener('message', async (message) => { + const validEvents = ['getPubKey', 'signEvent', 'nip04.encrypt', 'nip04.decrypt']; let {kind, reqId, payload} = message.data; - if (kind !== 'getPubKey' && kind !== 'signEvent') + if (!validEvents.includes(kind)) return; console.log(`Event ${reqId}: Content script received message kind ${kind}, payload: `, payload); diff --git a/Shared (Extension)/Resources/nostr.js b/Shared (Extension)/Resources/nostr.js index 80bbefc..fe14fed 100644 --- a/Shared (Extension)/Resources/nostr.js +++ b/Shared (Extension)/Resources/nostr.js @@ -16,13 +16,25 @@ window.nostr = { console.log(`Event ${reqId}: ${kind}, payload: `, payload); window.postMessage({kind, reqId, payload}, '*'); }); + }, + + + nip04: { + async encrypt(pubKey, plainText) { + return await window.nostr.broadcast('nip04.encrypt', {pubKey, plainText}); + }, + + async decrypt(pubKey, cipherText) { + return await window.nostr.broadcast('nip04.decrypt', {pubKey, cipherText}); + } } } window.addEventListener('message', (message) => { + const validEvents = ['getPubKey', 'signEvent', 'nip04.encrypt', 'nip04.decrypt'].map(e => `return_${e}`); let {kind, reqId, payload} = message.data; - if (kind !== 'return_getPubKey' && kind !== 'return_signEvent') + if (!validEvents.includes(kind)) return; console.log(`Event ${reqId}: Received payload:`, payload);