@@ -4115,9 +4115,11 @@ void DiffieHellman::GenerateKeys(const FunctionCallbackInfo<Value>& args) {
41154115
41164116  const  BIGNUM* pub_key;
41174117  DH_get0_key (diffieHellman->dh_ .get (), &pub_key, nullptr );
4118-   size_t  size = BN_num_bytes (pub_key);
4118+   const  int  size = BN_num_bytes (pub_key);
4119+   CHECK_GE (size, 0 );
41194120  char * data = Malloc (size);
4120-   BN_bn2bin (pub_key, reinterpret_cast <unsigned  char *>(data));
4121+   CHECK_EQ (size,
4122+            BN_bn2binpad (pub_key, reinterpret_cast <unsigned  char *>(data), size));
41214123  args.GetReturnValue ().Set (Buffer::New (env, data, size).ToLocalChecked ());
41224124}
41234125
@@ -4133,9 +4135,11 @@ void DiffieHellman::GetField(const FunctionCallbackInfo<Value>& args,
41334135  const  BIGNUM* num = get_field (dh->dh_ .get ());
41344136  if  (num == nullptr ) return  env->ThrowError (err_if_null);
41354137
4136-   size_t  size = BN_num_bytes (num);
4138+   const  int  size = BN_num_bytes (num);
4139+   CHECK_GE (size, 0 );
41374140  char * data = Malloc (size);
4138-   BN_bn2bin (num, reinterpret_cast <unsigned  char *>(data));
4141+   CHECK_EQ (size,
4142+            BN_bn2binpad (num, reinterpret_cast <unsigned  char *>(data), size));
41394143  args.GetReturnValue ().Set (Buffer::New (env, data, size).ToLocalChecked ());
41404144}
41414145
@@ -4470,13 +4474,9 @@ void ECDH::GetPrivateKey(const FunctionCallbackInfo<Value>& args) {
44704474  if  (b == nullptr )
44714475    return  env->ThrowError (" Failed to get ECDH private key"  );
44724476
4473-   int  size = BN_num_bytes (b);
4477+   const   int  size = BN_num_bytes (b);
44744478  unsigned  char * out = node::Malloc<unsigned  char >(size);
4475- 
4476-   if  (size != BN_bn2bin (b, out)) {
4477-     free (out);
4478-     return  env->ThrowError (" Failed to convert ECDH private key to Buffer"  );
4479-   }
4479+   CHECK_EQ (size, BN_bn2binpad (b, out, size));
44804480
44814481  Local<Object> buf =
44824482      Buffer::New (env, reinterpret_cast <char *>(out), size).ToLocalChecked ();
0 commit comments