From e28ea89b1a400582c128099af2d97c1770facce0 Mon Sep 17 00:00:00 2001 From: Filip Skokan Date: Sat, 6 Feb 2021 23:07:35 +0100 Subject: [PATCH] crypto: fix subtle.importKey JWK OKP public key import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/37255 Reviewed-By: Rich Trott Reviewed-By: Tobias Nießen --- lib/internal/crypto/ec.js | 2 +- test/parallel/test-webcrypto-x25519-x448.js | 33 +++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/internal/crypto/ec.js b/lib/internal/crypto/ec.js index 88079707367b5d..24ccac8c38e059 100644 --- a/lib/internal/crypto/ec.js +++ b/lib/internal/crypto/ec.js @@ -303,7 +303,7 @@ async function ecImportKey( keyObject = createECRawKey( namedCurve, Buffer.from( - isPublic ? keyData.k : keyData.d, + isPublic ? keyData.x : keyData.d, 'base64'), isPublic); break; diff --git a/test/parallel/test-webcrypto-x25519-x448.js b/test/parallel/test-webcrypto-x25519-x448.js index 947948406306c6..322c6b7b013b21 100644 --- a/test/parallel/test-webcrypto-x25519-x448.js +++ b/test/parallel/test-webcrypto-x25519-x448.js @@ -244,3 +244,36 @@ assert.rejects( { message: /Unsupported named curves for ECDH/ }); + +{ + // Private JWK import + subtle.importKey( + 'jwk', + { + crv: 'X25519', + d: '8CE-XY7cvbR-Pu7mILHq8YZ4hLGAA2-RD01he5q2wUA', + x: '42IbTo34ZYANub5o42547vB6OxdEd44ztwZewoRch0Q', + kty: 'OKP' + }, + { + name: 'ECDH', + namedCurve: 'NODE-X25519' + }, + true, + ['deriveBits']).then(common.mustCall()); + + // Public JWK import + subtle.importKey( + 'jwk', + { + crv: 'X25519', + x: '42IbTo34ZYANub5o42547vB6OxdEd44ztwZewoRch0Q', + kty: 'OKP' + }, + { + name: 'ECDH', + namedCurve: 'NODE-X25519' + }, + true, + []).then(common.mustCall()); +}