@@ -2206,16 +2206,17 @@ void SSLWrap<Base>::GetEphemeralKeyInfo(
2206
2206
2207
2207
Local<Object> 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<Base>::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<Base>::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<KeyObject>(args[*offset].As <Object>());
@@ -3259,42 +3259,27 @@ static MaybeLocal<Value> 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<Function> KeyObject::Initialize (Environment* env, Local<Object> 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
0 commit comments