Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThakurKarthik <iamkarthik08@gmail.com>2020-09-28 22:28:58 +0300
committerAnna Henningsen <anna@addaleax.net>2020-10-03 17:55:15 +0300
commita8556dae163312633290098c5a585bf995c0c0d5 (patch)
tree821dd4e33e4bbe8f8c2cba23cb28e3cee6e0d2d3 /src
parent602fb3bedc50ede2054838c22371debc38a3f515 (diff)
crypto: set env values in KeyObject Deserialize method
Fixes: https://github.com/nodejs/node/issues/35263 PR-URL: https://github.com/nodejs/node/pull/35416 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/node_crypto.cc29
-rw-r--r--src/node_crypto.h3
2 files changed, 18 insertions, 14 deletions
diff --git a/src/node_crypto.cc b/src/node_crypto.cc
index 05da3af09c6..ed886abd749 100644
--- a/src/node_crypto.cc
+++ b/src/node_crypto.cc
@@ -3265,8 +3265,11 @@ size_t KeyObjectData::GetSymmetricKeySize() const {
return symmetric_key_len_;
}
-Local<Function> KeyObjectHandle::Initialize(Environment* env,
- Local<Object> target) {
+Local<Function> KeyObjectHandle::Initialize(Environment* env) {
+ Local<Function> templ = env->crypto_key_object_handle_constructor();
+ if (!templ.IsEmpty()) {
+ return templ;
+ }
Local<FunctionTemplate> t = env->NewFunctionTemplate(New);
t->InstanceTemplate()->SetInternalFieldCount(
KeyObjectHandle::kInternalFieldCount);
@@ -3280,20 +3283,16 @@ Local<Function> KeyObjectHandle::Initialize(Environment* env,
env->SetProtoMethod(t, "export", Export);
auto function = t->GetFunction(env->context()).ToLocalChecked();
- target->Set(env->context(),
- FIXED_ONE_BYTE_STRING(env->isolate(), "KeyObjectHandle"),
- function).Check();
-
- return function;
+ env->set_crypto_key_object_handle_constructor(function);
+ return KeyObjectHandle::Initialize(env);
}
MaybeLocal<Object> KeyObjectHandle::Create(
Environment* env,
std::shared_ptr<KeyObjectData> data) {
Local<Object> obj;
- if (!env->crypto_key_object_handle_constructor()
- ->NewInstance(env->context(), 0, nullptr)
- .ToLocal(&obj)) {
+ Local<Function> fctun = KeyObjectHandle::Initialize(env);
+ if (!fctun->NewInstance(env->context(), 0, nullptr).ToLocal(&obj)) {
return MaybeLocal<Object>();
}
@@ -3466,6 +3465,11 @@ BaseObjectPtr<BaseObject> NativeKeyObject::KeyObjectTransferData::Deserialize(
Local<Value> handle = KeyObjectHandle::Create(env, data_).ToLocalChecked();
Local<Function> key_ctor;
+ Local<Value> arg = FIXED_ONE_BYTE_STRING(env->isolate(),
+ "internal/crypto/keys");
+ if (env->native_module_require()->
+ Call(context, Null(env->isolate()), 1, &arg).IsEmpty())
+ return {};
switch (data_->GetKeyType()) {
case kKeyTypeSecret:
key_ctor = env->crypto_key_object_secret_constructor();
@@ -6950,8 +6954,9 @@ void Initialize(Local<Object> target,
Environment* env = Environment::GetCurrent(context);
SecureContext::Initialize(env, target);
- env->set_crypto_key_object_handle_constructor(
- KeyObjectHandle::Initialize(env, target));
+ target->Set(env->context(),
+ FIXED_ONE_BYTE_STRING(env->isolate(), "KeyObjectHandle"),
+ KeyObjectHandle::Initialize(env)).Check();
env->SetMethod(target, "createNativeKeyObjectClass",
CreateNativeKeyObjectClass);
CipherBase::Initialize(env, target);
diff --git a/src/node_crypto.h b/src/node_crypto.h
index 63468e4f18d..8f781035602 100644
--- a/src/node_crypto.h
+++ b/src/node_crypto.h
@@ -447,8 +447,7 @@ class KeyObjectData {
class KeyObjectHandle : public BaseObject {
public:
- static v8::Local<v8::Function> Initialize(Environment* env,
- v8::Local<v8::Object> target);
+ static v8::Local<v8::Function> Initialize(Environment* env);
static v8::MaybeLocal<v8::Object> Create(Environment* env,
std::shared_ptr<KeyObjectData> data);