diff --git a/utils/ECC/index.js b/utils/ECC/index.js index 064e7e12..1e926a66 100644 --- a/utils/ECC/index.js +++ b/utils/ECC/index.js @@ -40,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 } } @@ -120,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', @@ -138,7 +151,14 @@ const decryptMessage = async ({ encryptedMessage, deviceId }) => { const parsedMessage = decryptedMessage.toString('utf8') return parsedMessage } catch (err) { - logger.error(err) + if (err.message?.toLowerCase() === 'bad mac') { + logger.error( + 'Bad Mac!', + err, + convertToEncryptedMessage(encryptedMessage), + !!keyPair + ) + } throw err } }