src: use EVPKeyPointer in more places · nodejs/node@15ec381 (original) (raw)
`@@ -2206,16 +2206,17 @@ void SSLWrap::GetEphemeralKeyInfo(
`
2206
2206
``
2207
2207
` Local info = Object::New(env->isolate());
`
2208
2208
``
2209
``
`-
EVP_PKEY* key;
`
2210
``
-
2211
``
`-
if (SSL_get_server_tmp_key(w->ssl_.get(), &key)) {
`
2212
``
`-
int kid = EVP_PKEY_id(key);
`
``
2209
`+
EVP_PKEY* raw_key;
`
``
2210
`+
if (SSL_get_server_tmp_key(w->ssl_.get(), &raw_key)) {
`
``
2211
`+
EVPKeyPointer key(raw_key);
`
``
2212
`+
int kid = EVP_PKEY_id(key.get());
`
2213
2213
`switch (kid) {
`
2214
2214
`case EVP_PKEY_DH:
`
2215
2215
` info->Set(context, env->type_string(),
`
2216
2216
`FIXED_ONE_BYTE_STRING(env->isolate(), "DH")).FromJust();
`
2217
2217
` info->Set(context, env->size_string(),
`
2218
``
`-
Integer::New(env->isolate(), EVP_PKEY_bits(key))).FromJust();
`
``
2218
`+
Integer::New(env->isolate(), EVP_PKEY_bits(key.get())))
`
``
2219
`+
.FromJust();
`
2219
2220
`break;
`
2220
2221
`case EVP_PKEY_EC:
`
2221
2222
`// TODO(shigeki) Change this to EVP_PKEY_X25519 and add EVP_PKEY_X448
`
`@@ -2224,7 +2225,7 @@ void SSLWrap::GetEphemeralKeyInfo(
`
2224
2225
` {
`
2225
2226
`const char* curve_name;
`
2226
2227
`if (kid == EVP_PKEY_EC) {
`
2227
``
`-
EC_KEY* ec = EVP_PKEY_get1_EC_KEY(key);
`
``
2228
`+
EC_KEY* ec = EVP_PKEY_get1_EC_KEY(key.get());
`
2228
2229
`int nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(ec));
`
2229
2230
` curve_name = OBJ_nid2sn(nid);
`
2230
2231
`EC_KEY_free(ec);
`
`@@ -2238,11 +2239,10 @@ void SSLWrap::GetEphemeralKeyInfo(
`
2238
2239
` curve_name)).FromJust();
`
2239
2240
` info->Set(context, env->size_string(),
`
2240
2241
`Integer::New(env->isolate(),
`
2241
``
`-
EVP_PKEY_bits(key))).FromJust();
`
``
2242
`+
EVP_PKEY_bits(key.get()))).FromJust();
`
2242
2243
` }
`
2243
2244
`break;
`
2244
2245
` }
`
2245
``
`-
EVP_PKEY_free(key);
`
2246
2246
` }
`
2247
2247
``
2248
2248
`return args.GetReturnValue().Set(info);
`
`@@ -3110,7 +3110,7 @@ static ManagedEVPPKey GetPrivateKeyFromJs(
`
3110
3110
`ParsePrivateKey(config.Release(), key.get(), key.size());
`
3111
3111
`if (!pkey)
`
3112
3112
`ThrowCryptoError(env, ERR_get_error(), "Failed to read private key");
`
3113
``
`-
return ManagedEVPPKey(pkey.release());
`
``
3113
`+
return ManagedEVPPKey(std::move(pkey));
`
3114
3114
` } else {
`
3115
3115
`CHECK(args[*offset]->IsObject() && allow_key_object);
`
3116
3116
` KeyObject* key;
`
`@@ -3169,7 +3169,7 @@ static ManagedEVPPKey GetPublicOrPrivateKeyFromJs(
`
3169
3169
` }
`
3170
3170
`if (!pkey)
`
3171
3171
`ThrowCryptoError(env, ERR_get_error(), "Failed to read asymmetric key");
`
3172
``
`-
return ManagedEVPPKey(pkey.release());
`
``
3172
`+
return ManagedEVPPKey(std::move(pkey));
`
3173
3173
` } else {
`
3174
3174
`CHECK(args[*offset]->IsObject());
`
3175
3175
` KeyObject* key = Unwrap(args[*offset].As());
`
`@@ -3259,42 +3259,27 @@ static MaybeLocal WritePrivateKey(
`
3259
3259
`return BIOToStringOrBuffer(env, bio.get(), config.format_);
`
3260
3260
`}
`
3261
3261
``
3262
``
`-
ManagedEVPPKey::ManagedEVPPKey() : pkey_(nullptr) {}
`
3263
``
-
3264
``
`-
ManagedEVPPKey::ManagedEVPPKey(EVP_PKEY* pkey) : pkey_(pkey) {}
`
``
3262
`+
ManagedEVPPKey::ManagedEVPPKey(EVPKeyPointer&& pkey) : pkey_(std::move(pkey)) {}
`
3265
3263
``
3266
``
`-
ManagedEVPPKey::ManagedEVPPKey(const ManagedEVPPKey& key) : pkey_(nullptr) {
`
3267
``
`-
*this = key;
`
``
3264
`+
ManagedEVPPKey::ManagedEVPPKey(const ManagedEVPPKey& that) {
`
``
3265
`+
*this = that;
`
3268
3266
`}
`
3269
3267
``
3270
``
`-
ManagedEVPPKey::ManagedEVPPKey(ManagedEVPPKey&& key) {
`
3271
``
`-
*this = key;
`
3272
``
`-
}
`
``
3268
`+
ManagedEVPPKey& ManagedEVPPKey::operator=(const ManagedEVPPKey& that) {
`
``
3269
`+
pkey_.reset(that.get());
`
3273
3270
``
3274
``
`-
ManagedEVPPKey::~ManagedEVPPKey() {
`
3275
``
`-
EVP_PKEY_free(pkey_);
`
3276
``
`-
}
`
3277
``
-
3278
``
`-
ManagedEVPPKey& ManagedEVPPKey::operator=(const ManagedEVPPKey& key) {
`
3279
``
`-
EVP_PKEY_free(pkey_);
`
3280
``
`-
pkey_ = key.pkey_;
`
3281
``
`-
EVP_PKEY_up_ref(pkey_);
`
3282
``
`-
return *this;
`
3283
``
`-
}
`
``
3271
`+
if (pkey_)
`
``
3272
`+
EVP_PKEY_up_ref(pkey_.get());
`
3284
3273
``
3285
``
`-
ManagedEVPPKey& ManagedEVPPKey::operator=(ManagedEVPPKey&& key) {
`
3286
``
`-
EVP_PKEY_free(pkey_);
`
3287
``
`-
pkey_ = key.pkey_;
`
3288
``
`-
key.pkey_ = nullptr;
`
3289
3274
`return *this;
`
3290
3275
`}
`
3291
3276
``
3292
3277
`ManagedEVPPKey::operator bool() const {
`
3293
``
`-
return pkey_ != nullptr;
`
``
3278
`+
return !!pkey_;
`
3294
3279
`}
`
3295
3280
``
3296
3281
`EVP_PKEY* ManagedEVPPKey::get() const {
`
3297
``
`-
return pkey_;
`
``
3282
`+
return pkey_.get();
`
3298
3283
`}
`
3299
3284
``
3300
3285
`Local KeyObject::Initialize(Environment* env, Local target) {
`
`@@ -5672,13 +5657,13 @@ class DSAKeyPairGenerationConfig : public KeyPairGenerationConfig {
`
5672
5657
` }
`
5673
5658
` }
`
5674
5659
``
5675
``
`-
EVP_PKEY* params = nullptr;
`
5676
``
`-
if (EVP_PKEY_paramgen(param_ctx.get(), ¶ms) <= 0)
`
``
5660
`+
EVP_PKEY* raw_params = nullptr;
`
``
5661
`+
if (EVP_PKEY_paramgen(param_ctx.get(), &raw_params) <= 0)
`
5677
5662
`return nullptr;
`
``
5663
`+
EVPKeyPointer params(raw_params);
`
5678
5664
` param_ctx.reset();
`
5679
5665
``
5680
``
`-
EVPKeyCtxPointer key_ctx(EVP_PKEY_CTX_new(params, nullptr));
`
5681
``
`-
EVP_PKEY_free(params);
`
``
5666
`+
EVPKeyCtxPointer key_ctx(EVP_PKEY_CTX_new(params.get(), nullptr));
`
5682
5667
`return key_ctx;
`
5683
5668
` }
`
5684
5669
``
`@@ -5707,13 +5692,13 @@ class ECKeyPairGenerationConfig : public KeyPairGenerationConfig {
`
5707
5692
`if (EVP_PKEY_CTX_set_ec_param_enc(param_ctx.get(), param_encoding_) <= 0)
`
5708
5693
`return nullptr;
`
5709
5694
``
5710
``
`-
EVP_PKEY* params = nullptr;
`
5711
``
`-
if (EVP_PKEY_paramgen(param_ctx.get(), ¶ms) <= 0)
`
``
5695
`+
EVP_PKEY* raw_params = nullptr;
`
``
5696
`+
if (EVP_PKEY_paramgen(param_ctx.get(), &raw_params) <= 0)
`
5712
5697
`return nullptr;
`
``
5698
`+
EVPKeyPointer params(raw_params);
`
5713
5699
` param_ctx.reset();
`
5714
5700
``
5715
``
`-
EVPKeyCtxPointer key_ctx(EVP_PKEY_CTX_new(params, nullptr));
`
5716
``
`-
EVP_PKEY_free(params);
`
``
5701
`+
EVPKeyCtxPointer key_ctx(EVP_PKEY_CTX_new(params.get(), nullptr));
`
5717
5702
`return key_ctx;
`
5718
5703
` }
`
5719
5704
``
`@@ -5761,7 +5746,7 @@ class GenerateKeyPairJob : public CryptoJob {
`
5761
5746
` EVP_PKEY* pkey = nullptr;
`
5762
5747
`if (EVP_PKEY_keygen(ctx.get(), &pkey) != 1)
`
5763
5748
`return false;
`
5764
``
`-
pkey_ = ManagedEVPPKey(pkey);
`
``
5749
`+
pkey_ = ManagedEVPPKey(EVPKeyPointer(pkey));
`
5765
5750
`return true;
`
5766
5751
` }
`
5767
5752
``