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(), &params) <= 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(), &params) <= 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

``