@@ -2233,16 +2233,17 @@ void SSLWrap<Base>::GetEphemeralKeyInfo(
2233
2233
2234
2234
Local<Object> info = Object::New (env->isolate ());
2235
2235
2236
- EVP_PKEY* key ;
2237
-
2238
- if ( SSL_get_server_tmp_key (w-> ssl_ . get (), & key)) {
2239
- int kid = EVP_PKEY_id (key);
2236
+ EVP_PKEY* raw_key ;
2237
+ if ( SSL_get_server_tmp_key (w-> ssl_ . get (), &raw_key)) {
2238
+ EVPKeyPointer key (raw_key);
2239
+ int kid = EVP_PKEY_id (key. get () );
2240
2240
switch (kid) {
2241
2241
case EVP_PKEY_DH:
2242
2242
info->Set (context, env->type_string (),
2243
2243
FIXED_ONE_BYTE_STRING (env->isolate (), " DH" )).FromJust ();
2244
2244
info->Set (context, env->size_string (),
2245
- Integer::New (env->isolate (), EVP_PKEY_bits (key))).FromJust ();
2245
+ Integer::New (env->isolate (), EVP_PKEY_bits (key.get ())))
2246
+ .FromJust ();
2246
2247
break ;
2247
2248
case EVP_PKEY_EC:
2248
2249
// TODO(shigeki) Change this to EVP_PKEY_X25519 and add EVP_PKEY_X448
@@ -2251,7 +2252,7 @@ void SSLWrap<Base>::GetEphemeralKeyInfo(
2251
2252
{
2252
2253
const char * curve_name;
2253
2254
if (kid == EVP_PKEY_EC) {
2254
- EC_KEY* ec = EVP_PKEY_get1_EC_KEY (key);
2255
+ EC_KEY* ec = EVP_PKEY_get1_EC_KEY (key. get () );
2255
2256
int nid = EC_GROUP_get_curve_name (EC_KEY_get0_group (ec));
2256
2257
curve_name = OBJ_nid2sn (nid);
2257
2258
EC_KEY_free (ec);
@@ -2265,11 +2266,10 @@ void SSLWrap<Base>::GetEphemeralKeyInfo(
2265
2266
curve_name)).FromJust ();
2266
2267
info->Set (context, env->size_string (),
2267
2268
Integer::New (env->isolate (),
2268
- EVP_PKEY_bits (key))).FromJust ();
2269
+ EVP_PKEY_bits (key. get () ))).FromJust ();
2269
2270
}
2270
2271
break ;
2271
2272
}
2272
- EVP_PKEY_free (key);
2273
2273
}
2274
2274
2275
2275
return args.GetReturnValue ().Set (info);
@@ -3138,7 +3138,7 @@ static ManagedEVPPKey GetPrivateKeyFromJs(
3138
3138
ParsePrivateKey (config.Release (), key.get (), key.size ());
3139
3139
if (!pkey)
3140
3140
ThrowCryptoError (env, ERR_get_error (), " Failed to read private key" );
3141
- return ManagedEVPPKey (pkey. release ( ));
3141
+ return ManagedEVPPKey (std::move (pkey ));
3142
3142
} else {
3143
3143
CHECK (args[*offset]->IsObject () && allow_key_object);
3144
3144
KeyObject* key;
@@ -3197,7 +3197,7 @@ static ManagedEVPPKey GetPublicOrPrivateKeyFromJs(
3197
3197
}
3198
3198
if (!pkey)
3199
3199
ThrowCryptoError (env, ERR_get_error (), " Failed to read asymmetric key" );
3200
- return ManagedEVPPKey (pkey. release ( ));
3200
+ return ManagedEVPPKey (std::move (pkey ));
3201
3201
} else {
3202
3202
CHECK (args[*offset]->IsObject ());
3203
3203
KeyObject* key = Unwrap<KeyObject>(args[*offset].As <Object>());
@@ -3287,42 +3287,27 @@ static MaybeLocal<Value> WritePrivateKey(
3287
3287
return BIOToStringOrBuffer (env, bio.get (), config.format_ );
3288
3288
}
3289
3289
3290
- ManagedEVPPKey::ManagedEVPPKey () : pkey_(nullptr ) {}
3291
-
3292
- ManagedEVPPKey::ManagedEVPPKey (EVP_PKEY* pkey) : pkey_(pkey) {}
3290
+ ManagedEVPPKey::ManagedEVPPKey (EVPKeyPointer&& pkey) : pkey_(std::move(pkey)) {}
3293
3291
3294
- ManagedEVPPKey::ManagedEVPPKey (const ManagedEVPPKey& key) : pkey_( nullptr ) {
3295
- *this = key ;
3292
+ ManagedEVPPKey::ManagedEVPPKey (const ManagedEVPPKey& that ) {
3293
+ *this = that ;
3296
3294
}
3297
3295
3298
- ManagedEVPPKey::ManagedEVPPKey (ManagedEVPPKey&& key) {
3299
- *this = key;
3300
- }
3296
+ ManagedEVPPKey& ManagedEVPPKey::operator =(const ManagedEVPPKey& that) {
3297
+ pkey_.reset (that.get ());
3301
3298
3302
- ManagedEVPPKey::~ManagedEVPPKey () {
3303
- EVP_PKEY_free (pkey_);
3304
- }
3305
-
3306
- ManagedEVPPKey& ManagedEVPPKey::operator =(const ManagedEVPPKey& key) {
3307
- EVP_PKEY_free (pkey_);
3308
- pkey_ = key.pkey_ ;
3309
- EVP_PKEY_up_ref (pkey_);
3310
- return *this ;
3311
- }
3299
+ if (pkey_)
3300
+ EVP_PKEY_up_ref (pkey_.get ());
3312
3301
3313
- ManagedEVPPKey& ManagedEVPPKey::operator =(ManagedEVPPKey&& key) {
3314
- EVP_PKEY_free (pkey_);
3315
- pkey_ = key.pkey_ ;
3316
- key.pkey_ = nullptr ;
3317
3302
return *this ;
3318
3303
}
3319
3304
3320
3305
ManagedEVPPKey::operator bool () const {
3321
- return pkey_ != nullptr ;
3306
+ return !!pkey_ ;
3322
3307
}
3323
3308
3324
3309
EVP_PKEY* ManagedEVPPKey::get () const {
3325
- return pkey_;
3310
+ return pkey_. get () ;
3326
3311
}
3327
3312
3328
3313
Local<Function> KeyObject::Initialize (Environment* env, Local<Object> target) {
@@ -5704,13 +5689,13 @@ class DSAKeyPairGenerationConfig : public KeyPairGenerationConfig {
5704
5689
}
5705
5690
}
5706
5691
5707
- EVP_PKEY* params = nullptr ;
5708
- if (EVP_PKEY_paramgen (param_ctx.get (), ¶ms ) <= 0 )
5692
+ EVP_PKEY* raw_params = nullptr ;
5693
+ if (EVP_PKEY_paramgen (param_ctx.get (), &raw_params ) <= 0 )
5709
5694
return nullptr ;
5695
+ EVPKeyPointer params (raw_params);
5710
5696
param_ctx.reset ();
5711
5697
5712
- EVPKeyCtxPointer key_ctx (EVP_PKEY_CTX_new (params, nullptr ));
5713
- EVP_PKEY_free (params);
5698
+ EVPKeyCtxPointer key_ctx (EVP_PKEY_CTX_new (params.get (), nullptr ));
5714
5699
return key_ctx;
5715
5700
}
5716
5701
@@ -5739,13 +5724,13 @@ class ECKeyPairGenerationConfig : public KeyPairGenerationConfig {
5739
5724
if (EVP_PKEY_CTX_set_ec_param_enc (param_ctx.get (), param_encoding_) <= 0 )
5740
5725
return nullptr ;
5741
5726
5742
- EVP_PKEY* params = nullptr ;
5743
- if (EVP_PKEY_paramgen (param_ctx.get (), ¶ms ) <= 0 )
5727
+ EVP_PKEY* raw_params = nullptr ;
5728
+ if (EVP_PKEY_paramgen (param_ctx.get (), &raw_params ) <= 0 )
5744
5729
return nullptr ;
5730
+ EVPKeyPointer params (raw_params);
5745
5731
param_ctx.reset ();
5746
5732
5747
- EVPKeyCtxPointer key_ctx (EVP_PKEY_CTX_new (params, nullptr ));
5748
- EVP_PKEY_free (params);
5733
+ EVPKeyCtxPointer key_ctx (EVP_PKEY_CTX_new (params.get (), nullptr ));
5749
5734
return key_ctx;
5750
5735
}
5751
5736
@@ -5793,7 +5778,7 @@ class GenerateKeyPairJob : public CryptoJob {
5793
5778
EVP_PKEY* pkey = nullptr ;
5794
5779
if (EVP_PKEY_keygen (ctx.get (), &pkey) != 1 )
5795
5780
return false ;
5796
- pkey_ = ManagedEVPPKey (pkey);
5781
+ pkey_ = ManagedEVPPKey (EVPKeyPointer ( pkey) );
5797
5782
return true ;
5798
5783
}
5799
5784
0 commit comments