Skip to content

Commit 41f79fb

Browse files
bnoordhuisaddaleax
authored andcommitted
src: refactor PBKDF2Request
PR-URL: #14122 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 233740c commit 41f79fb

File tree

1 file changed

+43
-34
lines changed

1 file changed

+43
-34
lines changed

src/node_crypto.cc

+43-34
Original file line numberDiff line numberDiff line change
@@ -5310,9 +5310,15 @@ class PBKDF2Request : public AsyncWrap {
53105310

53115311
size_t self_size() const override { return sizeof(*this); }
53125312

5313-
uv_work_t work_req_;
5313+
static void Work(uv_work_t* work_req);
5314+
void Work();
5315+
5316+
static void After(uv_work_t* work_req, int status);
5317+
void After(Local<Value> argv[2]);
5318+
void After();
53145319

53155320
private:
5321+
uv_work_t work_req_;
53165322
const EVP_MD* digest_;
53175323
int error_;
53185324
int passlen_;
@@ -5325,48 +5331,52 @@ class PBKDF2Request : public AsyncWrap {
53255331
};
53265332

53275333

5328-
void EIO_PBKDF2(PBKDF2Request* req) {
5329-
req->set_error(PKCS5_PBKDF2_HMAC(
5330-
req->pass(),
5331-
req->passlen(),
5332-
reinterpret_cast<unsigned char*>(req->salt()),
5333-
req->saltlen(),
5334-
req->iter(),
5335-
req->digest(),
5336-
req->keylen(),
5337-
reinterpret_cast<unsigned char*>(req->key())));
5338-
OPENSSL_cleanse(req->pass(), req->passlen());
5339-
OPENSSL_cleanse(req->salt(), req->saltlen());
5334+
void PBKDF2Request::Work() {
5335+
set_error(PKCS5_PBKDF2_HMAC(
5336+
pass(),
5337+
passlen(),
5338+
reinterpret_cast<unsigned char*>(salt()),
5339+
saltlen(),
5340+
iter(),
5341+
digest(),
5342+
keylen(),
5343+
reinterpret_cast<unsigned char*>(key())));
5344+
OPENSSL_cleanse(pass(), passlen());
5345+
OPENSSL_cleanse(salt(), saltlen());
53405346
}
53415347

53425348

5343-
void EIO_PBKDF2(uv_work_t* work_req) {
5349+
void PBKDF2Request::Work(uv_work_t* work_req) {
53445350
PBKDF2Request* req = ContainerOf(&PBKDF2Request::work_req_, work_req);
5345-
EIO_PBKDF2(req);
5351+
req->Work();
53465352
}
53475353

53485354

5349-
void EIO_PBKDF2After(PBKDF2Request* req, Local<Value> argv[2]) {
5350-
if (req->error()) {
5351-
argv[0] = Undefined(req->env()->isolate());
5352-
argv[1] = Encode(req->env()->isolate(), req->key(), req->keylen(), BUFFER);
5353-
OPENSSL_cleanse(req->key(), req->keylen());
5355+
void PBKDF2Request::After(Local<Value> argv[2]) {
5356+
if (error()) {
5357+
argv[0] = Undefined(env()->isolate());
5358+
argv[1] = Encode(env()->isolate(), key(), keylen(), BUFFER);
5359+
OPENSSL_cleanse(key(), keylen());
53545360
} else {
5355-
argv[0] = Exception::Error(req->env()->pbkdf2_error_string());
5356-
argv[1] = Undefined(req->env()->isolate());
5361+
argv[0] = Exception::Error(env()->pbkdf2_error_string());
5362+
argv[1] = Undefined(env()->isolate());
53575363
}
53585364
}
53595365

53605366

5361-
void EIO_PBKDF2After(uv_work_t* work_req, int status) {
5367+
void PBKDF2Request::After() {
5368+
HandleScope handle_scope(env()->isolate());
5369+
Context::Scope context_scope(env()->context());
5370+
Local<Value> argv[2];
5371+
After(argv);
5372+
MakeCallback(env()->ondone_string(), arraysize(argv), argv);
5373+
}
5374+
5375+
5376+
void PBKDF2Request::After(uv_work_t* work_req, int status) {
53625377
CHECK_EQ(status, 0);
53635378
PBKDF2Request* req = ContainerOf(&PBKDF2Request::work_req_, work_req);
5364-
Environment* env = req->env();
5365-
HandleScope handle_scope(env->isolate());
5366-
Context::Scope context_scope(env->context());
5367-
Local<Value> argv[2];
5368-
EIO_PBKDF2After(req, argv);
5369-
req->MakeCallback(env->ondone_string(), arraysize(argv), argv);
5379+
req->After();
53705380
delete req;
53715381
}
53725382

@@ -5469,14 +5479,13 @@ void PBKDF2(const FunctionCallbackInfo<Value>& args) {
54695479
obj->Set(env->domain_string(), env->domain_array()->Get(0));
54705480
uv_queue_work(env->event_loop(),
54715481
req->work_req(),
5472-
EIO_PBKDF2,
5473-
EIO_PBKDF2After);
5482+
PBKDF2Request::Work,
5483+
PBKDF2Request::After);
54745484
} else {
54755485
env->PrintSyncTrace();
5486+
req->Work();
54765487
Local<Value> argv[2];
5477-
EIO_PBKDF2(req);
5478-
EIO_PBKDF2After(req, argv);
5479-
5488+
req->After(argv);
54805489
delete req;
54815490

54825491
if (argv[0]->IsObject())

0 commit comments

Comments
 (0)