mirror of
https://github.com/danbulant/discord.js
synced 2026-06-09 09:42:22 +00:00
voice: fix voice receive after enabling suffix and lite encryption modes
This commit is contained in:
parent
14eadb3ce0
commit
d69e906027
2 changed files with 17 additions and 5 deletions
|
|
@ -248,7 +248,7 @@ class StreamDispatcher extends Writable {
|
||||||
packetBuffer.writeUIntBE(this.player.voiceConnection.authentication.ssrc, 8, 4);
|
packetBuffer.writeUIntBE(this.player.voiceConnection.authentication.ssrc, 8, 4);
|
||||||
|
|
||||||
packetBuffer.copy(nonce, 0, 0, 12);
|
packetBuffer.copy(nonce, 0, 0, 12);
|
||||||
return Buffer.concat([packetBuffer, ...this._encrypt(buffer, sequence)]);
|
return Buffer.concat([packetBuffer, ...this._encrypt(buffer)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
_sendPacket(packet) {
|
_sendPacket(packet) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
const nonce = Buffer.alloc(24);
|
|
||||||
const secretbox = require('../util/Secretbox');
|
const secretbox = require('../util/Secretbox');
|
||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
|
|
||||||
|
|
@ -7,6 +6,7 @@ class Readable extends require('stream').Readable { _read() {} } // eslint-disab
|
||||||
class PacketHandler extends EventEmitter {
|
class PacketHandler extends EventEmitter {
|
||||||
constructor(receiver) {
|
constructor(receiver) {
|
||||||
super();
|
super();
|
||||||
|
this.nonce = Buffer.alloc(24);
|
||||||
this.receiver = receiver;
|
this.receiver = receiver;
|
||||||
this.streams = new Map();
|
this.streams = new Map();
|
||||||
}
|
}
|
||||||
|
|
@ -27,10 +27,22 @@ class PacketHandler extends EventEmitter {
|
||||||
}
|
}
|
||||||
|
|
||||||
parseBuffer(buffer) {
|
parseBuffer(buffer) {
|
||||||
// Reuse nonce buffer
|
const { secretKey, encryptionMode } = this.receiver.connection.authentication;
|
||||||
buffer.copy(nonce, 0, 0, 12);
|
|
||||||
|
|
||||||
let packet = secretbox.methods.open(buffer.slice(12), nonce, this.receiver.connection.authentication.secretKey);
|
// Choose correct nonce depending on encryption
|
||||||
|
let end;
|
||||||
|
if (encryptionMode === 'xsalsa20_poly1305_lite') {
|
||||||
|
buffer.copy(this.nonce, 0, buffer.length - 4);
|
||||||
|
end = buffer.length - 4;
|
||||||
|
} else if (encryptionMode === 'xsalsa20_poly1305_suffix') {
|
||||||
|
buffer.copy(this.nonce, 0, buffer.length - 24);
|
||||||
|
end = buffer.length - 24;
|
||||||
|
} else {
|
||||||
|
buffer.copy(this.nonce, 0, 0, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open packet
|
||||||
|
let packet = secretbox.methods.open(buffer.slice(12, end), this.nonce, secretKey);
|
||||||
if (!packet) return new Error('Failed to decrypt voice packet');
|
if (!packet) return new Error('Failed to decrypt voice packet');
|
||||||
packet = Buffer.from(packet);
|
packet = Buffer.from(packet);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue