The pbkdf2
fungsi memiliki implementasi JavaScript tetapi sebenarnya delegasi semua pekerjaan yang harus dilakukan untuk C ++ sisi.
env->SetMethod(target, "pbkdf2", PBKDF2);
env->SetMethod(target, "generateKeyPairRSA", GenerateKeyPairRSA);
env->SetMethod(target, "generateKeyPairDSA", GenerateKeyPairDSA);
env->SetMethod(target, "generateKeyPairEC", GenerateKeyPairEC);
NODE_DEFINE_CONSTANT(target, OPENSSL_EC_NAMED_CURVE);
NODE_DEFINE_CONSTANT(target, OPENSSL_EC_EXPLICIT_CURVE);
NODE_DEFINE_CONSTANT(target, kKeyEncodingPKCS1);
NODE_DEFINE_CONSTANT(target, kKeyEncodingPKCS8);
NODE_DEFINE_CONSTANT(target, kKeyEncodingSPKI);
NODE_DEFINE_CONSTANT(target, kKeyEncodingSEC1);
NODE_DEFINE_CONSTANT(target, kKeyFormatDER);
NODE_DEFINE_CONSTANT(target, kKeyFormatPEM);
NODE_DEFINE_CONSTANT(target, kKeyTypeSecret);
NODE_DEFINE_CONSTANT(target, kKeyTypePublic);
NODE_DEFINE_CONSTANT(target, kKeyTypePrivate);
env->SetMethod(target, "randomBytes", RandomBytes);
env->SetMethodNoSideEffect(target, "timingSafeEqual", TimingSafeEqual);
env->SetMethodNoSideEffect(target, "getSSLCiphers", GetSSLCiphers);
env->SetMethodNoSideEffect(target, "getCiphers", GetCiphers);
env->SetMethodNoSideEffect(target, "getHashes", GetHashes);
env->SetMethodNoSideEffect(target, "getCurves", GetCurves);
env->SetMethod(target, "publicEncrypt",
PublicKeyCipher::Cipher<PublicKeyCipher::kPublic,
EVP_PKEY_encrypt_init,
EVP_PKEY_encrypt>);
env->SetMethod(target, "privateDecrypt",
PublicKeyCipher::Cipher<PublicKeyCipher::kPrivate,
EVP_PKEY_decrypt_init,
EVP_PKEY_decrypt>);
env->SetMethod(target, "privateEncrypt",
PublicKeyCipher::Cipher<PublicKeyCipher::kPrivate,
EVP_PKEY_sign_init,
EVP_PKEY_sign>);
env->SetMethod(target, "publicDecrypt",
PublicKeyCipher::Cipher<PublicKeyCipher::kPublic,
EVP_PKEY_verify_recover_init,
EVP_PKEY_verify_recover>);
sumber daya: https://github.com/nodejs/node/blob/master/src/node_crypto.cc
Modul Libuv memiliki tanggung jawab lain yang relevan untuk beberapa fungsi yang sangat khusus di perpustakaan standar.
Untuk beberapa panggilan fungsi pustaka standar, sisi Node C ++ dan Libuv memutuskan untuk melakukan perhitungan mahal di luar loop acara sepenuhnya.
Alih-alih mereka menggunakan sesuatu yang disebut kolam ulir, kolam ulir adalah serangkaian empat utas yang dapat digunakan untuk menjalankan tugas yang mahal secara komputasi seperti pbkdf2
fungsi.
Secara default Libuv membuat 4 utas di kumpulan utas ini.
Selain utas yang digunakan dalam event loop ada empat utas lain yang dapat digunakan untuk membongkar perhitungan mahal yang perlu terjadi di dalam aplikasi kita.
Banyak fungsi yang disertakan dalam pustaka Node standar secara otomatis memanfaatkan kumpulan utas ini. The pbkdf2
fungsi menjadi salah satu dari mereka.
Kehadiran kumpulan utas ini sangat signifikan.
Jadi Node tidak benar-benar satu threaded, karena ada thread lain yang digunakan Node untuk melakukan beberapa tugas yang mahal secara komputasi.
Jika kumpulan acara bertanggung jawab untuk melakukan tugas yang mahal secara komputasi, maka aplikasi Node kami tidak dapat melakukan hal lain.
CPU kami menjalankan semua instruksi di dalam utas satu per satu.
Dengan menggunakan kumpulan utas kita dapat melakukan hal-hal lain di dalam perulangan peristiwa saat perhitungan terjadi.