From a8926d199d060f66135e602f951b34b822dc91c3 Mon Sep 17 00:00:00 2001 From: gc <30398469+gc@users.noreply.github.com> Date: Mon, 4 Oct 2021 19:47:22 +1100 Subject: [PATCH] crypto: remove incorrect constructor invocation PR-URL: https://github.com/nodejs/node/pull/40300 Reviewed-By: Benjamin Gruenbaum Reviewed-By: Filip Skokan --- lib/internal/crypto/ec.js | 2 +- test/parallel/test-webcrypto-ed25519-ed448.js | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/lib/internal/crypto/ec.js b/lib/internal/crypto/ec.js index c684d6c66af26a..b64922bcdc883f 100644 --- a/lib/internal/crypto/ec.js +++ b/lib/internal/crypto/ec.js @@ -482,7 +482,7 @@ function ecdsaSignVerify(key, data, { name, hash }, signature) { // Fall through case 'NODE-ED448': if (hash !== undefined) - throw new lazyDOMException(`Hash is not permitted for ${name}`); + throw lazyDOMException(`Hash is not permitted for ${name}`); break; default: if (hash === undefined) diff --git a/test/parallel/test-webcrypto-ed25519-ed448.js b/test/parallel/test-webcrypto-ed25519-ed448.js index 8abca247738621..b18f3f9d3b4d44 100644 --- a/test/parallel/test-webcrypto-ed25519-ed448.js +++ b/test/parallel/test-webcrypto-ed25519-ed448.js @@ -1,3 +1,4 @@ +// Flags: --expose-internals 'use strict'; const common = require('../common'); @@ -11,6 +12,9 @@ const { webcrypto: { subtle } } = require('crypto'); +const { internalBinding } = require('internal/test/binding'); +const { DOMException } = internalBinding('messaging'); + async function generateKey(namedCurve) { return subtle.generateKey( { @@ -429,3 +433,53 @@ assert.rejects( } } } + +{ + // See: https://github.com/nodejs/node/pull/40300 + for (const namedCurve of ['NODE-ED25519', 'NODE-ED448']) { + assert.rejects( + (async () => { + const { privateKey } = await generateKey(namedCurve); + return subtle.sign( + { + name: namedCurve, + hash: 'SHA-256' + }, + privateKey, + Buffer.from('abc') + ); + })(), + (err) => { + assert.strictEqual(err.message, `Hash is not permitted for ${namedCurve}`); + assert(err instanceof DOMException); + return true; + }).then(common.mustCall()); + + assert.rejects( + (async () => { + const { publicKey, privateKey } = await generateKey(namedCurve); + const signature = await subtle.sign( + { + name: namedCurve, + }, + privateKey, + Buffer.from('abc') + ).catch(common.mustNotCall()); + + return subtle.verify( + { + name: namedCurve, + hash: 'SHA-256', + }, + publicKey, + signature, + Buffer.from('abc') + ); + })(), + (err) => { + assert.strictEqual(err.message, `Hash is not permitted for ${namedCurve}`); + assert(err instanceof DOMException); + return true; + }).then(common.mustCall()); + } +}