@@ -3265,8 +3265,11 @@ size_t KeyObjectData::GetSymmetricKeySize() const {
32653265 return symmetric_key_len_;
32663266}
32673267
3268- Local<Function> KeyObjectHandle::Initialize (Environment* env,
3269- Local<Object> target) {
3268+ Local<Function> KeyObjectHandle::Initialize (Environment* env) {
3269+ Local<Function> templ = env->crypto_key_object_handle_constructor ();
3270+ if (!templ.IsEmpty ()) {
3271+ return templ;
3272+ }
32703273 Local<FunctionTemplate> t = env->NewFunctionTemplate (New);
32713274 t->InstanceTemplate ()->SetInternalFieldCount (
32723275 KeyObjectHandle::kInternalFieldCount );
@@ -3280,20 +3283,16 @@ Local<Function> KeyObjectHandle::Initialize(Environment* env,
32803283 env->SetProtoMethod (t, " export" , Export);
32813284
32823285 auto function = t->GetFunction (env->context ()).ToLocalChecked ();
3283- target->Set (env->context (),
3284- FIXED_ONE_BYTE_STRING (env->isolate (), " KeyObjectHandle" ),
3285- function).Check ();
3286-
3287- return function;
3286+ env->set_crypto_key_object_handle_constructor (function);
3287+ return KeyObjectHandle::Initialize (env);
32883288}
32893289
32903290MaybeLocal<Object> KeyObjectHandle::Create (
32913291 Environment* env,
32923292 std::shared_ptr<KeyObjectData> data) {
32933293 Local<Object> obj;
3294- if (!env->crypto_key_object_handle_constructor ()
3295- ->NewInstance (env->context (), 0 , nullptr )
3296- .ToLocal (&obj)) {
3294+ Local<Function> fctun = KeyObjectHandle::Initialize (env);
3295+ if (!fctun->NewInstance (env->context (), 0 , nullptr ).ToLocal (&obj)) {
32973296 return MaybeLocal<Object>();
32983297 }
32993298
@@ -3466,6 +3465,11 @@ BaseObjectPtr<BaseObject> NativeKeyObject::KeyObjectTransferData::Deserialize(
34663465
34673466 Local<Value> handle = KeyObjectHandle::Create (env, data_).ToLocalChecked ();
34683467 Local<Function> key_ctor;
3468+ Local<Value> arg = FIXED_ONE_BYTE_STRING (env->isolate (),
3469+ " internal/crypto/keys" );
3470+ if (env->native_module_require ()->
3471+ Call (context, Null (env->isolate ()), 1 , &arg).IsEmpty ())
3472+ return {};
34693473 switch (data_->GetKeyType ()) {
34703474 case kKeyTypeSecret :
34713475 key_ctor = env->crypto_key_object_secret_constructor ();
@@ -6950,8 +6954,9 @@ void Initialize(Local<Object> target,
69506954
69516955 Environment* env = Environment::GetCurrent (context);
69526956 SecureContext::Initialize (env, target);
6953- env->set_crypto_key_object_handle_constructor (
6954- KeyObjectHandle::Initialize (env, target));
6957+ target->Set (env->context (),
6958+ FIXED_ONE_BYTE_STRING (env->isolate (), " KeyObjectHandle" ),
6959+ KeyObjectHandle::Initialize (env)).Check ();
69556960 env->SetMethod (target, " createNativeKeyObjectClass" ,
69566961 CreateNativeKeyObjectClass);
69576962 CipherBase::Initialize (env, target);
0 commit comments