summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/unit_node/crypto_hash.ts24
-rw-r--r--ext/node/polyfills/internal/crypto/hash.ts4
2 files changed, 26 insertions, 2 deletions
diff --git a/cli/tests/unit_node/crypto_hash.ts b/cli/tests/unit_node/crypto_hash.ts
new file mode 100644
index 000000000..fae66e024
--- /dev/null
+++ b/cli/tests/unit_node/crypto_hash.ts
@@ -0,0 +1,24 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+import { createHash, createHmac } from "node:crypto";
+import { assertEquals } from "../../../test_util/std/testing/asserts.ts";
+
+// https://github.com/denoland/deno/issues/18140
+Deno.test({
+ name: "createHmac digest",
+ fn() {
+ assertEquals(
+ createHmac("sha256", "secret").update("hello").digest("hex"),
+ "88aab3ede8d3adf94d26ab90d3bafd4a2083070c3bcce9c014ee04a443847c0b",
+ );
+ },
+});
+
+Deno.test({
+ name: "createHash digest",
+ fn() {
+ assertEquals(
+ createHash("sha256").update("hello").digest("hex"),
+ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824",
+ );
+ },
+});
diff --git a/ext/node/polyfills/internal/crypto/hash.ts b/ext/node/polyfills/internal/crypto/hash.ts
index de7b16297..d81844f30 100644
--- a/ext/node/polyfills/internal/crypto/hash.ts
+++ b/ext/node/polyfills/internal/crypto/hash.ts
@@ -178,7 +178,6 @@ class HmacImpl extends Transform {
const u8Key = prepareSecretKey(key, options?.encoding) as Buffer;
const alg = hmac.toLowerCase();
- this.#hash = new Hash(alg, options);
this.#algorithm = alg;
const blockSize = (alg === "sha512" || alg === "sha384") ? 128 : 64;
const keySize = u8Key.length;
@@ -186,7 +185,8 @@ class HmacImpl extends Transform {
let bufKey: Buffer;
if (keySize > blockSize) {
- bufKey = this.#hash.update(u8Key).digest() as Buffer;
+ const hash = new Hash(alg, options);
+ bufKey = hash.update(u8Key).digest() as Buffer;
} else {
bufKey = Buffer.concat([u8Key, this.#ZEROES], blockSize);
}