@@ -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