feat: support sodium-native lib for voice (#7698)

* chore: add sodium-native

* feat: wrap sodium-native methods

* chore: update dep listings

* chore: update dep report

* revert: "chore: add sodium-native"

This reverts commit 6a64db85d0.

* chore: consolidate buffer alloc

Co-authored-by: Vitor <milagre.vitor@gmail.com>

* chore: conslidate sodium.random

* chore: explicit param typing

* refactor: truthy style maintenance

Co-authored-by: Vitor <milagre.vitor@gmail.com>
This commit is contained in:
Josh Wee
2022-04-12 08:20:30 -07:00
committed by GitHub
parent b577bcc1df
commit f0d0242c76
3 changed files with 33 additions and 7 deletions

View File

@@ -47,6 +47,7 @@ try installing another.
**Encryption Libraries (npm install):** **Encryption Libraries (npm install):**
- `sodium-native`: ^3.3.0
- `sodium`: ^3.0.2 - `sodium`: ^3.0.2
- `tweetnacl`: ^1.0.3 - `tweetnacl`: ^1.0.3
- `libsodium-wrappers`: ^0.7.9 - `libsodium-wrappers`: ^0.7.9

View File

@@ -5,14 +5,38 @@ interface Methods {
} }
const libs = { 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 => ({ sodium: (sodium: any): Methods => ({
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
open: sodium.api.crypto_secretbox_open_easy, open: sodium.api.crypto_secretbox_open_easy,
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
close: sodium.api.crypto_secretbox_easy, close: sodium.api.crypto_secretbox_easy,
random: (n: any, buffer?: Buffer) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument random: (n: number, buffer: Buffer = Buffer.allocUnsafe(n)) => {
if (!buffer) buffer = Buffer.allocUnsafe(n);
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
sodium.api.randombytes_buf(buffer); sodium.api.randombytes_buf(buffer);
return buffer; return buffer;
@@ -23,16 +47,16 @@ const libs = {
open: sodium.crypto_secretbox_open_easy, open: sodium.crypto_secretbox_open_easy,
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
close: sodium.crypto_secretbox_easy, 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
random: (n: any) => sodium.randombytes_buf(n), random: sodium.randombytes_buf,
}), }),
tweetnacl: (tweetnacl: any): Methods => ({ tweetnacl: (tweetnacl: any): Methods => ({
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
open: tweetnacl.secretbox.open, open: tweetnacl.secretbox.open,
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
close: tweetnacl.secretbox, close: tweetnacl.secretbox,
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
random: (n: any) => tweetnacl.randomBytes(n), random: tweetnacl.randomBytes,
}), }),
} as const; } as const;

View File

@@ -69,6 +69,7 @@ export function generateDependencyReport() {
// encryption // encryption
report.push('Encryption Libraries'); report.push('Encryption Libraries');
addVersion('sodium-native');
addVersion('sodium'); addVersion('sodium');
addVersion('libsodium-wrappers'); addVersion('libsodium-wrappers');
addVersion('tweetnacl'); addVersion('tweetnacl');