Skip to content

Commit

Permalink
voice: fix voice receive after enabling suffix and lite encryption modes
Browse files Browse the repository at this point in the history
  • Loading branch information
amishshah committed Jun 13, 2018
1 parent 14eadb3 commit d69e906
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/client/voice/dispatcher/StreamDispatcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ class StreamDispatcher extends Writable {
packetBuffer.writeUIntBE(this.player.voiceConnection.authentication.ssrc, 8, 4);

packetBuffer.copy(nonce, 0, 0, 12);
return Buffer.concat([packetBuffer, ...this._encrypt(buffer, sequence)]);
return Buffer.concat([packetBuffer, ...this._encrypt(buffer)]);
}

_sendPacket(packet) {
Expand Down
20 changes: 16 additions & 4 deletions src/client/voice/receiver/PacketHandler.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const nonce = Buffer.alloc(24);
const secretbox = require('../util/Secretbox');
const EventEmitter = require('events');

Expand All @@ -7,6 +6,7 @@ class Readable extends require('stream').Readable { _read() {} } // eslint-disab
class PacketHandler extends EventEmitter {
constructor(receiver) {
super();
this.nonce = Buffer.alloc(24);
this.receiver = receiver;
this.streams = new Map();
}
Expand All @@ -27,10 +27,22 @@ class PacketHandler extends EventEmitter {
}

parseBuffer(buffer) {
// Reuse nonce buffer
buffer.copy(nonce, 0, 0, 12);
const { secretKey, encryptionMode } = this.receiver.connection.authentication;

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');
packet = Buffer.from(packet);

Expand Down

0 comments on commit d69e906

Please sign in to comment.