summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/internal
diff options
context:
space:
mode:
authorYoshiya Hinosawa <stibium121@gmail.com>2024-09-13 01:13:56 +0900
committerGitHub <noreply@github.com>2024-09-13 01:13:56 +0900
commit3f15e300625723df10c564c4e29ec276288a931b (patch)
tree1d0a205dc858f3dbcc3bd032d7ecbdddd414ddc4 /ext/node/polyfills/internal
parent0a4a8c730bcad32dcb7c8174e33601d777e54909 (diff)
fix(ext/node): fix Decipheriv when autoPadding disabled (#25598)
This change fixes Decipheriv behavior when autoPadding disabled and enabled. By this change, the example given in https://github.com/denoland/deno/issues/20924#issuecomment-2345931295 works in the same way as Node. closes #20924
Diffstat (limited to 'ext/node/polyfills/internal')
-rw-r--r--ext/node/polyfills/internal/crypto/cipher.ts7
1 files changed, 6 insertions, 1 deletions
diff --git a/ext/node/polyfills/internal/crypto/cipher.ts b/ext/node/polyfills/internal/crypto/cipher.ts
index a1449cd87..c1c5ce890 100644
--- a/ext/node/polyfills/internal/crypto/cipher.ts
+++ b/ext/node/polyfills/internal/crypto/cipher.ts
@@ -306,6 +306,10 @@ class BlockModeCache {
this.cache = this.cache.subarray(len);
return out;
}
+
+ set lastChunkIsNonZero(value: boolean) {
+ this.#lastChunkIsNonZero = value;
+ }
}
export class Decipheriv extends Transform implements Cipher {
@@ -338,7 +342,7 @@ export class Decipheriv extends Transform implements Cipher {
},
...options,
});
- this.#cache = new BlockModeCache(true);
+ this.#cache = new BlockModeCache(this.#autoPadding);
this.#context = op_node_create_decipheriv(cipher, toU8(key), toU8(iv));
this.#needsBlockCache =
!(cipher == "aes-128-gcm" || cipher == "aes-256-gcm");
@@ -386,6 +390,7 @@ export class Decipheriv extends Transform implements Cipher {
setAutoPadding(autoPadding?: boolean): this {
this.#autoPadding = Boolean(autoPadding);
+ this.#cache.lastChunkIsNonZero = this.#autoPadding;
return this;
}