Compare commits

...

5 Commits

2 changed files with 12 additions and 9 deletions

View File

@@ -5,7 +5,7 @@ import * as secp256k1 from '@noble/secp256k1'
export function encrypt(privkey, pubkey, text) { export function encrypt(privkey, pubkey, text) {
const key = secp256k1.getSharedSecret(privkey, '02' + pubkey) const key = secp256k1.getSharedSecret(privkey, '02' + pubkey)
const normalizedKey = getOnlyXFromFullSharedSecret(key) const normalizedKey = getNormalizedX(key)
let iv = Uint8Array.from(randomBytes(16)) let iv = Uint8Array.from(randomBytes(16))
var cipher = aes.createCipheriv( var cipher = aes.createCipheriv(
@@ -16,24 +16,27 @@ export function encrypt(privkey, pubkey, text) {
let encryptedMessage = cipher.update(text, 'utf8', 'base64') let encryptedMessage = cipher.update(text, 'utf8', 'base64')
encryptedMessage += cipher.final('base64') encryptedMessage += cipher.final('base64')
return [encryptedMessage, Buffer.from(iv.buffer).toString('base64')] return `${encryptedMessage}?iv=${Buffer.from(iv.buffer).toString('base64')}`
} }
export function decrypt(privkey, pubkey, ciphertext, iv) { export function decrypt(privkey, pubkey, ciphertext) {
const key = secp256k1.getSharedSecret(privkey, '02' + pubkey) let [cip, iv] = ciphertext.split('?iv=')
const normalizedKey = getOnlyXFromFullSharedSecret(key) let key = secp256k1.getSharedSecret(privkey, '02' + pubkey)
let normalizedKey = getNormalizedX(key)
var decipher = aes.createDecipheriv( var decipher = aes.createDecipheriv(
'aes-256-cbc', 'aes-256-cbc',
Buffer.from(normalizedKey, 'hex'), Buffer.from(normalizedKey, 'hex'),
Buffer.from(iv, 'base64') Buffer.from(iv, 'base64')
) )
let decryptedMessage = decipher.update(ciphertext, 'base64') let decryptedMessage = decipher.update(cip, 'base64')
decryptedMessage += decipher.final('utf8') decryptedMessage += decipher.final('utf8')
return decryptedMessage return decryptedMessage
} }
function getOnlyXFromFullSharedSecret(fullSharedSecretCoordinates) { function getNormalizedX(key) {
return fullSharedSecretCoordinates.substr(2, 64) return typeof key === 'string'
? key.substr(2, 64)
: Buffer.from(key.slice(1, 33)).toString('hex')
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "nostr-tools", "name": "nostr-tools",
"version": "0.20.1", "version": "0.21.4",
"description": "Tools for making a Nostr client.", "description": "Tools for making a Nostr client.",
"repository": { "repository": {
"type": "git", "type": "git",