crypto: don't crash on unknown asymmetricKeyType · nodejs/node@7c1fc93 (original) (raw)

5 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -1129,18 +1129,23 @@ passing keys as strings or `Buffer`s due to improved security features.
1129 1129 <!-- YAML
1130 1130 added: v11.6.0
1131 1131 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.
1132 1136 - version: REPLACEME
1133 1137 pr-url: https://github.com/nodejs/node/pull/26774
1134 1138 description: Added support for `'x25519'` and `'x448'`
1135 1139 - version: REPLACEME
1136 1140 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'`.
1138 1142 -->
1139 1143 * {string}
1140 1144
1141 1145 For asymmetric keys, this property represents the type of the embedded key
1142 1146 (`'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.
1144 1149
1145 1150 ### keyObject.export([options])
1146 1151 <!-- YAML
Original file line number Diff line number Diff line change
@@ -3690,7 +3690,7 @@ void KeyObject::InitPrivate(const ManagedEVPPKey& pkey) {
3690 3690 this->asymmetric_key_ = pkey;
3691 3691 }
3692 3692
3693 -Local<String> KeyObject::GetAsymmetricKeyType() const {
3693 +Local<Value> KeyObject::GetAsymmetricKeyType() const {
3694 3694 CHECK_NE(this->key_type_, kKeyTypeSecret);
3695 3695 switch (EVP_PKEY_id(this->asymmetric_key_.get())) {
3696 3696 case EVP_PKEY_RSA:
@@ -3708,7 +3708,7 @@ Local KeyObject::GetAsymmetricKeyType() const {
3708 3708 case EVP_PKEY_X448:
3709 3709 return env()->crypto_x448_string();
3710 3710 default:
3711 -CHECK(false);
3711 +return Undefined(env()->isolate());
3712 3712 }
3713 3713 }
3714 3714
Original file line number Diff line number Diff line change
@@ -470,7 +470,7 @@ class KeyObject : public BaseObject {
470 470
471 471 static void GetAsymmetricKeyType(
472 472 const v8::FunctionCallbackInfov8::Value& args);
473 - v8::Localv8::String\ GetAsymmetricKeyType() const;
473 + v8::Localv8::Value\ GetAsymmetricKeyType() const;
474 474
475 475 static void GetSymmetricKeySize(
476 476 const v8::FunctionCallbackInfov8::Value& args);
Original file line number Diff line number Diff 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-----
Original file line number Diff line number Diff line change
@@ -178,6 +178,13 @@ const privateDsa = fixtures.readKey('dsa_private_encrypted_1025.pem',
178 178 });
179 179 }
180 180
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 +
181 188 [
182 189 { private: fixtures.readSync('test_ed25519_privkey.pem', 'ascii'),
183 190 public: fixtures.readSync('test_ed25519_pubkey.pem', 'ascii'),