@@ -1556,24 +1556,27 @@ static void AddFingerprintDigest(const unsigned char* md,
15561556 }
15571557}
15581558
1559+
15591560static MaybeLocal<Object> ECPointToBuffer (Environment* env,
15601561 const EC_GROUP* group,
15611562 const EC_POINT* point,
1562- point_conversion_form_t form) {
1563+ point_conversion_form_t form,
1564+ const char ** error) {
15631565 size_t len = EC_POINT_point2oct (group, point, form, nullptr , 0 , nullptr );
15641566 if (len == 0 ) {
1565- env-> ThrowError ( " Failed to get public key length" ) ;
1567+ if (error != nullptr ) *error = " Failed to get public key length" ;
15661568 return MaybeLocal<Object>();
15671569 }
15681570 MallocedBuffer<unsigned char > buf (len);
15691571 len = EC_POINT_point2oct (group, point, form, buf.data , buf.size , nullptr );
15701572 if (len == 0 ) {
1571- env-> ThrowError ( " Failed to get public key" ) ;
1573+ if (error != nullptr ) *error = " Failed to get public key" ;
15721574 return MaybeLocal<Object>();
15731575 }
15741576 return Buffer::New (env, buf.release (), len);
15751577}
15761578
1579+
15771580static Local<Object> X509ToObject (Environment* env, X509* cert) {
15781581 EscapableHandleScope scope (env->isolate ());
15791582 Local<Context> context = env->context ();
@@ -4474,6 +4477,7 @@ void ECDH::GetPublicKey(const FunctionCallbackInfo<Value>& args) {
44744477 ECDH* ecdh;
44754478 ASSIGN_OR_RETURN_UNWRAP (&ecdh, args.Holder ());
44764479
4480+ const EC_GROUP* group = EC_KEY_get0_group (ecdh->key_ .get ());
44774481 const EC_POINT* pub = EC_KEY_get0_public_key (ecdh->key_ .get ());
44784482 if (pub == nullptr )
44794483 return env->ThrowError (" Failed to get ECDH public key" );
@@ -4482,10 +4486,11 @@ void ECDH::GetPublicKey(const FunctionCallbackInfo<Value>& args) {
44824486 uint32_t val = args[0 ].As <Uint32>()->Value ();
44834487 point_conversion_form_t form = static_cast <point_conversion_form_t >(val);
44844488
4485- MaybeLocal<Object> buf =
4486- ECPointToBuffer (env, EC_KEY_get0_group (ecdh->key_ .get ()), pub, form);
4487- if (buf.IsEmpty ()) return ;
4488- args.GetReturnValue ().Set (buf.ToLocalChecked ());
4489+ const char * error;
4490+ Local<Object> buf;
4491+ if (!ECPointToBuffer (env, group, pub, form, &error).ToLocal (&buf))
4492+ return env->ThrowError (error);
4493+ args.GetReturnValue ().Set (buf);
44894494}
44904495
44914496
@@ -5088,9 +5093,11 @@ void ConvertKey(const FunctionCallbackInfo<Value>& args) {
50885093 uint32_t val = args[2 ].As <Uint32>()->Value ();
50895094 point_conversion_form_t form = static_cast <point_conversion_form_t >(val);
50905095
5091- MaybeLocal<Object> buf = ECPointToBuffer (env, group.get (), pub.get (), form);
5092- if (buf.IsEmpty ()) return ;
5093- args.GetReturnValue ().Set (buf.ToLocalChecked ());
5096+ const char * error;
5097+ Local<Object> buf;
5098+ if (!ECPointToBuffer (env, group.get (), pub.get (), form, &error).ToLocal (&buf))
5099+ return env->ThrowError (error);
5100+ args.GetReturnValue ().Set (buf);
50945101}
50955102
50965103
0 commit comments