From edeb1b7c73ddc9c0777b59f897998d7d98ae501b Mon Sep 17 00:00:00 2001 From: Sam Hadow Date: Sun, 9 Mar 2025 15:18:46 +0100 Subject: [PATCH] refactor key exchange --- src/app.js | 9 +++------ src/db.js | 2 +- src/public/chat.js | 37 ++++++++++++++++++++----------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/app.js b/src/app.js index bb8c46c..09526ab 100644 --- a/src/app.js +++ b/src/app.js @@ -46,7 +46,7 @@ io.on('connection', async (socket) => { console.log('A user connected'); const peers = await database.getPeers(session.publicKey); peers.forEach(peer => { - socket.to(peer).emit('connected', session.publicKey); + socket.to(peer).emit('key exchange', session.publicKey, null, 0); }); socket.on('disconnect', () => { console.log('User disconnected'); @@ -60,11 +60,8 @@ io.on('connection', async (socket) => { console.log('message: ' + msg + ', sender: ' + session.id); console.log(session.publicKey); }); - socket.on('key exchange', (user_pubkey, pubkey) => { - socket.to(user_pubkey).emit('key exchange', session.publicKey, pubkey); - }); - socket.on('key exchange 2', (user_pubkey, pubkey) => { - socket.to(user_pubkey).emit('key exchange 2', session.publicKey, pubkey); + socket.on('key exchange', (user_pubkey, pubkey, part) => { + socket.to(user_pubkey).emit('key exchange', session.publicKey, pubkey, part); }); }); diff --git a/src/db.js b/src/db.js index 2dc344c..8d3d764 100644 --- a/src/db.js +++ b/src/db.js @@ -193,7 +193,7 @@ const database = { } }; -const retryWithDelay = (operation, retries = 5, delay = 5000) => new Promise((resolve, reject) => { +const retryWithDelay = (operation, retries = 5, delay = 7500) => new Promise((resolve, reject) => { return operation() .then(resolve) .catch((err) => { diff --git a/src/public/chat.js b/src/public/chat.js index e393d96..9f4b541 100644 --- a/src/public/chat.js +++ b/src/public/chat.js @@ -14,23 +14,26 @@ socket.on('chat message', (msg, room) => { window.scrollTo(0, document.body.scrollHeight); }); -socket.on('connected', (user_pubkey) => { - const keys = genKeys(); - secret = keys.privkey; - socket.emit('key exchange', user_pubkey, toHexString(keys.pubkey)); -}); - -socket.on('key exchange', (user_pubkey, pubkey) => { - const keys = genKeys(); - secret = keys.privkey - sharedsecret[user_pubkey] = sharedKey(secret, fromHexString(pubkey)); - socket.emit('key exchange 2', user_pubkey, toHexString(keys.pubkey)); - console.log(`shared secret: ${toHexString(sharedsecret[user_pubkey])}`); -}); - -socket.on('key exchange 2', (user_pubkey, pubkey) => { - sharedsecret[user_pubkey] = sharedKey(secret, fromHexString(pubkey)); - console.log(`shared secret: ${toHexString(sharedsecret[user_pubkey])}`); +socket.on('key exchange', (user_pubkey, pubkey, part) => { + let keys = null; + switch (part) { + case 0: + keys = genKeys(); + secret = keys.privkey; + socket.emit('key exchange', user_pubkey, toHexString(keys.pubkey), 1); + break; + case 1: + keys = genKeys(); + secret = keys.privkey + sharedsecret[user_pubkey] = sharedKey(secret, fromHexString(pubkey)); + socket.emit('key exchange', user_pubkey, toHexString(keys.pubkey), 2); + console.log(`shared secret: ${toHexString(sharedsecret[user_pubkey])}`); + break; + case 2: + sharedsecret[user_pubkey] = sharedKey(secret, fromHexString(pubkey)); + console.log(`shared secret: ${toHexString(sharedsecret[user_pubkey])}`); + break; + } }); export function create_listener(form, input) {