Skip to content

Commit 7c1fc93

Browse files
panvatniessen
authored andcommitted
crypto: don't crash on unknown asymmetricKeyType
PR-URL: #26786 Fixes: #26775 Reviewed-By: Sam Roberts <[email protected]> Reviewed-By: Tobias Nießen <[email protected]>
1 parent 66b9536 commit 7c1fc93

File tree

5 files changed

+45
-5
lines changed

5 files changed

+45
-5
lines changed

doc/api/crypto.md

+7-2
Original file line numberDiff line numberDiff line change
@@ -1129,18 +1129,23 @@ passing keys as strings or `Buffer`s due to improved security features.
11291129
<!-- YAML
11301130
added: v11.6.0
11311131
changes:
1132+
- version: REPLACEME
1133+
pr-url: https://github.com/nodejs/node/pull/26786
1134+
description: This property now returns `undefined` for KeyObject
1135+
instances of unrecognized type instead of aborting.
11321136
- version: REPLACEME
11331137
pr-url: https://github.com/nodejs/node/pull/26774
11341138
description: Added support for `'x25519'` and `'x448'`
11351139
- version: REPLACEME
11361140
pr-url: https://github.com/nodejs/node/pull/26319
1137-
description: Added support for `'ed25519'` and `'ed448'`
1141+
description: Added support for `'ed25519'` and `'ed448'`.
11381142
-->
11391143
* {string}
11401144

11411145
For asymmetric keys, this property represents the type of the embedded key
11421146
(`'rsa'`, `'dsa'`, `'ec'`, `'ed25519'`, `'ed448'`, `'x25519'` or `'x448'`).
1143-
This property is `undefined` for symmetric keys.
1147+
This property is `undefined` for unrecognized `KeyObject` types and symmetric
1148+
keys.
11441149

11451150
### keyObject.export([options])
11461151
<!-- YAML

src/node_crypto.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -3690,7 +3690,7 @@ void KeyObject::InitPrivate(const ManagedEVPPKey& pkey) {
36903690
this->asymmetric_key_ = pkey;
36913691
}
36923692

