diff --git a/packages/voice/README.md b/packages/voice/README.md index 2ee32f129..ef6d534e4 100644 --- a/packages/voice/README.md +++ b/packages/voice/README.md @@ -47,6 +47,7 @@ try installing another. **Encryption Libraries (npm install):** +- `sodium-native`: ^3.3.0 - `sodium`: ^3.0.2 - `tweetnacl`: ^1.0.3 - `libsodium-wrappers`: ^0.7.9 diff --git a/packages/voice/src/util/Secretbox.ts b/packages/voice/src/util/Secretbox.ts index 5169cc3b2..435606957 100644 --- a/packages/voice/src/util/Secretbox.ts +++ b/packages/voice/src/util/Secretbox.ts @@ -5,14 +5,38 @@ interface Methods { } const libs = { + 'sodium-native': (sodium: any): Methods => ({ + open: (buffer: Buffer, nonce: Buffer, secretKey: Uint8Array) => { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (buffer) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const output = Buffer.allocUnsafe(buffer.length - sodium.crypto_box_MACBYTES); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + if (sodium.crypto_secretbox_open_easy(output, buffer, nonce, secretKey)) return output; + } + return null; + }, + close: (opusPacket: Buffer, nonce: Buffer, secretKey: Uint8Array) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument, @typescript-eslint/restrict-plus-operands + const output = Buffer.allocUnsafe(opusPacket.length + sodium.crypto_box_MACBYTES); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + sodium.crypto_secretbox_easy(output, opusPacket, nonce, secretKey); + return output; + }, + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + random: (n: number, buffer: Buffer = Buffer.allocUnsafe(n)) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + sodium.randombytes_buf(buffer); + return buffer; + }, + }), sodium: (sodium: any): Methods => ({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access open: sodium.api.crypto_secretbox_open_easy, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access close: sodium.api.crypto_secretbox_easy, - random: (n: any, buffer?: Buffer) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - if (!buffer) buffer = Buffer.allocUnsafe(n); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + random: (n: number, buffer: Buffer = Buffer.allocUnsafe(n)) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call sodium.api.randombytes_buf(buffer); return buffer; @@ -23,16 +47,16 @@ const libs = { open: sodium.crypto_secretbox_open_easy, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access close: sodium.crypto_secretbox_easy, - // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - random: (n: any) => sodium.randombytes_buf(n), + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + random: sodium.randombytes_buf, }), tweetnacl: (tweetnacl: any): Methods => ({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access open: tweetnacl.secretbox.open, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access close: tweetnacl.secretbox, - // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - random: (n: any) => tweetnacl.randomBytes(n), + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + random: tweetnacl.randomBytes, }), } as const; diff --git a/packages/voice/src/util/generateDependencyReport.ts b/packages/voice/src/util/generateDependencyReport.ts index 71817b89f..edb31c611 100644 --- a/packages/voice/src/util/generateDependencyReport.ts +++ b/packages/voice/src/util/generateDependencyReport.ts @@ -69,6 +69,7 @@ export function generateDependencyReport() { // encryption report.push('Encryption Libraries'); + addVersion('sodium-native'); addVersion('sodium'); addVersion('libsodium-wrappers'); addVersion('tweetnacl');