@@ -51,9 +51,10 @@ Napi::Number bind_wc_ecc_init(const Napi::CallbackInfo& info)
5151 Napi::Env env = info.Env ();
5252 ecc_key* ecc = (ecc_key*)( info[0 ].As <Napi::Uint8Array>().Data () );
5353
54- ecc->rng = NULL ;
5554 ret = wc_ecc_init ( ecc );
5655
56+ ecc->rng = wc_rng_new ( NULL , 0 , NULL );
57+
5758 return Napi::Number::New ( env, ret );
5859}
5960
@@ -64,8 +65,6 @@ Napi::Number bind_wc_ecc_make_key(const Napi::CallbackInfo& info)
6465 int key_size = info[0 ].As <Napi::Number>().Int32Value ();
6566 ecc_key* ecc = (ecc_key*)( info[1 ].As <Napi::Uint8Array>().Data () );
6667
67- ecc->rng = wc_rng_new ( NULL , 0 , NULL );
68-
6968 ret = wc_ecc_make_key ( ecc->rng , key_size, ecc );
7069
7170 return Napi::Number::New ( env, ret );
@@ -113,6 +112,84 @@ Napi::Number bind_wc_ecc_import_x963(const Napi::CallbackInfo& info)
113112 return Napi::Number::New ( env, ret );
114113}
115114
115+ Napi::Number bind_wc_EccKeyDerSize (const Napi::CallbackInfo& info)
116+ {
117+ Napi::Env env = info.Env ();
118+ int ret;
119+ ecc_key* ecc = (ecc_key*)( info[0 ].As <Napi::Uint8Array>().Data () );
120+ int pub = info[1 ].As <Napi::Number>().Int32Value ();
121+
122+ ret = wc_EccKeyDerSize ( ecc, pub );
123+
124+ return Napi::Number::New ( env, ret );
125+ }
126+
127+ Napi::Number bind_wc_EccPublicKeyDerSize (const Napi::CallbackInfo& info)
128+ {
129+ Napi::Env env = info.Env ();
130+ int ret;
131+ ecc_key* ecc = (ecc_key*)( info[0 ].As <Napi::Uint8Array>().Data () );
132+
133+ ret = wc_EccPublicKeyDerSize ( ecc, 1 );
134+
135+ return Napi::Number::New ( env, ret );
136+ }
137+
138+ Napi::Number bind_wc_EccPublicKeyToDer (const Napi::CallbackInfo& info)
139+ {
140+ Napi::Env env = info.Env ();
141+ int ret;
142+ ecc_key* ecc = (ecc_key*)( info[0 ].As <Napi::Uint8Array>().Data () );
143+ uint8_t * out = (uint8_t *)( info[1 ].As <Napi::Uint8Array>().Data () );
144+ unsigned int out_len = info[2 ].As <Napi::Number>().Int32Value ();
145+
146+ ret = wc_EccPublicKeyToDer ( ecc, out, out_len, 1 );
147+ // ret = wc_EccPublicKeyToDer( ecc, out, out_len, 0 );
148+
149+ return Napi::Number::New ( env, ret );
150+ }
151+
152+ Napi::Number bind_wc_EccPublicKeyDecode (const Napi::CallbackInfo& info)
153+ {
154+ Napi::Env env = info.Env ();
155+ int ret;
156+ uint8_t * in = (uint8_t *)( info[0 ].As <Napi::Uint8Array>().Data () );
157+ ecc_key* ecc = (ecc_key*)( info[1 ].As <Napi::Uint8Array>().Data () );
158+ unsigned int in_len = info[2 ].As <Napi::Number>().Int32Value ();
159+ unsigned int idx = 0 ;
160+
161+ ret = wc_EccPublicKeyDecode ( in, &idx, ecc, in_len );
162+
163+ return Napi::Number::New ( env, ret );
164+ }
165+
166+ Napi::Number bind_wc_EccPrivateKeyToDer (const Napi::CallbackInfo& info)
167+ {
168+ Napi::Env env = info.Env ();
169+ int ret;
170+ ecc_key* ecc = (ecc_key*)( info[0 ].As <Napi::Uint8Array>().Data () );
171+ uint8_t * out = (uint8_t *)( info[1 ].As <Napi::Uint8Array>().Data () );
172+ unsigned int out_len = info[2 ].As <Napi::Number>().Int32Value ();
173+
174+ ret = wc_EccPrivateKeyToDer ( ecc, out, out_len );
175+
176+ return Napi::Number::New ( env, ret );
177+ }
178+
179+ Napi::Number bind_wc_EccPrivateKeyDecode (const Napi::CallbackInfo& info)
180+ {
181+ Napi::Env env = info.Env ();
182+ int ret;
183+ uint8_t * in = (uint8_t *)( info[0 ].As <Napi::Uint8Array>().Data () );
184+ ecc_key* ecc = (ecc_key*)( info[1 ].As <Napi::Uint8Array>().Data () );
185+ unsigned int in_len = info[2 ].As <Napi::Number>().Int32Value ();
186+ unsigned int idx = 0 ;
187+
188+ ret = wc_EccPrivateKeyDecode ( in, &idx, ecc, in_len );
189+
190+ return Napi::Number::New ( env, ret );
191+ }
192+
116193Napi::Number bind_wc_ecc_set_curve (const Napi::CallbackInfo& info)
117194{
118195 Napi::Env env = info.Env ();
@@ -160,18 +237,13 @@ Napi::Number bind_wc_ecc_sign_hash(const Napi::CallbackInfo& info)
160237{
161238 Napi::Env env = info.Env ();
162239 int ret;
163- WC_RNG rng;
164240 uint8_t * in = (uint8_t *)( info[0 ].As <Napi::Uint8Array>().Data () );
165241 int in_len = info[1 ].As <Napi::Number>().Int32Value ();
166242 uint8_t * out = (uint8_t *)( info[2 ].As <Napi::Uint8Array>().Data () );
167243 unsigned int out_len = info[3 ].As <Napi::Number>().Int32Value ();
168244 ecc_key* ecc = (ecc_key*)( info[4 ].As <Napi::Uint8Array>().Data () );
169245
170- ret = wc_InitRng ( &rng );
171- if (ret == 0 )
172- {
173- ret = wc_ecc_sign_hash ( in, in_len, out, &out_len, &rng, ecc );
174- }
246+ ret = wc_ecc_sign_hash ( in, in_len, out, &out_len, ecc->rng , ecc );
175247
176248 if ( ret < 0 )
177249 {
0 commit comments