pbkdf2
ফাংশন জাভাস্ক্রিপ্ট বাস্তবায়ন রয়েছে কিন্তু এটা আসলে প্রতিনিধিদের সব কাজ সি ++ পাশ থেকে কাজ করতে হবে।
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>);
সম্পদ: https://github.com/nodejs/node/blob/master/src/node_crypto.cc
লিবিভ মডিউলের আরও একটি দায়িত্ব রয়েছে যা স্ট্যান্ডার্ড লাইব্রেরিতে কিছু বিশেষ কাজের জন্য প্রাসঙ্গিক।
কিছু স্ট্যান্ডার্ড লাইব্রেরি ফাংশন কলগুলির জন্য, নোড সি ++ সাইড এবং লিবিভ ইভেন্ট লুপের বাইরে সম্পূর্ণ ব্যয়বহুল গণনা করার সিদ্ধান্ত নিয়েছে।
পরিবর্তে তারা থ্রেড পুল নামক কিছু ব্যবহার করে, থ্রেড পুলটি চারটি থ্রেডের একটি সিরিজ যা গণনার ক্ষেত্রে ব্যয়বহুল কাজগুলি চালনার জন্য ব্যবহার করা যেতে পারে pbkdf2
ফাংশন ।
ডিফল্টরূপে লিবুভ এই থ্রেড পুলে 4 টি থ্রেড তৈরি করে।
ইভেন্ট লুপে ব্যবহৃত থ্রেড ছাড়াও আরও চারটি থ্রেড রয়েছে যা আমাদের অ্যাপ্লিকেশনের অভ্যন্তরে ব্যয়বহুল গণনাগুলি অফলোড করতে ব্যবহার করা যেতে পারে।
নোড স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত অনেকগুলি ফাংশন স্বয়ংক্রিয়ভাবে এই থ্রেড পুলটি ব্যবহার করে। দ্যpbkdf2
ফাংশন তাদের মধ্যে একজন হচ্ছে।
এই থ্রেড পুলের উপস্থিতি খুব তাৎপর্যপূর্ণ।
সুতরাং নোড প্রকৃতপক্ষে একক থ্রেডেড নয়, কারণ নোট কিছু সংখ্যক ব্যয়বহুল কাজ করার জন্য নোড ব্যবহার করে।
যদি ইভেন্ট পুলটি গণনামূলকভাবে ব্যয়বহুল কাজটি করার জন্য দায়বদ্ধ ছিল, তবে আমাদের নোড অ্যাপ্লিকেশনটি আর কিছুই করতে পারে না।
আমাদের সিপিইউ এক এক করে থ্রেডের ভিতরে সমস্ত নির্দেশনা চালায়।
থ্রেড পুল ব্যবহার করে আমরা গণনা হওয়ার সময় ইভেন্ট লুপের ভিতরে অন্যান্য জিনিসগুলি করতে পারি।