3693-
Local<String> KeyObject::GetAsymmetricKeyType() const {
3693+
Local<Value> KeyObject::GetAsymmetricKeyType() const {
36943694
CHECK_NE(this->key_type_, kKeyTypeSecret);
36953695
switch (EVP_PKEY_id(this->asymmetric_key_.get())) {
36963696
case EVP_PKEY_RSA:
@@ -3708,7 +3708,7 @@ Local<String> KeyObject::GetAsymmetricKeyType() const {
37083708
case EVP_PKEY_X448:
37093709
return env()->crypto_x448_string();
37103710
default:
3711-
CHECK(false);
3711+
return Undefined(env()->isolate());
37123712
}
37133713
}
37143714

src/node_crypto.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ class KeyObject : public BaseObject {
470470

471471
static void GetAsymmetricKeyType(
472472
const v8::FunctionCallbackInfo<v8::Value>& args);
473-
v8::Local<v8::String> GetAsymmetricKeyType() const;
473+
v8::Local<v8::Value> GetAsymmetricKeyType() const;
474474

475475
static void GetSymmetricKeySize(
476476
const v8::FunctionCallbackInfo<v8::Value>& args);
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEugIBADALBgkqhkiG9w0BAQoEggSmMIIEogIBAAKCAQEAwMSNbT9SbSHvXmPt
3+
j1x2Ipk1tUM06301UD91xGcA0232zrIQcKjsPM7bE6YXN0zRxfLJUqalewCk80Ct
4+
6V+E5XtMHUFQt1Ne8HW9U930KnfnQEyU8UwRPoWWeZQhs+sa8ZfggtfN7gq4/wiS
5+
KFNNtSJb24NKoLis31P0nILGC4/JewgE0QaFUoOL+Oc3dMhwWg9/H64sSjhI/SGW
6+
9Sv3M6WcSn7vQCe8oM2vslf3Xm8rHNqZMlXujs7zhRtcr5alKz9BwMJIoGouQrk9
7+
9cgupdYsddgNh2bC4TQR9BMKHj8tV5Uf3Pbf4EoZOFffCbyBZxmKtsYsmhh2FDLA
8+
RzNhKwIDAQABAoIBAHBRlj4ziSmBfmG3Q/ImY8chEkQ9lpYn7GqHr2zyv25yQj6J
9+
Tj72jj+YH9pBCoH0Rr5aCqgX5Y/X/kSmSS8TsvGrd9wL9KX88/KUB+7YAq7EEoBK
10+
nvZB5kJRwC2y/DhDIv3mCrDyYVDz+nrPWaoZb8u861zqEQ+4yzGNT5fqMs8Ewm8A
11+
hxg3GA2R6FC2CymZO884XOxlVac6SNURfA+U+xrcMIXbXpok2Z5eh/kMOeIKwmL0
12+
QEO0U6DEnZm4rJjywu8fEkKbX00YfaDQaiGzRZfvmzkTPIQemXPWARdIvFtJU8Fx
13+
OWWeMumJD1KiU9ISW4e76l7F8UOviT6jEg9rxFECgYEA96WCEIB+O4aO7+s56kOv
14+
vQkEXn959lz7e++S9AV3R19PpBCh50l5v9NSjGQlA4FU4AdBB5EmiX/bLZRHFwHI
15+
KLDsMFuq9id3OPHYIzFP4YjVHTGRPZToJHwy4ePIdZEaeJHY39EEz8oHsSSJlLdm
16+
o0417RsFAfApW2VN63c3JFcCgYEAx0Um/ATsT4ELguVQ+XlquLQdS12XS7zjcwWv
17+
PL8UyooSxcjcbLcJB6DRWXM0NOry7KPUCIF4m3KSjIZypV/v2KVFPCfD3vxZcdB7
18+
xgccqXJMUx7MSs9AMZXTtv5hG7RS5z+ig7Yi/6nzBm21jKYKbFDbqfq8MSfiR6cT
19+
KjR+RU0CgYAm/iFnlcPKfZpd/mylDTlLi3Lrqii6+NMEJam+0GmCjGhOzeugLjqE
20+
ULLLtiz5y1Bg4eOEXH9z4PTSzWkQH1Czz3+w8Y4OqhIknjfI+se4HEJqEVbsGlke
21+
/YtJdAMpN8qyN0ytmQyn5wilBLrA9surZPIqvjlgn77zTBUjwSamiwKBgAqIVS8s
22+
83CgWYNpq4YELOfmXUYGhGC0czE5M7H6R5cNBUD/BOeaJRgKIAaiWDgT0xM+9Y4d
23+
icptm+Fhmd2z3HGPCsHLOEco/3FMm74z0ggCypX6IsIxgiscyDv75hYYyej/LA/a
24+
KK9qxDWqxtXQUOy4uWOapSfT+9ndst2gOKxhAoGAVFcfedCLxummgTtZE91n59pL
25+
TWTk4GgYpWyv6XbHjYrFW2y18qmn0hmEpO+440So0NmGGDtNnPYNUKY/MPjHScwC
26+
FoZMFqqnkmshXz0uDx3gMQK2JDmdF+s3VwZq4Rtb3NJ9v4/WMgWftxaUpAm1/aRC
27+
IHc67mAAez4i8fg2wTQ=
28+
-----END PRIVATE KEY-----

test/parallel/test-crypto-key-objects.js

+7
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,13 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
178178
});
179179
}
180180

181+
{
182+
// This should not cause a crash: https://github.com/nodejs/node/pull/26786
183+
const pem = fixtures.readSync('test_unknown_privkey.pem', 'ascii');
184+
const key = createPrivateKey(pem);
185+
assert.strictEqual(key.asymmetricKeyType, undefined);
186+
}
187+
181188
[
182189
{ private: fixtures.readSync('test_ed25519_privkey.pem', 'ascii'),
183190
public: fixtures.readSync('test_ed25519_pubkey.pem', 'ascii'),

0 commit comments

Comments
 (0)