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'), |