Skip to content

Commit 95bd164

Browse files
committed
fixup!: move crv_name check to c++ part
1 parent a5672f1 commit 95bd164

File tree

5 files changed

+34
-28
lines changed

5 files changed

+34
-28
lines changed

lib/internal/crypto/keys.js

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ const {
152152

153153
const kAsymmetricKeyType = Symbol('kAsymmetricKeyType');
154154
const kAsymmetricKeyDetails = Symbol('kAsymmetricKeyDetails');
155-
const kAsymmetricKeyJWKProperties = Symbol('kAsymmetricKeyJWKProperties');
156155

157156
function normalizeKeyDetails(details = {}) {
158157
if (details.publicExponent !== undefined) {
@@ -190,28 +189,6 @@ const {
190189
return {};
191190
}
192191
}
193-
194-
[kAsymmetricKeyJWKProperties]() {
195-
switch (this.asymmetricKeyType) {
196-
case 'rsa': return {};
197-
case 'ec':
198-
switch (this.asymmetricKeyDetails.namedCurve) {
199-
case 'prime256v1': return { crv: 'P-256' };
200-
case 'secp256k1': return { crv: 'secp256k1' };
201-
case 'secp384r1': return { crv: 'P-384' };
202-
case 'secp521r1': return { crv: 'P-521' };
203-
default:
204-
throw new ERR_CRYPTO_JWK_UNSUPPORTED_CURVE(
205-
this.asymmetricKeyDetails.namedCurve);
206-
}
207-
case 'ed25519': return { crv: 'Ed25519' };
208-
case 'ed448': return { crv: 'Ed448' };
209-
case 'x25519': return { crv: 'X25519' };
210-
case 'x448': return { crv: 'X448' };
211-
default:
212-
throw new ERR_CRYPTO_JWK_UNSUPPORTED_KEY_TYPE();
213-
}
214-
}
215192
}
216193

217194
class PublicKeyObject extends AsymmetricKeyObject {
@@ -221,8 +198,7 @@ const {
221198

222199
export(options) {
223200
if (options && options.format === 'jwk') {
224-
const properties = this[kAsymmetricKeyJWKProperties]();
225-
return this[kHandle].exportJwk(properties);
201+
return this[kHandle].exportJwk({});
226202
}
227203
const {
228204
format,
@@ -243,8 +219,7 @@ const {
243219
throw new ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS(
244220
'jwk', 'does not support encryption');
245221
}
246-
const properties = this[kAsymmetricKeyJWKProperties]();
247-
return this[kHandle].exportJwk(properties);
222+
return this[kHandle].exportJwk({});
248223
}
249224
const {
250225
format,

lib/internal/errors.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -923,7 +923,6 @@ E('ERR_CRYPTO_INVALID_JWK', 'Invalid JWK data', TypeError);
923923
E('ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE',
924924
'Invalid key object type %s, expected %s.', TypeError);
925925
E('ERR_CRYPTO_INVALID_STATE', 'Invalid state for operation %s', Error);
926-
E('ERR_CRYPTO_JWK_UNSUPPORTED_CURVE', 'Unsupported JWK EC curve: %s.', Error);
927926
E('ERR_CRYPTO_JWK_UNSUPPORTED_KEY_TYPE', 'Unsupported JWK Key Type.', Error);
928927
E('ERR_CRYPTO_PBKDF2_ERROR', 'PBKDF2 error', Error);
929928
E('ERR_CRYPTO_SCRYPT_INVALID_PARAMETER', 'Invalid scrypt parameter', Error);

src/crypto/crypto_ec.cc

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,33 @@ Maybe<bool> ExportJWKEcKey(
740740
return Nothing<bool>();
741741
}
742742

743+
Local<String> crv_name;
744+
const int nid = EC_GROUP_get_curve_name(group);
745+
switch (nid) {
746+
case NID_X9_62_prime256v1:
747+
crv_name = OneByteString(env->isolate(), "P-256");
748+
break;
749+
case NID_secp256k1:
750+
crv_name = OneByteString(env->isolate(), "secp256k1");
751+
break;
752+
case NID_secp384r1:
753+
crv_name = OneByteString(env->isolate(), "P-384");
754+
break;
755+
case NID_secp521r1:
756+
crv_name = OneByteString(env->isolate(), "P-521");
757+
break;
758+
default:
759+
ERR_CRYPTO_JWK_UNSUPPORTED_CURVE(env->isolate(),
760+
"Unsupported JWK EC curve: %s.",
761+
OBJ_nid2sn(nid));
762+
}
763+
if (target->Set(
764+
env->context(),
765+
env->jwk_crv_string(),
766+
crv_name).IsNothing()) {
767+
return Nothing<bool>();
768+
}
769+
743770
if (key->GetKeyType() == kKeyTypePrivate) {
744771
const BIGNUM* pvt = EC_KEY_get0_private_key(ec);
745772
return SetEncodedValue(

src/crypto/crypto_keys.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,8 @@ Maybe<bool> ExportJWKAsymmetricKey(
501501
case EVP_PKEY_X25519:
502502
// Fall through
503503
case EVP_PKEY_X448: return ExportJWKEdKey(env, key, target);
504+
default:
505+
ERR_CRYPTO_JWK_UNSUPPORTED_KEY_TYPE(env->isolate());
504506
}
505507
THROW_ERR_CRYPTO_INVALID_KEYTYPE(env);
506508
return Just(false);

src/node_errors.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ void OnFatalError(const char* location, const char* message);
4949
V(ERR_CRYPTO_INVALID_SCRYPT_PARAMS, RangeError) \
5050
V(ERR_CRYPTO_INVALID_STATE, Error) \
5151
V(ERR_CRYPTO_INVALID_TAG_LENGTH, RangeError) \
52+
V(ERR_CRYPTO_JWK_UNSUPPORTED_CURVE, Error) \
53+
V(ERR_CRYPTO_JWK_UNSUPPORTED_KEY_TYPE, Error) \
5254
V(ERR_CRYPTO_OPERATION_FAILED, Error) \
5355
V(ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH, RangeError) \
5456
V(ERR_CRYPTO_UNKNOWN_CIPHER, Error) \
@@ -136,6 +138,7 @@ ERRORS_WITH_CODE(V)
136138
V(ERR_CRYPTO_INVALID_SCRYPT_PARAMS, "Invalid scrypt params") \
137139
V(ERR_CRYPTO_INVALID_STATE, "Invalid state") \
138140
V(ERR_CRYPTO_INVALID_TAG_LENGTH, "Invalid taglength") \
141+
V(ERR_CRYPTO_JWK_UNSUPPORTED_KEY_TYPE, "Unsupported JWK Key Type.") \
139142
V(ERR_CRYPTO_OPERATION_FAILED, "Operation failed") \
140143
V(ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH, \
141144
"Input buffers must have the same byte length") \

0 commit comments

Comments
 (0)