From 7c9fedff95dd17edcd7af4ff690ac79af84a43e0 Mon Sep 17 00:00:00 2001 From: Filip Skokan Date: Thu, 18 Feb 2021 14:49:53 +0100 Subject: [PATCH] fixup! crypto: support JWK objects in create*Key --- doc/api/crypto.md | 2 +- lib/internal/crypto/keys.js | 14 ++++++-------- lib/internal/errors.js | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/doc/api/crypto.md b/doc/api/crypto.md index 477d540a384ef9..48af844b5f0b0e 100644 --- a/doc/api/crypto.md +++ b/doc/api/crypto.md @@ -2527,7 +2527,7 @@ changes: 2 ** 32 - 1 bytes. --> -* `key` {string|ArrayBuffer|Buffer|TypedArray|DataView|Object} +* `key` {string|ArrayBuffer|Buffer|TypedArray|DataView} * `encoding` {string} The string encoding when `key` is a string. * Returns: {KeyObject} diff --git a/lib/internal/crypto/keys.js b/lib/internal/crypto/keys.js index e76472dc60e727..03a5d81da0665c 100644 --- a/lib/internal/crypto/keys.js +++ b/lib/internal/crypto/keys.js @@ -405,13 +405,11 @@ function getKeyTypes(allowKeyObject, bufferOnly = false) { function getKeyObjectHandleFromJwk(key, ctx) { validateObject(key, 'key'); + key = { ...key }; validateOneOf( key.kty, 'key.kty', ['RSA', 'EC', 'OKP']); - const isPublic = ctx === kConsumePublic || ctx === kCreatePublic; - key = { ...key }; - if (key.kty === 'OKP') { validateString(key.crv, 'key.crv'); validateOneOf( @@ -431,17 +429,17 @@ function getKeyObjectHandleFromJwk(key, ctx) { case 'Ed25519': case 'X25519': if (keyData.byteLength !== 32) { - throw new ERR_CRYPTO_INVALID_JWK('Invalid JWK data'); + throw new ERR_CRYPTO_INVALID_JWK(); } break; case 'Ed448': if (keyData.byteLength !== 57) { - throw new ERR_CRYPTO_INVALID_JWK('Invalid JWK data'); + throw new ERR_CRYPTO_INVALID_JWK(); } break; case 'X448': if (keyData.byteLength !== 56) { - throw new ERR_CRYPTO_INVALID_JWK('Invalid JWK data'); + throw new ERR_CRYPTO_INVALID_JWK(); } break; } @@ -478,7 +476,7 @@ function getKeyObjectHandleFromJwk(key, ctx) { const handle = new KeyObjectHandle(); const type = handle.initJwk(key, key.crv); if (type === undefined) - throw new ERR_CRYPTO_INVALID_JWK('Invalid JWK data'); + throw new ERR_CRYPTO_INVALID_JWK(); return handle; } @@ -505,7 +503,7 @@ function getKeyObjectHandleFromJwk(key, ctx) { const handle = new KeyObjectHandle(); const type = handle.initJwk(key); if (type === undefined) - throw new ERR_CRYPTO_INVALID_JWK('Invalid JWK data'); + throw new ERR_CRYPTO_INVALID_JWK(); return handle; } diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 6e200df2a68b58..014bf07e67353e 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -836,7 +836,7 @@ E('ERR_CRYPTO_INCOMPATIBLE_KEY', 'Incompatible %s: %s', Error); E('ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS', 'The selected key encoding %s %s.', Error); E('ERR_CRYPTO_INVALID_DIGEST', 'Invalid digest: %s', TypeError); -E('ERR_CRYPTO_INVALID_JWK', 'Invalid JWK: %s', TypeError); +E('ERR_CRYPTO_INVALID_JWK', 'Invalid JWK data', TypeError); E('ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE', 'Invalid key object type %s, expected %s.', TypeError); E('ERR_CRYPTO_INVALID_STATE', 'Invalid state for operation %s', Error);