From dcf399438c39c1c1a622503735112091d8f9e17e Mon Sep 17 00:00:00 2001 From: emad-salah Date: Sat, 3 Jul 2021 16:55:41 +0100 Subject: [PATCH 1/2] Added better bad mac logs --- utils/ECC/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/utils/ECC/index.js b/utils/ECC/index.js index b9bb8b61..383690b1 100644 --- a/utils/ECC/index.js +++ b/utils/ECC/index.js @@ -137,7 +137,14 @@ const decryptMessage = async ({ encryptedMessage, deviceId }) => { const parsedMessage = decryptedMessage.toString('utf8') return parsedMessage } catch (err) { - console.error(err) + if (err.message?.toLowerCase() === 'bad mac') { + console.error( + 'Bad Mac!', + err, + convertToEncryptedMessage(encryptedMessage) + ) + } + throw err } } From 17c79f38687e136f72f97473dcb2def341df8bc0 Mon Sep 17 00:00:00 2001 From: emad-salah Date: Sun, 11 Jul 2021 23:30:23 +0100 Subject: [PATCH 2/2] Added better bad mac logs --- utils/ECC/index.js | 47 ++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/utils/ECC/index.js b/utils/ECC/index.js index 383690b1..5cec3125 100644 --- a/utils/ECC/index.js +++ b/utils/ECC/index.js @@ -1,6 +1,7 @@ /** @format */ const ECCrypto = require('eccrypto') const Storage = require('node-persist') +const logger = require('winston') const FieldError = require('../fieldError') const { convertBufferToBase64, @@ -39,21 +40,35 @@ const isEncryptedMessage = message => * @param {string} deviceId */ const generateKeyPair = deviceId => { - const privateKey = ECCrypto.generatePrivate() - const publicKey = ECCrypto.getPublic(privateKey) - const privateKeyBase64 = convertBufferToBase64(privateKey) - const publicKeyBase64 = convertBufferToBase64(publicKey) + try { + const privateKey = ECCrypto.generatePrivate() + const publicKey = ECCrypto.getPublic(privateKey) + const privateKeyBase64 = convertBufferToBase64(privateKey) + const publicKeyBase64 = convertBufferToBase64(publicKey) - nodeKeyPairs.set(deviceId, { - privateKey, - publicKey - }) + if (!Buffer.isBuffer(privateKey) || !Buffer.isBuffer(publicKey)) { + throw new Error('Invalid KeyPair Generated') + } - return { - privateKey, - publicKey, - privateKeyBase64, - publicKeyBase64 + nodeKeyPairs.set(deviceId, { + privateKey, + publicKey + }) + + return { + privateKey, + publicKey, + privateKeyBase64, + publicKeyBase64 + } + } catch (err) { + logger.error( + '[ENCRYPTION] An error has occurred while generating a new KeyPair', + err + ) + logger.error('Device ID:', deviceId) + + throw err } } @@ -119,9 +134,8 @@ const encryptMessage = async ({ message = '', deviceId }) => { * @param {{ encryptedMessage: EncryptedMessage, deviceId: string }} arg0 */ const decryptMessage = async ({ encryptedMessage, deviceId }) => { + const keyPair = nodeKeyPairs.get(deviceId) try { - const keyPair = nodeKeyPairs.get(deviceId) - if (!keyPair) { throw new FieldError({ field: 'deviceId', @@ -141,7 +155,8 @@ const decryptMessage = async ({ encryptedMessage, deviceId }) => { console.error( 'Bad Mac!', err, - convertToEncryptedMessage(encryptedMessage) + convertToEncryptedMessage(encryptedMessage), + !!keyPair ) }