mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
fix: incorrect enc msg detection
This commit is contained in:
@@ -30,39 +30,42 @@ export const decodeWAMessage = (
|
|||||||
if(typeof data === 'string' || !possiblyEnc) {
|
if(typeof data === 'string' || !possiblyEnc) {
|
||||||
json = JSON.parse(data.toString()) // parse the JSON
|
json = JSON.parse(data.toString()) // parse the JSON
|
||||||
} else {
|
} else {
|
||||||
|
try {
|
||||||
|
json = JSON.parse(data.toString())
|
||||||
|
} catch {
|
||||||
|
const { macKey, encKey } = auth || {}
|
||||||
|
if (!macKey || !encKey) {
|
||||||
|
throw new Boom('recieved encrypted buffer when auth creds unavailable', { data: message, statusCode: DisconnectReason.badSession })
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
If the data recieved was not a JSON, then it must be an encrypted message.
|
||||||
|
Such a message can only be decrypted if we're connected successfully to the servers & have encryption keys
|
||||||
|
*/
|
||||||
|
if (fromMe) {
|
||||||
|
tags = [data[0], data[1]]
|
||||||
|
data = data.slice(2, data.length)
|
||||||
|
}
|
||||||
|
|
||||||
const { macKey, encKey } = auth || {}
|
const checksum = data.slice(0, 32) // the first 32 bytes of the buffer are the HMAC sign of the message
|
||||||
if (!macKey || !encKey) {
|
data = data.slice(32, data.length) // the actual message
|
||||||
throw new Boom('recieved encrypted buffer when auth creds unavailable', { data: message, statusCode: DisconnectReason.badSession })
|
const computedChecksum = hmacSign(data, macKey) // compute the sign of the message we recieved using our macKey
|
||||||
}
|
|
||||||
/*
|
|
||||||
If the data recieved was not a JSON, then it must be an encrypted message.
|
|
||||||
Such a message can only be decrypted if we're connected successfully to the servers & have encryption keys
|
|
||||||
*/
|
|
||||||
if (fromMe) {
|
|
||||||
tags = [data[0], data[1]]
|
|
||||||
data = data.slice(2, data.length)
|
|
||||||
}
|
|
||||||
|
|
||||||
const checksum = data.slice(0, 32) // the first 32 bytes of the buffer are the HMAC sign of the message
|
if (checksum.equals(computedChecksum)) {
|
||||||
data = data.slice(32, data.length) // the actual message
|
// the checksum the server sent, must match the one we computed for the message to be valid
|
||||||
const computedChecksum = hmacSign(data, macKey) // compute the sign of the message we recieved using our macKey
|
const decrypted = aesDecrypt(data, encKey) // decrypt using AES
|
||||||
|
json = decodeBinaryNodeLegacy(decrypted, { index: 0 }) // decode the binary message into a JSON array
|
||||||
if (checksum.equals(computedChecksum)) {
|
} else {
|
||||||
// the checksum the server sent, must match the one we computed for the message to be valid
|
throw new Boom('Bad checksum', {
|
||||||
const decrypted = aesDecrypt(data, encKey) // decrypt using AES
|
data: {
|
||||||
json = decodeBinaryNodeLegacy(decrypted, { index: 0 }) // decode the binary message into a JSON array
|
received: checksum.toString('hex'),
|
||||||
} else {
|
computed: computedChecksum.toString('hex'),
|
||||||
throw new Boom('Bad checksum', {
|
data: data.slice(0, 80).toString(),
|
||||||
data: {
|
tag: messageTag,
|
||||||
received: checksum.toString('hex'),
|
message: message.slice(0, 80).toString()
|
||||||
computed: computedChecksum.toString('hex'),
|
},
|
||||||
data: data.slice(0, 80).toString(),
|
statusCode: DisconnectReason.badSession
|
||||||
tag: messageTag,
|
})
|
||||||
message: message.slice(0, 80).toString()
|
}
|
||||||
},
|
|
||||||
statusCode: DisconnectReason.badSession
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user