@@ -4052,6 +4052,38 @@ void Hash::HashDigest(const FunctionCallbackInfo<Value>& args) {
4052
4052
}
4053
4053
4054
4054
4055
+ SignBase::~SignBase () {
4056
+ EVP_MD_CTX_free (mdctx_);
4057
+ }
4058
+
4059
+
4060
+ SignBase::Error SignBase::Init (const char * sign_type) {
4061
+ CHECK_EQ (mdctx_, nullptr );
4062
+ const EVP_MD* md = EVP_get_digestbyname (sign_type);
4063
+ if (md == nullptr )
4064
+ return kSignUnknownDigest ;
4065
+
4066
+ mdctx_ = EVP_MD_CTX_new ();
4067
+ if (mdctx_ == nullptr ||
4068
+ !EVP_DigestInit_ex (mdctx_, md, nullptr )) {
4069
+ EVP_MD_CTX_free (mdctx_);
4070
+ mdctx_ = nullptr ;
4071
+ return kSignInit ;
4072
+ }
4073
+
4074
+ return kSignOk ;
4075
+ }
4076
+
4077
+
4078
+ SignBase::Error SignBase::Update (const char * data, int len) {
4079
+ if (mdctx_ == nullptr )
4080
+ return kSignNotInitialised ;
4081
+ if (!EVP_DigestUpdate (mdctx_, data, len))
4082
+ return kSignUpdate ;
4083
+ return kSignOk ;
4084
+ }
4085
+
4086
+
4055
4087
void SignBase::CheckThrow (SignBase::Error error) {
4056
4088
HandleScope scope (env ()->isolate ());
4057
4089
@@ -4125,36 +4157,12 @@ void Sign::New(const FunctionCallbackInfo<Value>& args) {
4125
4157
}
4126
4158
4127
4159
4128
- SignBase::Error Sign::SignInit (const char * sign_type) {
4129
- CHECK_EQ (initialised_, false );
4130
- const EVP_MD* md = EVP_get_digestbyname (sign_type);
4131
- if (md == nullptr )
4132
- return kSignUnknownDigest ;
4133
-
4134
- EVP_MD_CTX_init (&mdctx_);
4135
- if (!EVP_DigestInit_ex (&mdctx_, md, nullptr ))
4136
- return kSignInit ;
4137
- initialised_ = true ;
4138
-
4139
- return kSignOk ;
4140
- }
4141
-
4142
-
4143
4160
void Sign::SignInit (const FunctionCallbackInfo<Value>& args) {
4144
4161
Sign* sign;
4145
4162
ASSIGN_OR_RETURN_UNWRAP (&sign, args.Holder ());
4146
4163
4147
4164
const node::Utf8Value sign_type (args.GetIsolate (), args[0 ]);
4148
- sign->CheckThrow (sign->SignInit (*sign_type));
4149
- }
4150
-
4151
-
4152
- SignBase::Error Sign::SignUpdate (const char * data, int len) {
4153
- if (!initialised_)
4154
- return kSignNotInitialised ;
4155
- if (!EVP_DigestUpdate (&mdctx_, data, len))
4156
- return kSignUpdate ;
4157
- return kSignOk ;
4165
+ sign->CheckThrow (sign->Init (*sign_type));
4158
4166
}
4159
4167
4160
4168
@@ -4165,7 +4173,7 @@ void Sign::SignUpdate(const FunctionCallbackInfo<Value>& args) {
4165
4173
Error err;
4166
4174
char * buf = Buffer::Data (args[0 ]);
4167
4175
size_t buflen = Buffer::Length (args[0 ]);
4168
- err = sign->SignUpdate (buf, buflen);
4176
+ err = sign->Update (buf, buflen);
4169
4177
4170
4178
sign->CheckThrow (err);
4171
4179
}
@@ -4208,7 +4216,7 @@ SignBase::Error Sign::SignFinal(const char* key_pem,
4208
4216
unsigned int * sig_len,
4209
4217
int padding,
4210
4218
int salt_len) {
4211
- if (!initialised_ )
4219
+ if (!mdctx_ )
4212
4220
return kSignNotInitialised ;
4213
4221
4214
4222
BIO* bp = nullptr ;
@@ -4253,18 +4261,17 @@ SignBase::Error Sign::SignFinal(const char* key_pem,
4253
4261
}
4254
4262
#endif // NODE_FIPS_MODE
4255
4263
4256
- if (Node_SignFinal (& mdctx_, sig, sig_len, pkey, padding, salt_len))
4264
+ if (Node_SignFinal (mdctx_, sig, sig_len, pkey, padding, salt_len))
4257
4265
fatal = false ;
4258
4266
4259
- initialised_ = false ;
4260
-
4261
4267
exit :
4262
4268
if (pkey != nullptr )
4263
4269
EVP_PKEY_free (pkey);
4264
4270
if (bp != nullptr )
4265
4271
BIO_free_all (bp);
4266
4272
4267
- EVP_MD_CTX_cleanup (&mdctx_);
4273
+ EVP_MD_CTX_free (mdctx_);
4274
+ mdctx_ = nullptr ;
4268
4275
4269
4276
if (fatal)
4270
4277
return kSignPrivateKey ;
@@ -4338,38 +4345,12 @@ void Verify::New(const FunctionCallbackInfo<Value>& args) {
4338
4345
}
4339
4346
4340
4347
4341
- SignBase::Error Verify::VerifyInit (const char * verify_type) {
4342
- CHECK_EQ (initialised_, false );
4343
- const EVP_MD* md = EVP_get_digestbyname (verify_type);
4344
- if (md == nullptr )
4345
- return kSignUnknownDigest ;
4346
-
4347
- EVP_MD_CTX_init (&mdctx_);
4348
- if (!EVP_DigestInit_ex (&mdctx_, md, nullptr ))
4349
- return kSignInit ;
4350
- initialised_ = true ;
4351
-
4352
- return kSignOk ;
4353
- }
4354
-
4355
-
4356
4348
void Verify::VerifyInit (const FunctionCallbackInfo<Value>& args) {
4357
4349
Verify* verify;
4358
4350
ASSIGN_OR_RETURN_UNWRAP (&verify, args.Holder ());
4359
4351
4360
4352
const node::Utf8Value verify_type (args.GetIsolate (), args[0 ]);
4361
- verify->CheckThrow (verify->VerifyInit (*verify_type));
4362
- }
4363
-
4364
-
4365
- SignBase::Error Verify::VerifyUpdate (const char * data, int len) {
4366
- if (!initialised_)
4367
- return kSignNotInitialised ;
4368
-
4369
- if (!EVP_DigestUpdate (&mdctx_, data, len))
4370
- return kSignUpdate ;
4371
-
4372
- return kSignOk ;
4353
+ verify->CheckThrow (verify->Init (*verify_type));
4373
4354
}
4374
4355
4375
4356
@@ -4380,7 +4361,7 @@ void Verify::VerifyUpdate(const FunctionCallbackInfo<Value>& args) {
4380
4361
Error err;
4381
4362
char * buf = Buffer::Data (args[0 ]);
4382
4363
size_t buflen = Buffer::Length (args[0 ]);
4383
- err = verify->VerifyUpdate (buf, buflen);
4364
+ err = verify->Update (buf, buflen);
4384
4365
4385
4366
verify->CheckThrow (err);
4386
4367
}
@@ -4393,7 +4374,7 @@ SignBase::Error Verify::VerifyFinal(const char* key_pem,
4393
4374
int padding,
4394
4375
int saltlen,
4395
4376
bool * verify_result) {
4396
- if (!initialised_ )
4377
+ if (!mdctx_ )
4397
4378
return kSignNotInitialised ;
4398
4379
4399
4380
EVP_PKEY* pkey = nullptr ;
@@ -4438,7 +4419,7 @@ SignBase::Error Verify::VerifyFinal(const char* key_pem,
4438
4419
goto exit ;
4439
4420
}
4440
4421
4441
- if (!EVP_DigestFinal_ex (& mdctx_, m, &m_len)) {
4422
+ if (!EVP_DigestFinal_ex (mdctx_, m, &m_len)) {
4442
4423
goto exit ;
4443
4424
}
4444
4425
@@ -4451,7 +4432,7 @@ SignBase::Error Verify::VerifyFinal(const char* key_pem,
4451
4432
goto err;
4452
4433
if (!ApplyRSAOptions (pkey, pkctx, padding, saltlen))
4453
4434
goto err;
4454
- if (EVP_PKEY_CTX_set_signature_md (pkctx, mdctx_. digest ) <= 0 )
4435
+ if (EVP_PKEY_CTX_set_signature_md (pkctx, EVP_MD_CTX_md ( mdctx_) ) <= 0 )
4455
4436
goto err;
4456
4437
r = EVP_PKEY_verify (pkctx,
4457
4438
reinterpret_cast <const unsigned char *>(sig),
@@ -4470,8 +4451,8 @@ SignBase::Error Verify::VerifyFinal(const char* key_pem,
4470
4451
if (x509 != nullptr )
4471
4452
X509_free (x509);
4472
4453
4473
- EVP_MD_CTX_cleanup (& mdctx_);
4474
- initialised_ = false ;
4454
+ EVP_MD_CTX_free ( mdctx_);
4455
+ mdctx_ = nullptr ;
4475
4456
4476
4457
if (fatal)
4477
4458
return kSignPublicKey ;
0 commit comments