From 303f8101fd87587eea12ac125c787ed09180e692 Mon Sep 17 00:00:00 2001 From: Lucas McDonald Date: Wed, 16 Oct 2024 16:58:14 -0700 Subject: [PATCH 1/3] chore: Improve decrypt performance --- modules/decrypt-node/src/verify_stream.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/decrypt-node/src/verify_stream.ts b/modules/decrypt-node/src/verify_stream.ts index a52777493..d7e02d77b 100644 --- a/modules/decrypt-node/src/verify_stream.ts +++ b/modules/decrypt-node/src/verify_stream.ts @@ -129,7 +129,16 @@ export class VerifyStream extends PortableTransformWithType { const { currentFrame } = state if (!currentFrame) { const { buffer } = state - const frameBuffer = Buffer.concat([buffer, chunk]) + + // Buffer.concat can be expensive. + // If buffer is empty, just use the chunk. + let frameBuffer; + if (buffer.length > 0) { + frameBuffer = Buffer.concat([buffer, chunk]); + } else { + frameBuffer = chunk; + } + const frameHeader = decodeBodyHeader(frameBuffer, this._headerInfo, 0) if (!frameHeader) { // Need more data From 538774debd58028ea4b717dbf79068471d331336 Mon Sep 17 00:00:00 2001 From: Lucas McDonald Date: Wed, 16 Oct 2024 17:10:26 -0700 Subject: [PATCH 2/3] const, prettier --- modules/decrypt-node/src/verify_stream.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/modules/decrypt-node/src/verify_stream.ts b/modules/decrypt-node/src/verify_stream.ts index d7e02d77b..3355aba17 100644 --- a/modules/decrypt-node/src/verify_stream.ts +++ b/modules/decrypt-node/src/verify_stream.ts @@ -129,15 +129,10 @@ export class VerifyStream extends PortableTransformWithType { const { currentFrame } = state if (!currentFrame) { const { buffer } = state - - // Buffer.concat can be expensive. - // If buffer is empty, just use the chunk. - let frameBuffer; - if (buffer.length > 0) { - frameBuffer = Buffer.concat([buffer, chunk]); - } else { - frameBuffer = chunk; - } + + // Buffer.concat can be expensive. If buffer is empty, just use the chunk. + const frameBuffer = + buffer.length > 0 ? Buffer.concat([buffer, chunk]) : chunk const frameHeader = decodeBodyHeader(frameBuffer, this._headerInfo, 0) if (!frameHeader) { From e05727f85bb7d9d6a33f6573915bccca47eb1189 Mon Sep 17 00:00:00 2001 From: Lucas McDonald Date: Wed, 16 Oct 2024 17:13:52 -0700 Subject: [PATCH 3/3] more, prettier --- modules/decrypt-node/src/verify_stream.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/modules/decrypt-node/src/verify_stream.ts b/modules/decrypt-node/src/verify_stream.ts index 3355aba17..33701bc29 100644 --- a/modules/decrypt-node/src/verify_stream.ts +++ b/modules/decrypt-node/src/verify_stream.ts @@ -196,13 +196,18 @@ export class VerifyStream extends PortableTransformWithType { if (chunk.length && tagLengthBytes > authTagBuffer.length) { const left = tagLengthBytes - authTagBuffer.length if (left > chunk.length) { - state.authTagBuffer = Buffer.concat([authTagBuffer, chunk]) + // Buffer.concat can be expensive. If buffer is empty, just use the chunk. + state.authTagBuffer = + authTagBuffer.length > 0 + ? Buffer.concat([authTagBuffer, chunk]) + : chunk return callback() } else { - const finalAuthTagBuffer = Buffer.concat( - [authTagBuffer, chunk], - tagLengthBytes - ) + // Buffer.concat can be expensive. If buffer is empty, just use the chunk. + const finalAuthTagBuffer = + authTagBuffer.length > 0 + ? Buffer.concat([authTagBuffer, chunk], tagLengthBytes) + : chunk.slice(0, tagLengthBytes) if (this._verify) { this._verify.update(finalAuthTagBuffer) }