Bu pbkdf2
işlevin JavaScript uygulaması vardır, ancak aslında C ++ tarafına yapılacak tüm işleri devreder.
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>);
kaynak: https://github.com/nodejs/node/blob/master/src/node_crypto.cc
Libuv modülünün, standart kütüphanedeki bazı çok özel işlevlerle ilgili başka bir sorumluluğu vardır.
Bazı standart kütüphane fonksiyon çağrıları için, Düğüm C ++ tarafı ve Libuv olay döngüsü dışında tamamen pahalı hesaplamalar yapmaya karar verir.
İş parçacığı havuzu adı verilen bir şey kullanmak yerine, iş parçacığı havuzu pbkdf2
işlevi gibi hesaplamalı olarak pahalı görevleri çalıştırmak için kullanılabilecek dört iş parçacığı bir dizi .
Varsayılan olarak Libuv, bu iş parçacığı havuzunda 4 iş parçacığı oluşturur.
Olay döngüsünde kullanılan iş parçacıklarına ek olarak, uygulamamız içinde gerçekleşmesi gereken pahalı hesaplamaları boşaltmak için kullanılabilecek dört iş parçacığı daha vardır.
Düğüm standart kitaplığında bulunan işlevlerin çoğu otomatik olarak bu iş parçacığı havuzunu kullanır. pbkdf2
Fonksiyon bunlardan biri.
Bu iş parçacığı havuzunun varlığı çok önemlidir.
Düğüm gerçekten tek iş parçacıklı değildir, çünkü Düğüm'ün hesaplamalı olarak pahalı bazı görevleri yapmak için kullandığı başka iş parçacıkları da vardır.
Olay havuzu, hesaplamalı olarak pahalı görevi yapmaktan sorumlu olsaydı, Düğüm uygulamamız başka hiçbir şey yapamazdı.
CPU'muz bir evre içindeki tüm talimatları tek tek çalıştırır.
İş parçacığı havuzunu kullanarak, bir olay döngüsü içinde hesaplamalar yapılırken başka şeyler yapabiliriz.