nip04.encrypt and nip04.decrypt.

This commit is contained in:
fiatjaf
2022-01-25 20:16:56 -03:00
parent a775dd8b60
commit 4da894dea5
8 changed files with 92 additions and 48 deletions

View File

@@ -1,6 +1,7 @@
import browser from 'webextension-polyfill'
import {Buffer} from 'buffer'
import {validateEvent, signEvent, getEventHash, getPublicKey} from 'nostr-tools'
import {encrypt, decrypt} from 'nostr-tools/nip04'
import {
PERMISSIONS_REQUIRED,
@@ -38,38 +39,41 @@ async function handleContentScriptMessage({type, params, host}) {
}
}
let results = await browser.storage.local.get('private_key')
if (!results || !results.private_key) {
return {error: 'no private key found'}
}
let sk = results.private_key
try {
switch (type) {
case 'getPublicKey': {
let results = await browser.storage.local.get('private_key')
if (results && results.private_key) {
return Buffer.from(getPublicKey(results.private_key)).toString('hex')
} else {
return {error: 'no private key found'}
}
return Buffer.from(getPublicKey(sk)).toString('hex')
}
case 'signEvent': {
let {event} = params
let results = await browser.storage.local.get('private_key')
if (results && results.private_key) {
if (!event.pubkey)
event.pubkey = Buffer.from(
getPublicKey(results.private_key)
).toString('hex')
if (!event.id) event.id = getEventHash(event)
if (!event.pubkey)
event.pubkey = Buffer.from(getPublicKey(sk)).toString('hex')
if (!event.id) event.id = getEventHash(event)
if (!validateEvent(event)) return {error: 'invalid event'}
if (!validateEvent(event)) return {error: 'invalid event'}
let signature = await signEvent(event, results.private_key)
return Buffer.from(signature).toString('hex')
} else {
return {error: 'no private key found'}
}
let signature = await signEvent(event, sk)
return Buffer.from(signature).toString('hex')
}
case 'nip04.encrypt': {
let {peer, plaintext} = params
return encrypt(sk, peer, plaintext)
}
case 'nip04.decrypt': {
let {peer, ciphertext} = params
return decrypt(sk, peer, ciphertext)
}
}
} catch (error) {
return {error}
return {error: {message: error.message, stack: error.stack}}
}
}