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
लिबुव मॉड्यूल की एक और जिम्मेदारी है जो मानक पुस्तकालय में कुछ विशेष कार्यों के लिए प्रासंगिक है।
कुछ मानक लाइब्रेरी फ़ंक्शन कॉल के लिए, नोड C ++ पक्ष और Libuv पूरी तरह से इवेंट लूप के बाहर महंगी गणना करने का निर्णय लेते हैं।
इसके बजाय वे थ्रेड पूल नामक किसी चीज का उपयोग करते हैं, थ्रेड पूल चार धागों की एक श्रृंखला है जिसका उपयोग pbkdf2
फंक्शन जैसे कम्प्यूटेशनल रूप से महंगे कार्यों को चलाने के लिए किया जा सकता है ।
डिफ़ॉल्ट रूप से लिबुव इस थ्रेड पूल में 4 धागे बनाता है।
ईवेंट लूप में उपयोग किए जाने वाले थ्रेड्स के अलावा चार अन्य थ्रेड्स हैं जिनका उपयोग महंगी गणनाओं को ऑफलोड करने के लिए किया जा सकता है जो हमारे एप्लिकेशन के अंदर होने की आवश्यकता होती है।
नोड मानक पुस्तकालय में शामिल कई फ़ंक्शन स्वचालित रूप से इस थ्रेड पूल का उपयोग करते हैं। pbkdf2
समारोह उनमें से एक जा रहा है।
इस थ्रेड पूल की उपस्थिति बहुत महत्वपूर्ण है।
तो नोड वास्तव में एकल थ्रेडेड नहीं है, क्योंकि अन्य धागे हैं जो नोड कुछ कम्प्यूटेशनल रूप से महंगे कार्यों को करने के लिए उपयोग करते हैं।
यदि इवेंट पूल कम्प्यूटेशनल रूप से महंगे काम करने के लिए जिम्मेदार था, तो हमारा नोड एप्लिकेशन और कुछ नहीं कर सकता है।
हमारा CPU एक-एक करके सभी निर्देशों को थ्रेड के अंदर चलाता है।
थ्रेड पूल का उपयोग करके हम एक ईवेंट लूप के अंदर अन्य चीजें कर सकते हैं जबकि गणनाएं हो रही हैं।