@@ -20,6 +20,7 @@ namespace node {
2020
2121using ncrypto::BignumPointer;
2222using ncrypto::DataPointer;
23+ using ncrypto::Ec;
2324using ncrypto::ECGroupPointer;
2425using ncrypto::ECKeyPointer;
2526using ncrypto::ECPointPointer;
@@ -47,13 +48,6 @@ using v8::Value;
4748
4849namespace crypto {
4950
50- int GetCurveFromName (const char * name) {
51- int nid = EC_curve_nist2nid (name);
52- if (nid == NID_undef)
53- nid = OBJ_sn2nid (name);
54- return nid;
55- }
56-
5751void ECDH::Initialize (Environment* env, Local<Object> target) {
5852 Isolate* isolate = env->isolate ();
5953 Local<Context> context = env->context ();
@@ -100,13 +94,10 @@ void ECDH::RegisterExternalReferences(ExternalReferenceRegistry* registry) {
10094
10195void ECDH::GetCurves (const FunctionCallbackInfo<Value>& args) {
10296 Environment* env = Environment::GetCurrent (args);
103- const size_t num_curves = EC_get_builtin_curves (nullptr , 0 );
104- std::vector<EC_builtin_curve> curves (num_curves);
105- CHECK_EQ (EC_get_builtin_curves (curves.data (), num_curves), num_curves);
106-
107- LocalVector<Value> arr (env->isolate (), num_curves);
108- std::transform (curves.begin (), curves.end (), arr.begin (), [env](auto & curve) {
109- return OneByteString (env->isolate (), OBJ_nid2sn (curve.nid ));
97+ LocalVector<Value> arr (env->isolate ());
98+ Ec::GetCurves ([&](std::string_view curve) -> bool {
99+ arr.push_back (OneByteString (env->isolate (), curve));
100+ return true ;
110101 });
111102 args.GetReturnValue ().Set (Array::New (env->isolate (), arr.data (), arr.size ()));
112103}
@@ -548,7 +539,7 @@ Maybe<void> EcKeyGenTraits::AdditionalConfig(
548539 CHECK (args[*offset + 1 ]->IsInt32 ()); // param encoding
549540
550541 Utf8Value curve_name (env->isolate (), args[*offset]);
551- params->params .curve_nid = GetCurveFromName (* curve_name);
542+ params->params .curve_nid = Ec::GetCurveIdFromName ( curve_name. ToStringView () );
552543 if (params->params .curve_nid == NID_undef) {
553544 THROW_ERR_CRYPTO_INVALID_CURVE (env);
554545 return Nothing<void >();
@@ -839,7 +830,7 @@ KeyObjectData ImportJWKEcKey(Environment* env,
839830 CHECK (args[offset]->IsString ()); // curve name
840831 Utf8Value curve (env->isolate (), args[offset].As <String>());
841832
842- int nid = GetCurveFromName (* curve);
833+ int nid = Ec::GetCurveIdFromName ( curve. ToStringView () );
843834 if (nid == NID_undef) { // Unknown curve
844835 THROW_ERR_CRYPTO_INVALID_CURVE (env);
845836 return {};
0 commit comments