diff --git a/cli/tests/unit_node/crypto_hash.ts b/cli/tests/unit_node/crypto_hash.ts new file mode 100644 index 00000000000000..fae66e02447be2 --- /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 de7b162978a34b..d81844f30e4e8a 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); }