@encharm/cws 4.4.1 → 4.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (606) hide show
  1. package/binding.gyp +1 -1
  2. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  3. package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
  4. package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
  5. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  6. package/dist/bindings/cws_linux_arm64_node127.node +0 -0
  7. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  8. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  9. package/dist/bindings/cws_linux_x64_node137.node +0 -0
  10. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  11. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  12. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  13. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  14. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  15. package/package.json +1 -1
  16. package/src/Addon.h +13 -23
  17. package/src/Socket.h +0 -1
  18. package/src/headers/22/acorn_version.h +6 -0
  19. package/src/headers/22/aliased_buffer-inl.h +243 -0
  20. package/src/headers/22/aliased_buffer.h +206 -0
  21. package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
  22. package/src/headers/{18 → 22}/async_wrap.h +65 -59
  23. package/src/headers/{18 → 22}/base_object-inl.h +57 -117
  24. package/src/headers/{18 → 22}/base_object.h +58 -30
  25. package/src/headers/22/base_object_types.h +74 -0
  26. package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
  27. package/src/headers/22/blob_serializer_deserializer.h +132 -0
  28. package/src/headers/{16 → 22}/callback_queue.h +1 -0
  29. package/src/headers/{16 → 22}/cares_wrap.h +27 -20
  30. package/src/headers/22/cjs_module_lexer_version.h +6 -0
  31. package/src/headers/22/cleanup_queue-inl.h +62 -0
  32. package/src/headers/22/cleanup_queue.h +85 -0
  33. package/src/headers/22/compile_cache.h +104 -0
  34. package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
  35. package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
  36. package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
  37. package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
  38. package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
  39. package/src/headers/22/crypto/ncrypto.h +752 -0
  40. package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
  41. package/src/headers/{18 → 22}/debug_utils.h +25 -19
  42. package/src/headers/22/encoding_binding.h +59 -0
  43. package/src/headers/{14 → 22}/env-inl.h +276 -409
  44. package/src/headers/22/env.h +1266 -0
  45. package/src/headers/22/env_properties.h +497 -0
  46. package/src/headers/{18 → 22}/handle_wrap.h +2 -0
  47. package/src/headers/{18 → 22}/histogram.h +88 -48
  48. package/src/headers/{16 → 22}/inspector_agent.h +17 -1
  49. package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
  50. package/src/headers/22/js_native_api.h +619 -0
  51. package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
  52. package/src/headers/22/js_native_api_v8.h +485 -0
  53. package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
  54. package/src/headers/22/json_parser.h +40 -0
  55. package/src/headers/{16 → 22}/json_utils.h +19 -8
  56. package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
  57. package/src/headers/{14 → 22}/memory_tracker.h +13 -8
  58. package/src/headers/{16 → 22}/module_wrap.h +49 -19
  59. package/src/headers/22/ncrypto/ncrypto.h +752 -0
  60. package/src/headers/{18 → 22}/node.h +465 -68
  61. package/src/headers/{18 → 22}/node_api.h +66 -81
  62. package/src/headers/{18 → 22}/node_api_internals.h +8 -4
  63. package/src/headers/{18 → 22}/node_api_types.h +5 -0
  64. package/src/headers/22/node_binding.h +154 -0
  65. package/src/headers/{18 → 22}/node_blob.h +46 -78
  66. package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
  67. package/src/headers/{18 → 22}/node_bob.h +2 -6
  68. package/src/headers/{18 → 22}/node_buffer.h +1 -1
  69. package/src/headers/22/node_builtins.h +220 -0
  70. package/src/headers/{18 → 22}/node_constants.h +3 -5
  71. package/src/headers/22/node_context_data.h +168 -0
  72. package/src/headers/22/node_contextify.h +199 -0
  73. package/src/headers/{16 → 22}/node_crypto.h +1 -2
  74. package/src/headers/22/node_dotenv.h +45 -0
  75. package/src/headers/{18 → 22}/node_errors.h +86 -27
  76. package/src/headers/22/node_exit_code.h +54 -0
  77. package/src/headers/22/node_external_reference.h +249 -0
  78. package/src/headers/{18 → 22}/node_file-inl.h +127 -30
  79. package/src/headers/{16 → 22}/node_file.h +122 -11
  80. package/src/headers/{18 → 22}/node_http2.h +28 -11
  81. package/src/headers/{16 → 22}/node_http2_state.h +34 -25
  82. package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
  83. package/src/headers/{18 → 22}/node_http_common.h +56 -55
  84. package/src/headers/{16 → 22}/node_i18n.h +5 -18
  85. package/src/headers/{18 → 22}/node_internals.h +121 -59
  86. package/src/headers/{18 → 22}/node_main_instance.h +4 -31
  87. package/src/headers/{18 → 22}/node_messaging.h +27 -10
  88. package/src/headers/{18 → 22}/node_metadata.h +23 -1
  89. package/src/headers/{18 → 22}/node_options-inl.h +24 -11
  90. package/src/headers/{18 → 22}/node_options.h +124 -39
  91. package/src/headers/{18 → 22}/node_perf.h +0 -2
  92. package/src/headers/{18 → 22}/node_perf_common.h +20 -9
  93. package/src/headers/{18 → 22}/node_platform.h +11 -5
  94. package/src/headers/{18 → 22}/node_process.h +26 -14
  95. package/src/headers/22/node_realm-inl.h +145 -0
  96. package/src/headers/22/node_realm.h +184 -0
  97. package/src/headers/{16 → 22}/node_report.h +13 -17
  98. package/src/headers/{16 → 22}/node_revert.h +3 -3
  99. package/src/headers/{16 → 22}/node_root_certs.h +902 -461
  100. package/src/headers/22/node_sea.h +64 -0
  101. package/src/headers/22/node_shadow_realm.h +46 -0
  102. package/src/headers/22/node_snapshot_builder.h +57 -0
  103. package/src/headers/22/node_snapshotable.h +174 -0
  104. package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
  105. package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
  106. package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
  107. package/src/headers/22/node_threadsafe_cow.h +105 -0
  108. package/src/headers/22/node_union_bytes.h +81 -0
  109. package/src/headers/22/node_url.h +96 -0
  110. package/src/headers/22/node_v8.h +77 -0
  111. package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
  112. package/src/headers/{16 → 22}/node_version.h +21 -9
  113. package/src/headers/22/node_wasi.h +185 -0
  114. package/src/headers/{14 → 22}/node_watchdog.h +2 -0
  115. package/src/headers/{18 → 22}/node_worker.h +7 -2
  116. package/src/headers/22/permission/child_process_permission.h +31 -0
  117. package/src/headers/22/permission/fs_permission.h +167 -0
  118. package/src/headers/22/permission/inspector_permission.h +31 -0
  119. package/src/headers/22/permission/permission.h +99 -0
  120. package/src/headers/22/permission/permission_base.h +60 -0
  121. package/src/headers/22/permission/wasi_permission.h +31 -0
  122. package/src/headers/22/permission/worker_permission.h +31 -0
  123. package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
  124. package/src/headers/{14 → 22}/spawn_sync.h +3 -3
  125. package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
  126. package/src/headers/{18 → 22}/stream_base.h +35 -16
  127. package/src/headers/{18 → 22}/stream_pipe.h +3 -4
  128. package/src/headers/{16 → 22}/stream_wrap.h +2 -1
  129. package/src/headers/{18 → 22}/string_bytes.h +5 -14
  130. package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
  131. package/src/headers/{16 → 22}/string_decoder.h +0 -1
  132. package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
  133. package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
  134. package/src/headers/22/timers.h +76 -0
  135. package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
  136. package/src/headers/{16 → 22}/udp_wrap.h +8 -5
  137. package/src/headers/22/undici_version.h +6 -0
  138. package/src/headers/{18 → 22}/util-inl.h +97 -127
  139. package/src/headers/{18 → 22}/util.h +293 -106
  140. package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
  141. package/src/headers/24/acorn_version.h +6 -0
  142. package/src/headers/24/addon_permission.h +31 -0
  143. package/src/headers/{16/tracing → 24}/agent.h +1 -1
  144. package/src/headers/24/aliased_buffer-inl.h +244 -0
  145. package/src/headers/24/aliased_buffer.h +206 -0
  146. package/src/headers/24/amaro_version.h +6 -0
  147. package/src/headers/24/application.h +165 -0
  148. package/src/headers/24/async_context_frame.h +33 -0
  149. package/src/headers/{14 → 24}/async_wrap-inl.h +8 -6
  150. package/src/headers/{16 → 24}/async_wrap.h +86 -88
  151. package/src/headers/{16 → 24}/base_object-inl.h +75 -119
  152. package/src/headers/{16 → 24}/base_object.h +84 -40
  153. package/src/headers/24/base_object_types.h +74 -0
  154. package/src/headers/24/bindingdata.h +272 -0
  155. package/src/headers/24/blob_serializer_deserializer-inl.h +385 -0
  156. package/src/headers/24/blob_serializer_deserializer.h +132 -0
  157. package/src/headers/{18 → 24}/callback_queue.h +1 -0
  158. package/src/headers/{18 → 24}/cares_wrap.h +68 -144
  159. package/src/headers/24/child_process_permission.h +31 -0
  160. package/src/headers/24/cid.h +127 -0
  161. package/src/headers/24/cjs_module_lexer_version.h +6 -0
  162. package/src/headers/24/cleanup_queue-inl.h +36 -0
  163. package/src/headers/24/cleanup_queue.h +79 -0
  164. package/src/headers/24/compile_cache.h +113 -0
  165. package/src/headers/24/cppgc_helpers-inl.h +65 -0
  166. package/src/headers/24/cppgc_helpers.h +162 -0
  167. package/src/headers/24/crypto/crypto_aes.h +97 -0
  168. package/src/headers/24/crypto/crypto_argon2.h +86 -0
  169. package/src/headers/{16 → 24}/crypto/crypto_bio.h +8 -9
  170. package/src/headers/24/crypto/crypto_chacha20_poly1305.h +64 -0
  171. package/src/headers/{18 → 24}/crypto/crypto_cipher.h +48 -58
  172. package/src/headers/{16 → 24}/crypto/crypto_clienthello-inl.h +2 -2
  173. package/src/headers/{16 → 24}/crypto/crypto_clienthello.h +1 -1
  174. package/src/headers/24/crypto/crypto_common.h +48 -0
  175. package/src/headers/{16 → 24}/crypto/crypto_context.h +46 -22
  176. package/src/headers/{18 → 24}/crypto/crypto_dh.h +27 -57
  177. package/src/headers/{18 → 24}/crypto/crypto_dsa.h +7 -34
  178. package/src/headers/{18 → 24}/crypto/crypto_ec.h +42 -49
  179. package/src/headers/{18 → 24}/crypto/crypto_hash.h +11 -11
  180. package/src/headers/{18 → 24}/crypto/crypto_hkdf.h +10 -14
  181. package/src/headers/{18 → 24}/crypto/crypto_hmac.h +11 -13
  182. package/src/headers/24/crypto/crypto_kem.h +113 -0
  183. package/src/headers/{18 → 24}/crypto/crypto_keygen.h +59 -74
  184. package/src/headers/{16 → 24}/crypto/crypto_keys.h +134 -154
  185. package/src/headers/24/crypto/crypto_ml_dsa.h +21 -0
  186. package/src/headers/{18 → 24}/crypto/crypto_pbkdf2.h +9 -11
  187. package/src/headers/{18 → 24}/crypto/crypto_random.h +28 -34
  188. package/src/headers/{18 → 24}/crypto/crypto_rsa.h +30 -35
  189. package/src/headers/{18 → 24}/crypto/crypto_scrypt.h +8 -10
  190. package/src/headers/{18 → 24}/crypto/crypto_sig.h +36 -48
  191. package/src/headers/{16 → 24}/crypto/crypto_tls.h +35 -18
  192. package/src/headers/{16 → 24}/crypto/crypto_util.h +183 -321
  193. package/src/headers/24/crypto/crypto_x509.h +140 -0
  194. package/src/headers/24/data.h +148 -0
  195. package/src/headers/{14 → 24}/debug_utils-inl.h +17 -8
  196. package/src/headers/{16 → 24}/debug_utils.h +31 -22
  197. package/src/headers/24/defs.h +254 -0
  198. package/src/headers/24/embedded_data.h +17 -0
  199. package/src/headers/24/encoding_binding.h +60 -0
  200. package/src/headers/24/endpoint.h +421 -0
  201. package/src/headers/{16 → 24}/env-inl.h +198 -540
  202. package/src/headers/24/env.h +1257 -0
  203. package/src/headers/24/env_properties.h +561 -0
  204. package/src/headers/24/fs_permission.h +167 -0
  205. package/src/headers/{16 → 24}/handle_wrap.h +4 -2
  206. package/src/headers/{16 → 24}/histogram-inl.h +34 -15
  207. package/src/headers/24/histogram.h +279 -0
  208. package/src/headers/24/http3.h +44 -0
  209. package/src/headers/{18 → 24}/inspector_agent.h +23 -2
  210. package/src/headers/24/inspector_permission.h +31 -0
  211. package/src/headers/{18 → 24}/inspector_profiler.h +15 -15
  212. package/src/headers/24/io_agent.h +30 -0
  213. package/src/headers/{18 → 24}/js_native_api.h +74 -30
  214. package/src/headers/{16 → 24}/js_native_api_types.h +61 -10
  215. package/src/headers/{18 → 24}/js_native_api_v8.h +205 -160
  216. package/src/headers/{16 → 24}/js_native_api_v8_internals.h +12 -6
  217. package/src/headers/24/json_parser.h +40 -0
  218. package/src/headers/{18 → 24}/json_utils.h +19 -8
  219. package/src/headers/24/logstream.h +81 -0
  220. package/src/headers/24/main_thread_interface.h +116 -0
  221. package/src/headers/{16 → 24}/memory_tracker-inl.h +115 -17
  222. package/src/headers/{16 → 24}/memory_tracker.h +58 -9
  223. package/src/headers/24/module_wrap.h +229 -0
  224. package/src/headers/24/ncrypto.h +1625 -0
  225. package/src/headers/24/network_agent.h +118 -0
  226. package/src/headers/24/network_inspector.h +45 -0
  227. package/src/headers/24/network_resource_manager.h +29 -0
  228. package/src/headers/{16 → 24}/node.h +560 -72
  229. package/src/headers/24/node_api.h +269 -0
  230. package/src/headers/24/node_api_internals.h +46 -0
  231. package/src/headers/{16 → 24}/node_api_types.h +13 -11
  232. package/src/headers/24/node_binding.h +163 -0
  233. package/src/headers/{16 → 24}/node_blob.h +46 -78
  234. package/src/headers/{16 → 24}/node_bob-inl.h +1 -2
  235. package/src/headers/{16 → 24}/node_bob.h +2 -6
  236. package/src/headers/{14 → 24}/node_buffer.h +1 -1
  237. package/src/headers/24/node_builtins.h +223 -0
  238. package/src/headers/24/node_config_file.h +65 -0
  239. package/src/headers/{14 → 24}/node_constants.h +3 -5
  240. package/src/headers/24/node_context_data.h +168 -0
  241. package/src/headers/24/node_contextify.h +261 -0
  242. package/src/headers/{18 → 24}/node_crypto.h +7 -2
  243. package/src/headers/24/node_debug.h +25 -0
  244. package/src/headers/24/node_dotenv.h +45 -0
  245. package/src/headers/{16 → 24}/node_errors.h +146 -32
  246. package/src/headers/24/node_exit_code.h +54 -0
  247. package/src/headers/{18 → 24}/node_external_reference.h +44 -22
  248. package/src/headers/{16 → 24}/node_file-inl.h +156 -50
  249. package/src/headers/{18 → 24}/node_file.h +129 -15
  250. package/src/headers/{16 → 24}/node_http2.h +53 -18
  251. package/src/headers/{14 → 24}/node_http2_state.h +35 -25
  252. package/src/headers/{16 → 24}/node_http_common-inl.h +8 -10
  253. package/src/headers/{16 → 24}/node_http_common.h +63 -59
  254. package/src/headers/{18 → 24}/node_i18n.h +5 -18
  255. package/src/headers/{16 → 24}/node_internals.h +131 -76
  256. package/src/headers/24/node_json.h +24 -0
  257. package/src/headers/24/node_large_page.h +34 -0
  258. package/src/headers/24/node_locks.h +180 -0
  259. package/src/headers/{14 → 24}/node_main_instance.h +15 -44
  260. package/src/headers/{16 → 24}/node_mem-inl.h +7 -7
  261. package/src/headers/{16 → 24}/node_messaging.h +27 -11
  262. package/src/headers/{16 → 24}/node_metadata.h +44 -2
  263. package/src/headers/24/node_modules.h +93 -0
  264. package/src/headers/{16 → 24}/node_options-inl.h +93 -46
  265. package/src/headers/{16 → 24}/node_options.h +251 -63
  266. package/src/headers/{16 → 24}/node_perf.h +6 -25
  267. package/src/headers/{16 → 24}/node_perf_common.h +23 -10
  268. package/src/headers/24/node_platform.h +286 -0
  269. package/src/headers/24/node_process.h +111 -0
  270. package/src/headers/24/node_realm-inl.h +153 -0
  271. package/src/headers/24/node_realm.h +236 -0
  272. package/src/headers/{18 → 24}/node_report.h +13 -17
  273. package/src/headers/{18 → 24}/node_revert.h +3 -3
  274. package/src/headers/{18 → 24}/node_root_certs.h +1010 -710
  275. package/src/headers/24/node_sea.h +74 -0
  276. package/src/headers/24/node_shadow_realm.h +46 -0
  277. package/src/headers/24/node_snapshot_builder.h +57 -0
  278. package/src/headers/24/node_snapshotable.h +174 -0
  279. package/src/headers/{16 → 24}/node_sockaddr-inl.h +11 -20
  280. package/src/headers/{16 → 24}/node_sockaddr.h +9 -20
  281. package/src/headers/24/node_sqlite.h +270 -0
  282. package/src/headers/{18 → 24}/node_stat_watcher.h +2 -1
  283. package/src/headers/24/node_string.h +101 -0
  284. package/src/headers/24/node_task_runner.h +92 -0
  285. package/src/headers/24/node_threadsafe_cow-inl.h +54 -0
  286. package/src/headers/24/node_threadsafe_cow.h +105 -0
  287. package/src/headers/24/node_union_bytes.h +81 -0
  288. package/src/headers/24/node_url.h +101 -0
  289. package/src/headers/24/node_url_pattern.h +118 -0
  290. package/src/headers/24/node_v8.h +77 -0
  291. package/src/headers/{18 → 24}/node_v8_platform-inl.h +22 -31
  292. package/src/headers/{18 → 24}/node_version.h +18 -6
  293. package/src/headers/24/node_wasi.h +185 -0
  294. package/src/headers/24/node_wasm_web_api.h +55 -0
  295. package/src/headers/{18 → 24}/node_watchdog.h +2 -0
  296. package/src/headers/24/node_webstorage.h +60 -0
  297. package/src/headers/{16 → 24}/node_worker.h +24 -10
  298. package/src/headers/24/packet.h +155 -0
  299. package/src/headers/24/path.h +33 -0
  300. package/src/headers/24/permission/addon_permission.h +31 -0
  301. package/src/headers/24/permission/child_process_permission.h +31 -0
  302. package/src/headers/24/permission/fs_permission.h +167 -0
  303. package/src/headers/24/permission/inspector_permission.h +31 -0
  304. package/src/headers/24/permission/permission.h +100 -0
  305. package/src/headers/24/permission/permission_base.h +65 -0
  306. package/src/headers/24/permission/wasi_permission.h +31 -0
  307. package/src/headers/24/permission/worker_permission.h +31 -0
  308. package/src/headers/24/permission.h +100 -0
  309. package/src/headers/24/permission_base.h +65 -0
  310. package/src/headers/24/preferredaddress.h +72 -0
  311. package/src/headers/24/protocol_helper.h +27 -0
  312. package/src/headers/24/queue.h +306 -0
  313. package/src/headers/{18 → 24}/req_wrap-inl.h +12 -6
  314. package/src/headers/{16 → 24}/req_wrap.h +3 -1
  315. package/src/headers/24/runtime_agent.h +41 -0
  316. package/src/headers/24/session.h +528 -0
  317. package/src/headers/24/sessionticket.h +108 -0
  318. package/src/headers/{18 → 24}/spawn_sync.h +9 -8
  319. package/src/headers/{16 → 24}/stream_base-inl.h +3 -133
  320. package/src/headers/{16 → 24}/stream_base.h +43 -19
  321. package/src/headers/{16 → 24}/stream_pipe.h +7 -4
  322. package/src/headers/{18 → 24}/stream_wrap.h +2 -3
  323. package/src/headers/24/streams.h +370 -0
  324. package/src/headers/{16 → 24}/string_bytes.h +8 -21
  325. package/src/headers/{18 → 24}/string_decoder-inl.h +0 -6
  326. package/src/headers/{18 → 24}/string_decoder.h +0 -1
  327. package/src/headers/24/target_agent.h +75 -0
  328. package/src/headers/{16 → 24}/tcp_wrap.h +3 -1
  329. package/src/headers/{14 → 24}/threadpoolwork-inl.h +14 -1
  330. package/src/headers/24/timer_wrap-inl.h +32 -0
  331. package/src/headers/{16 → 24}/timer_wrap.h +7 -4
  332. package/src/headers/24/timers.h +75 -0
  333. package/src/headers/24/tlscontext.h +228 -0
  334. package/src/headers/24/tokens.h +256 -0
  335. package/src/headers/{14/tracing → 24}/trace_event.h +7 -5
  336. package/src/headers/24/traced_value.h +129 -0
  337. package/src/headers/24/tracing_agent.h +43 -0
  338. package/src/headers/24/transportparams.h +166 -0
  339. package/src/headers/{16 → 24}/tty_wrap.h +0 -1
  340. package/src/headers/{18 → 24}/udp_wrap.h +8 -5
  341. package/src/headers/24/undici_version.h +6 -0
  342. package/src/headers/{16 → 24}/util-inl.h +267 -131
  343. package/src/headers/{16 → 24}/util.h +338 -146
  344. package/src/headers/24/v8-external-memory-accounter.h +60 -0
  345. package/src/headers/24/v8-fast-api-calls.h +819 -0
  346. package/src/headers/24/v8-inspector.h +426 -0
  347. package/src/headers/24/wasi_permission.h +31 -0
  348. package/src/headers/24/worker_agent.h +40 -0
  349. package/src/headers/24/worker_inspector.h +124 -0
  350. package/src/headers/24/worker_permission.h +31 -0
  351. package/src/headers/24/zlib_version.h +6 -0
  352. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  353. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  354. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  355. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  356. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  357. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  358. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  359. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  360. package/src/headers/14/aliased_buffer.h +0 -263
  361. package/src/headers/14/allocated_buffer-inl.h +0 -110
  362. package/src/headers/14/allocated_buffer.h +0 -73
  363. package/src/headers/14/async_wrap.h +0 -230
  364. package/src/headers/14/base64.h +0 -183
  365. package/src/headers/14/base_object-inl.h +0 -371
  366. package/src/headers/14/base_object.h +0 -281
  367. package/src/headers/14/callback_queue-inl.h +0 -97
  368. package/src/headers/14/callback_queue.h +0 -78
  369. package/src/headers/14/debug_utils.h +0 -181
  370. package/src/headers/14/env.h +0 -1388
  371. package/src/headers/14/handle_wrap.h +0 -117
  372. package/src/headers/14/histogram-inl.h +0 -83
  373. package/src/headers/14/histogram.h +0 -98
  374. package/src/headers/14/inspector_agent.h +0 -149
  375. package/src/headers/14/inspector_profiler.h +0 -137
  376. package/src/headers/14/js_native_api.h +0 -544
  377. package/src/headers/14/js_native_api_types.h +0 -143
  378. package/src/headers/14/js_native_api_v8.h +0 -301
  379. package/src/headers/14/js_native_api_v8_internals.h +0 -38
  380. package/src/headers/14/json_utils.h +0 -161
  381. package/src/headers/14/memory_tracker-inl.h +0 -355
  382. package/src/headers/14/module_wrap.h +0 -99
  383. package/src/headers/14/node.h +0 -1032
  384. package/src/headers/14/node_api.h +0 -255
  385. package/src/headers/14/node_api_types.h +0 -44
  386. package/src/headers/14/node_binding.h +0 -99
  387. package/src/headers/14/node_context_data.h +0 -44
  388. package/src/headers/14/node_contextify.h +0 -161
  389. package/src/headers/14/node_crypto.h +0 -865
  390. package/src/headers/14/node_crypto_bio.h +0 -195
  391. package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
  392. package/src/headers/14/node_crypto_clienthello.h +0 -132
  393. package/src/headers/14/node_crypto_common.h +0 -138
  394. package/src/headers/14/node_crypto_groups.h +0 -415
  395. package/src/headers/14/node_dtrace.h +0 -86
  396. package/src/headers/14/node_errors.h +0 -214
  397. package/src/headers/14/node_file-inl.h +0 -306
  398. package/src/headers/14/node_file.h +0 -417
  399. package/src/headers/14/node_http2.h +0 -1191
  400. package/src/headers/14/node_http_common-inl.h +0 -194
  401. package/src/headers/14/node_http_common.h +0 -529
  402. package/src/headers/14/node_i18n.h +0 -144
  403. package/src/headers/14/node_internals.h +0 -405
  404. package/src/headers/14/node_mem.h +0 -45
  405. package/src/headers/14/node_messaging.h +0 -303
  406. package/src/headers/14/node_metadata.h +0 -109
  407. package/src/headers/14/node_mutex.h +0 -247
  408. package/src/headers/14/node_native_module.h +0 -101
  409. package/src/headers/14/node_native_module_env.h +0 -66
  410. package/src/headers/14/node_options-inl.h +0 -451
  411. package/src/headers/14/node_options.h +0 -481
  412. package/src/headers/14/node_perf.h +0 -181
  413. package/src/headers/14/node_perf_common.h +0 -97
  414. package/src/headers/14/node_platform.h +0 -189
  415. package/src/headers/14/node_process.h +0 -40
  416. package/src/headers/14/node_report.h +0 -47
  417. package/src/headers/14/node_revert.h +0 -72
  418. package/src/headers/14/node_root_certs.h +0 -3458
  419. package/src/headers/14/node_sockaddr-inl.h +0 -170
  420. package/src/headers/14/node_sockaddr.h +0 -123
  421. package/src/headers/14/node_stat_watcher.h +0 -70
  422. package/src/headers/14/node_union_bytes.h +0 -103
  423. package/src/headers/14/node_url.h +0 -188
  424. package/src/headers/14/node_version.h +0 -98
  425. package/src/headers/14/node_wasi.h +0 -108
  426. package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
  427. package/src/headers/14/node_win32_etw_provider.h +0 -99
  428. package/src/headers/14/node_worker.h +0 -141
  429. package/src/headers/14/pipe_wrap.h +0 -78
  430. package/src/headers/14/req_wrap-inl.h +0 -170
  431. package/src/headers/14/req_wrap.h +0 -77
  432. package/src/headers/14/stream_base-inl.h +0 -275
  433. package/src/headers/14/stream_base.h +0 -434
  434. package/src/headers/14/stream_pipe.h +0 -73
  435. package/src/headers/14/stream_wrap.h +0 -130
  436. package/src/headers/14/string_bytes.h +0 -129
  437. package/src/headers/14/string_decoder.h +0 -50
  438. package/src/headers/14/string_search.h +0 -638
  439. package/src/headers/14/tcp_wrap.h +0 -101
  440. package/src/headers/14/tls_wrap.h +0 -222
  441. package/src/headers/14/tracing/agent.h +0 -195
  442. package/src/headers/14/tracing/traced_value.h +0 -70
  443. package/src/headers/14/tty_wrap.h +0 -64
  444. package/src/headers/14/udp_wrap.h +0 -227
  445. package/src/headers/14/util-inl.h +0 -566
  446. package/src/headers/14/util.h +0 -804
  447. package/src/headers/14/v8abbr.h +0 -124
  448. package/src/headers/16/aliased_buffer.h +0 -315
  449. package/src/headers/16/allocated_buffer-inl.h +0 -110
  450. package/src/headers/16/allocated_buffer.h +0 -73
  451. package/src/headers/16/async_wrap-inl.h +0 -94
  452. package/src/headers/16/base64-inl.h +0 -189
  453. package/src/headers/16/base64.h +0 -69
  454. package/src/headers/16/crypto/crypto_aes.h +0 -89
  455. package/src/headers/16/crypto/crypto_cipher.h +0 -286
  456. package/src/headers/16/crypto/crypto_common.h +0 -187
  457. package/src/headers/16/crypto/crypto_dh.h +0 -157
  458. package/src/headers/16/crypto/crypto_dsa.h +0 -76
  459. package/src/headers/16/crypto/crypto_ec.h +0 -169
  460. package/src/headers/16/crypto/crypto_groups.h +0 -415
  461. package/src/headers/16/crypto/crypto_hash.h +0 -89
  462. package/src/headers/16/crypto/crypto_hkdf.h +0 -66
  463. package/src/headers/16/crypto/crypto_hmac.h +0 -94
  464. package/src/headers/16/crypto/crypto_keygen.h +0 -301
  465. package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
  466. package/src/headers/16/crypto/crypto_random.h +0 -130
  467. package/src/headers/16/crypto/crypto_rsa.h +0 -141
  468. package/src/headers/16/crypto/crypto_scrypt.h +0 -87
  469. package/src/headers/16/crypto/crypto_sig.h +0 -167
  470. package/src/headers/16/crypto/crypto_spkac.h +0 -20
  471. package/src/headers/16/crypto/crypto_timing.h +0 -20
  472. package/src/headers/16/crypto/crypto_x509.h +0 -141
  473. package/src/headers/16/env.h +0 -1629
  474. package/src/headers/16/histogram.h +0 -216
  475. package/src/headers/16/js_native_api.h +0 -561
  476. package/src/headers/16/js_native_api_v8.h +0 -451
  477. package/src/headers/16/node.d +0 -315
  478. package/src/headers/16/node.stp +0 -146
  479. package/src/headers/16/node_api.h +0 -275
  480. package/src/headers/16/node_api_internals.h +0 -30
  481. package/src/headers/16/node_binding.h +0 -99
  482. package/src/headers/16/node_buffer.h +0 -92
  483. package/src/headers/16/node_constants.h +0 -84
  484. package/src/headers/16/node_context_data.h +0 -44
  485. package/src/headers/16/node_contextify.h +0 -196
  486. package/src/headers/16/node_dtrace.h +0 -86
  487. package/src/headers/16/node_external_reference.h +0 -129
  488. package/src/headers/16/node_main_instance.h +0 -103
  489. package/src/headers/16/node_native_module.h +0 -101
  490. package/src/headers/16/node_native_module_env.h +0 -68
  491. package/src/headers/16/node_platform.h +0 -192
  492. package/src/headers/16/node_process.h +0 -43
  493. package/src/headers/16/node_provider.d +0 -80
  494. package/src/headers/16/node_snapshotable.h +0 -137
  495. package/src/headers/16/node_union_bytes.h +0 -103
  496. package/src/headers/16/node_url.h +0 -205
  497. package/src/headers/16/node_v8.h +0 -41
  498. package/src/headers/16/node_v8_platform-inl.h +0 -194
  499. package/src/headers/16/node_wasi.h +0 -108
  500. package/src/headers/16/node_watchdog.h +0 -152
  501. package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
  502. package/src/headers/16/node_win32_etw_provider.h +0 -99
  503. package/src/headers/16/spawn_sync.h +0 -242
  504. package/src/headers/16/string_decoder-inl.h +0 -37
  505. package/src/headers/16/string_search.h +0 -638
  506. package/src/headers/16/threadpoolwork-inl.h +0 -57
  507. package/src/headers/16/tracing/node_trace_buffer.h +0 -83
  508. package/src/headers/16/tracing/node_trace_writer.h +0 -75
  509. package/src/headers/16/tracing/trace_event.h +0 -720
  510. package/src/headers/16/tracing/traced_value.h +0 -70
  511. package/src/headers/16/v8abbr.h +0 -123
  512. package/src/headers/16/v8ustack.d +0 -695
  513. package/src/headers/18/aliased_buffer.h +0 -315
  514. package/src/headers/18/aliased_struct-inl.h +0 -54
  515. package/src/headers/18/aliased_struct.h +0 -63
  516. package/src/headers/18/base64-inl.h +0 -189
  517. package/src/headers/18/base64.h +0 -69
  518. package/src/headers/18/connect_wrap.h +0 -26
  519. package/src/headers/18/connection_wrap.h +0 -30
  520. package/src/headers/18/crypto/crypto_aes.h +0 -89
  521. package/src/headers/18/crypto/crypto_bio.h +0 -194
  522. package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
  523. package/src/headers/18/crypto/crypto_common.h +0 -151
  524. package/src/headers/18/crypto/crypto_groups.h +0 -415
  525. package/src/headers/18/crypto/crypto_x509.h +0 -143
  526. package/src/headers/18/debug_utils-inl.h +0 -223
  527. package/src/headers/18/diagnosticfilename-inl.h +0 -33
  528. package/src/headers/18/env-inl.h +0 -1308
  529. package/src/headers/18/env.h +0 -1667
  530. package/src/headers/18/inspector_io.h +0 -78
  531. package/src/headers/18/inspector_socket.h +0 -60
  532. package/src/headers/18/inspector_socket_server.h +0 -110
  533. package/src/headers/18/js_stream.h +0 -52
  534. package/src/headers/18/memory_tracker.h +0 -284
  535. package/src/headers/18/module_wrap.h +0 -116
  536. package/src/headers/18/node_binding.h +0 -99
  537. package/src/headers/18/node_context_data.h +0 -44
  538. package/src/headers/18/node_contextify.h +0 -196
  539. package/src/headers/18/node_dir.h +0 -52
  540. package/src/headers/18/node_dtrace.h +0 -86
  541. package/src/headers/18/node_http2_state.h +0 -149
  542. package/src/headers/18/node_mem-inl.h +0 -112
  543. package/src/headers/18/node_native_module.h +0 -109
  544. package/src/headers/18/node_native_module_env.h +0 -71
  545. package/src/headers/18/node_object_wrap.h +0 -132
  546. package/src/headers/18/node_snapshot_builder.h +0 -43
  547. package/src/headers/18/node_snapshotable.h +0 -130
  548. package/src/headers/18/node_union_bytes.h +0 -103
  549. package/src/headers/18/node_url.h +0 -205
  550. package/src/headers/18/node_v8.h +0 -41
  551. package/src/headers/18/node_wasi.h +0 -108
  552. package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
  553. package/src/headers/18/node_win32_etw_provider.h +0 -99
  554. package/src/headers/18/string_search.h +0 -638
  555. package/src/headers/18/tracing/node_trace_buffer.h +0 -83
  556. package/src/headers/18/tracing/node_trace_writer.h +0 -75
  557. package/src/headers/18/tracing/trace_event_common.h +0 -1109
  558. package/src/headers/18/tracing/traced_value.h +0 -70
  559. package/src/headers/18/v8abbr.h +0 -123
  560. /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
  561. /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
  562. /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
  563. /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
  564. /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
  565. /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
  566. /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
  567. /package/src/headers/{14 → 22}/inspector_io.h +0 -0
  568. /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
  569. /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
  570. /package/src/headers/{14 → 22}/js_stream.h +0 -0
  571. /package/src/headers/{14 → 22}/node_dir.h +0 -0
  572. /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
  573. /package/src/headers/{16 → 22}/node_mem.h +0 -0
  574. /package/src/headers/{16 → 22}/node_mutex.h +0 -0
  575. /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
  576. /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
  577. /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
  578. /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
  579. /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
  580. /package/src/headers/{18 → 22}/req_wrap.h +0 -0
  581. /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
  582. /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
  583. /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
  584. /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
  585. /package/src/headers/{18 → 22}/tty_wrap.h +0 -0
  586. /package/src/headers/{16 → 24}/aliased_struct-inl.h +0 -0
  587. /package/src/headers/{16 → 24}/aliased_struct.h +0 -0
  588. /package/src/headers/{18 → 24}/callback_queue-inl.h +0 -0
  589. /package/src/headers/{16 → 24}/connect_wrap.h +0 -0
  590. /package/src/headers/{16 → 24}/connection_wrap.h +0 -0
  591. /package/src/headers/{18 → 24}/crypto/crypto_spkac.h +0 -0
  592. /package/src/headers/{18 → 24}/crypto/crypto_timing.h +0 -0
  593. /package/src/headers/{16 → 24}/diagnosticfilename-inl.h +0 -0
  594. /package/src/headers/{16 → 24}/inspector_io.h +0 -0
  595. /package/src/headers/{16 → 24}/inspector_socket.h +0 -0
  596. /package/src/headers/{16 → 24}/inspector_socket_server.h +0 -0
  597. /package/src/headers/{16 → 24}/js_stream.h +0 -0
  598. /package/src/headers/{16 → 24}/node_dir.h +0 -0
  599. /package/src/headers/{18 → 24}/node_mem.h +0 -0
  600. /package/src/headers/{18 → 24}/node_mutex.h +0 -0
  601. /package/src/headers/{16 → 24}/node_object_wrap.h +0 -0
  602. /package/src/headers/{18 → 24}/node_process-inl.h +0 -0
  603. /package/src/headers/{14/tracing → 24}/node_trace_buffer.h +0 -0
  604. /package/src/headers/{14/tracing → 24}/node_trace_writer.h +0 -0
  605. /package/src/headers/{18 → 24}/pipe_wrap.h +0 -0
  606. /package/src/headers/{16/tracing → 24}/trace_event_common.h +0 -0
@@ -12,16 +12,17 @@
12
12
  #include "util.h"
13
13
  #include "v8.h"
14
14
 
15
+ #include "ncrypto.h"
16
+
17
+ #include <openssl/dsa.h>
18
+ #include <openssl/ec.h>
15
19
  #include <openssl/err.h>
16
20
  #include <openssl/evp.h>
17
- #include <openssl/ec.h>
21
+ #include <openssl/hmac.h>
18
22
  #include <openssl/kdf.h>
19
23
  #include <openssl/rsa.h>
20
- #include <openssl/dsa.h>
21
24
  #include <openssl/ssl.h>
22
- #ifndef OPENSSL_NO_ENGINE
23
- # include <openssl/engine.h>
24
- #endif // !OPENSSL_NO_ENGINE
25
+
25
26
  // The FIPS-related functions are only available
26
27
  // when the OpenSSL itself was compiled with FIPS support.
27
28
  #if defined(OPENSSL_FIPS) && OPENSSL_VERSION_MAJOR < 3
@@ -29,11 +30,12 @@
29
30
  #endif // OPENSSL_FIPS
30
31
 
31
32
  #include <algorithm>
33
+ #include <climits>
34
+ #include <cstdio>
32
35
  #include <memory>
36
+ #include <optional>
33
37
  #include <string>
34
38
  #include <vector>
35
- #include <climits>
36
- #include <cstdio>
37
39
 
38
40
  namespace node {
39
41
  namespace crypto {
@@ -52,39 +54,32 @@ constexpr size_t kSizeOf_EVP_PKEY_CTX = 80;
52
54
  constexpr size_t kSizeOf_HMAC_CTX = 32;
53
55
 
54
56
  // Define smart pointers for the most commonly used OpenSSL types:
55
- using X509Pointer = DeleteFnPtr<X509, X509_free>;
56
- using BIOPointer = DeleteFnPtr<BIO, BIO_free_all>;
57
- using SSLCtxPointer = DeleteFnPtr<SSL_CTX, SSL_CTX_free>;
58
- using SSLSessionPointer = DeleteFnPtr<SSL_SESSION, SSL_SESSION_free>;
59
- using SSLPointer = DeleteFnPtr<SSL, SSL_free>;
60
- using PKCS8Pointer = DeleteFnPtr<PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free>;
61
- using EVPKeyPointer = DeleteFnPtr<EVP_PKEY, EVP_PKEY_free>;
62
- using EVPKeyCtxPointer = DeleteFnPtr<EVP_PKEY_CTX, EVP_PKEY_CTX_free>;
63
- using EVPMDPointer = DeleteFnPtr<EVP_MD_CTX, EVP_MD_CTX_free>;
64
- using RSAPointer = DeleteFnPtr<RSA, RSA_free>;
65
- using ECPointer = DeleteFnPtr<EC_KEY, EC_KEY_free>;
66
- using BignumPointer = DeleteFnPtr<BIGNUM, BN_free>;
67
- using BignumCtxPointer = DeleteFnPtr<BN_CTX, BN_CTX_free>;
68
- using NetscapeSPKIPointer = DeleteFnPtr<NETSCAPE_SPKI, NETSCAPE_SPKI_free>;
69
- using ECGroupPointer = DeleteFnPtr<EC_GROUP, EC_GROUP_free>;
70
- using ECPointPointer = DeleteFnPtr<EC_POINT, EC_POINT_free>;
71
- using ECKeyPointer = DeleteFnPtr<EC_KEY, EC_KEY_free>;
72
- using DHPointer = DeleteFnPtr<DH, DH_free>;
73
- using ECDSASigPointer = DeleteFnPtr<ECDSA_SIG, ECDSA_SIG_free>;
74
- using HMACCtxPointer = DeleteFnPtr<HMAC_CTX, HMAC_CTX_free>;
75
- using CipherCtxPointer = DeleteFnPtr<EVP_CIPHER_CTX, EVP_CIPHER_CTX_free>;
76
- using RsaPointer = DeleteFnPtr<RSA, RSA_free>;
77
- using DsaPointer = DeleteFnPtr<DSA, DSA_free>;
78
- using DsaSigPointer = DeleteFnPtr<DSA_SIG, DSA_SIG_free>;
79
-
80
- // Our custom implementation of the certificate verify callback
81
- // used when establishing a TLS handshake. Because we cannot perform
82
- // I/O quickly enough with X509_STORE_CTX_ APIs in this callback,
83
- // we ignore preverify_ok errors here and let the handshake continue.
84
- // In other words, this VerifyCallback is a non-op. It is imperative
85
- // that the user user Connection::VerifyError after the `secure`
86
- // callback has been made.
87
- extern int VerifyCallback(int preverify_ok, X509_STORE_CTX* ctx);
57
+ using X509Pointer = ncrypto::X509Pointer;
58
+ using BIOPointer = ncrypto::BIOPointer;
59
+ using SSLCtxPointer = ncrypto::SSLCtxPointer;
60
+ using SSLSessionPointer = ncrypto::SSLSessionPointer;
61
+ using SSLPointer = ncrypto::SSLPointer;
62
+ using PKCS8Pointer = ncrypto::PKCS8Pointer;
63
+ using EVPKeyPointer = ncrypto::EVPKeyPointer;
64
+ using EVPKeyCtxPointer = ncrypto::EVPKeyCtxPointer;
65
+ using EVPMDCtxPointer = ncrypto::EVPMDCtxPointer;
66
+ using RSAPointer = ncrypto::RSAPointer;
67
+ using ECPointer = ncrypto::ECPointer;
68
+ using BignumPointer = ncrypto::BignumPointer;
69
+ using BignumCtxPointer = ncrypto::BignumCtxPointer;
70
+ using NetscapeSPKIPointer = ncrypto::NetscapeSPKIPointer;
71
+ using ECGroupPointer = ncrypto::ECGroupPointer;
72
+ using ECPointPointer = ncrypto::ECPointPointer;
73
+ using ECKeyPointer = ncrypto::ECKeyPointer;
74
+ using DHPointer = ncrypto::DHPointer;
75
+ using ECDSASigPointer = ncrypto::ECDSASigPointer;
76
+ using HMACCtxPointer = ncrypto::HMACCtxPointer;
77
+ using CipherCtxPointer = ncrypto::CipherCtxPointer;
78
+ using DsaPointer = ncrypto::DSAPointer;
79
+ using DsaSigPointer = ncrypto::DSASigPointer;
80
+
81
+ using ClearErrorOnReturn = ncrypto::ClearErrorOnReturn;
82
+ using MarkPopErrorOnReturn = ncrypto::MarkPopErrorOnReturn;
88
83
 
89
84
  bool ProcessFipsOptions();
90
85
 
@@ -95,47 +90,6 @@ void InitCrypto(v8::Local<v8::Object> target);
95
90
 
96
91
  extern void UseExtraCaCerts(const std::string& file);
97
92
 
98
- // Forcibly clear OpenSSL's error stack on return. This stops stale errors
99
- // from popping up later in the lifecycle of crypto operations where they
100
- // would cause spurious failures. It's a rather blunt method, though.
101
- // ERR_clear_error() isn't necessarily cheap either.
102
- struct ClearErrorOnReturn {
103
- ~ClearErrorOnReturn() { ERR_clear_error(); }
104
- };
105
-
106
- // Pop errors from OpenSSL's error stack that were added
107
- // between when this was constructed and destructed.
108
- struct MarkPopErrorOnReturn {
109
- MarkPopErrorOnReturn() { ERR_set_mark(); }
110
- ~MarkPopErrorOnReturn() { ERR_pop_to_mark(); }
111
- };
112
-
113
- // Ensure that OpenSSL has enough entropy (at least 256 bits) for its PRNG.
114
- // The entropy pool starts out empty and needs to fill up before the PRNG
115
- // can be used securely. Once the pool is filled, it never dries up again;
116
- // its contents is stirred and reused when necessary.
117
- //
118
- // OpenSSL normally fills the pool automatically but not when someone starts
119
- // generating random numbers before the pool is full: in that case OpenSSL
120
- // keeps lowering the entropy estimate to thwart attackers trying to guess
121
- // the initial state of the PRNG.
122
- //
123
- // When that happens, we will have to wait until enough entropy is available.
124
- // That should normally never take longer than a few milliseconds.
125
- //
126
- // OpenSSL draws from /dev/random and /dev/urandom. While /dev/random may
127
- // block pending "true" randomness, /dev/urandom is a CSPRNG that doesn't
128
- // block under normal circumstances.
129
- //
130
- // The only time when /dev/urandom may conceivably block is right after boot,
131
- // when the whole system is still low on entropy. That's not something we can
132
- // do anything about.
133
- void CheckEntropy();
134
-
135
- // Generate length bytes of random data. If this returns false, the data
136
- // may not be truly random but it's still generally good enough.
137
- bool EntropySource(unsigned char* buffer, size_t length);
138
-
139
93
  int PasswordCallback(char* buf, int size, int rwflag, void* u);
140
94
 
141
95
  int NoPasswordCallback(char* buf, int size, int rwflag, void* u);
@@ -147,7 +101,7 @@ void Decode(const v8::FunctionCallbackInfo<v8::Value>& args,
147
101
  void (*callback)(T*, const v8::FunctionCallbackInfo<v8::Value>&,
148
102
  const char*, size_t)) {
149
103
  T* ctx;
150
- ASSIGN_OR_RETURN_UNWRAP(&ctx, args.Holder());
104
+ ASSIGN_OR_RETURN_UNWRAP(&ctx, args.This());
151
105
 
152
106
  if (args[0]->IsString()) {
153
107
  StringBytes::InlineDecoder decoder;
@@ -176,6 +130,21 @@ enum class NodeCryptoError {
176
130
  #undef V
177
131
  };
178
132
 
133
+ template <typename... Args>
134
+ std::string getNodeCryptoErrorString(const NodeCryptoError error,
135
+ Args&&... args) {
136
+ const char* error_string = nullptr;
137
+ switch (error) {
138
+ #define V(CODE, DESCRIPTION) \
139
+ case NodeCryptoError::CODE: \
140
+ error_string = DESCRIPTION; \
141
+ break;
142
+ NODE_CRYPTO_ERROR_CODES_MAP(V)
143
+ #undef V
144
+ }
145
+ return SPrintF(error_string, std::forward<Args>(args)...);
146
+ }
147
+
179
148
  // Utility struct used to harvest error information from openssl's error stack
180
149
  struct CryptoErrorStore final : public MemoryRetainer {
181
150
  public:
@@ -211,6 +180,9 @@ void CryptoErrorStore::Insert(const NodeCryptoError error, Args&&... args) {
211
180
  std::forward<Args>(args)...));
212
181
  }
213
182
 
183
+ v8::MaybeLocal<v8::Value> cryptoErrorListToException(
184
+ Environment* env, const ncrypto::CryptoErrorList& errors);
185
+
214
186
  template <typename T>
215
187
  T* MallocOpenSSL(size_t count) {
216
188
  void* mem = OPENSSL_malloc(MultiplyWithOverflowCheck(count, sizeof(T)));
@@ -218,37 +190,79 @@ T* MallocOpenSSL(size_t count) {
218
190
  return static_cast<T*>(mem);
219
191
  }
220
192
 
221
- template <typename T>
222
- T* ReallocOpenSSL(T* buf, size_t count) {
223
- void* mem = OPENSSL_realloc(buf, MultiplyWithOverflowCheck(count, sizeof(T)));
224
- CHECK_IMPLIES(mem == nullptr, count == 0);
225
- return static_cast<T*>(mem);
226
- }
227
-
228
193
  // A helper class representing a read-only byte array. When deallocated, its
229
194
  // contents are zeroed.
230
195
  class ByteSource {
231
196
  public:
197
+ class Builder {
198
+ public:
199
+ // Allocates memory using OpenSSL's memory allocator.
200
+ explicit Builder(size_t size)
201
+ : data_(MallocOpenSSL<char>(size)), size_(size) {}
202
+
203
+ Builder(Builder&& other) = delete;
204
+ Builder& operator=(Builder&& other) = delete;
205
+ Builder(const Builder&) = delete;
206
+ Builder& operator=(const Builder&) = delete;
207
+
208
+ ~Builder() { OPENSSL_clear_free(data_, size_); }
209
+
210
+ // Returns the underlying non-const pointer.
211
+ template <typename T>
212
+ T* data() {
213
+ return reinterpret_cast<T*>(data_);
214
+ }
215
+
216
+ // Returns the (allocated) size in bytes.
217
+ size_t size() const { return size_; }
218
+
219
+ // Returns if (allocated) size is zero.
220
+ bool empty() const { return size_ == 0; }
221
+
222
+ // Finalizes the Builder and returns a read-only view that is optionally
223
+ // truncated.
224
+ ByteSource release(std::optional<size_t> resize = std::nullopt) && {
225
+ if (resize) {
226
+ CHECK_LE(*resize, size_);
227
+ if (*resize == 0) {
228
+ OPENSSL_clear_free(data_, size_);
229
+ data_ = nullptr;
230
+ }
231
+ size_ = *resize;
232
+ }
233
+ ByteSource out = ByteSource::Allocated(data_, size_);
234
+ data_ = nullptr;
235
+ size_ = 0;
236
+ return out;
237
+ }
238
+
239
+ private:
240
+ void* data_;
241
+ size_t size_;
242
+ };
243
+
232
244
  ByteSource() = default;
233
245
  ByteSource(ByteSource&& other) noexcept;
234
246
  ~ByteSource();
235
247
 
236
248
  ByteSource& operator=(ByteSource&& other) noexcept;
237
249
 
238
- const char* get() const;
250
+ ByteSource(const ByteSource&) = delete;
251
+ ByteSource& operator=(const ByteSource&) = delete;
252
+
253
+ template <typename T = void>
254
+ const T* data() const {
255
+ return reinterpret_cast<const T*>(data_);
256
+ }
239
257
 
240
- template <typename T>
241
- const T* data() const { return reinterpret_cast<const T*>(get()); }
258
+ size_t size() const { return size_; }
242
259
 
243
- size_t size() const;
260
+ bool empty() const { return size_ == 0; }
244
261
 
245
262
  operator bool() const { return data_ != nullptr; }
246
263
 
247
264
  BignumPointer ToBN() const {
248
- return BignumPointer(BN_bin2bn(
249
- reinterpret_cast<const unsigned char*>(get()),
250
- size(),
251
- nullptr));
265
+ return BignumPointer(data<unsigned char>(), size());
252
266
  }
253
267
 
254
268
  // Creates a v8::BackingStore that takes over responsibility for
@@ -260,19 +274,14 @@ class ByteSource {
260
274
 
261
275
  v8::MaybeLocal<v8::Uint8Array> ToBuffer(Environment* env);
262
276
 
263
- void reset();
277
+ static ByteSource Allocated(void* data, size_t size);
264
278
 
265
- // Allows an Allocated ByteSource to be truncated.
266
- void Resize(size_t newsize) {
267
- CHECK_LE(newsize, size_);
268
- CHECK_NOT_NULL(allocated_data_);
269
- char* new_data_ = ReallocOpenSSL<char>(allocated_data_, newsize);
270
- data_ = allocated_data_ = new_data_;
271
- size_ = newsize;
279
+ template <typename T>
280
+ static ByteSource Allocated(const ncrypto::Buffer<T>& buffer) {
281
+ return Allocated(buffer.data, buffer.len);
272
282
  }
273
283
 
274
- static ByteSource Allocated(char* data, size_t size);
275
- static ByteSource Foreign(const char* data, size_t size);
284
+ static ByteSource Foreign(const void* data, size_t size);
276
285
 
277
286
  static ByteSource FromEncodedString(Environment* env,
278
287
  v8::Local<v8::String> value,
@@ -295,18 +304,16 @@ class ByteSource {
295
304
 
296
305
  static ByteSource FromSymmetricKeyObjectHandle(v8::Local<v8::Value> handle);
297
306
 
298
- ByteSource(const ByteSource&) = delete;
299
- ByteSource& operator=(const ByteSource&) = delete;
300
-
301
307
  static ByteSource FromSecretKeyBytes(
302
308
  Environment* env, v8::Local<v8::Value> value);
303
309
 
304
310
  private:
305
- const char* data_ = nullptr;
306
- char* allocated_data_ = nullptr;
311
+ const void* data_ = nullptr;
312
+ void* allocated_data_ = nullptr;
307
313
  size_t size_ = 0;
308
314
 
309
- ByteSource(const char* data, char* allocated_data, size_t size);
315
+ ByteSource(const void* data, void* allocated_data, size_t size)
316
+ : data_(data), allocated_data_(allocated_data), size_(size) {}
310
317
  };
311
318
 
312
319
  enum CryptoJobMode {
@@ -321,14 +328,13 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
321
328
  public:
322
329
  using AdditionalParams = typename CryptoJobTraits::AdditionalParameters;
323
330
 
324
- explicit CryptoJob(
325
- Environment* env,
326
- v8::Local<v8::Object> object,
327
- AsyncWrap::ProviderType type,
328
- CryptoJobMode mode,
329
- AdditionalParams&& params)
331
+ explicit CryptoJob(Environment* env,
332
+ v8::Local<v8::Object> object,
333
+ AsyncWrap::ProviderType type,
334
+ CryptoJobMode mode,
335
+ AdditionalParams&& params)
330
336
  : AsyncWrap(env, object, type),
331
- ThreadPoolWork(env),
337
+ ThreadPoolWork(env, "crypto"),
332
338
  mode_(mode),
333
339
  params_(std::move(params)) {
334
340
  // If the CryptoJob is async, then the instance will be
@@ -355,31 +361,31 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
355
361
  v8::HandleScope handle_scope(env->isolate());
356
362
  v8::Context::Scope context_scope(env->context());
357
363
 
358
- // TODO(tniessen): Remove the exception handling logic here as soon as we
359
- // can verify that no code path in ToResult will ever throw an exception.
360
364
  v8::Local<v8::Value> exception;
361
365
  v8::Local<v8::Value> args[2];
362
366
  {
363
367
  node::errors::TryCatchScope try_catch(env);
364
- v8::Maybe<bool> ret = ptr->ToResult(&args[0], &args[1]);
365
- if (!ret.IsJust()) {
368
+ // If ToResult returns Nothing, then an exception should have been
369
+ // thrown and we should have caught it. Otherwise, args[0] and args[1]
370
+ // both should have been set to a value, even if the value is undefined.
371
+ if (ptr->ToResult(&args[0], &args[1]).IsNothing()) {
366
372
  CHECK(try_catch.HasCaught());
373
+ CHECK(try_catch.CanContinue());
367
374
  exception = try_catch.Exception();
368
- } else if (!ret.FromJust()) {
369
- return;
370
375
  }
371
376
  }
372
377
 
373
- if (exception.IsEmpty()) {
374
- ptr->MakeCallback(env->ondone_string(), arraysize(args), args);
375
- } else {
378
+ if (!exception.IsEmpty()) {
376
379
  ptr->MakeCallback(env->ondone_string(), 1, &exception);
380
+ } else {
381
+ CHECK(!args[0].IsEmpty());
382
+ CHECK(!args[1].IsEmpty());
383
+ ptr->MakeCallback(env->ondone_string(), arraysize(args), args);
377
384
  }
378
385
  }
379
386
 
380
- virtual v8::Maybe<bool> ToResult(
381
- v8::Local<v8::Value>* err,
382
- v8::Local<v8::Value>* result) = 0;
387
+ virtual v8::Maybe<void> ToResult(v8::Local<v8::Value>* err,
388
+ v8::Local<v8::Value>* result) = 0;
383
389
 
384
390
  CryptoJobMode mode() const { return mode_; }
385
391
 
@@ -387,7 +393,7 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
387
393
 
388
394
  AdditionalParams* params() { return &params_; }
389
395
 
390
- std::string MemoryInfoName() const override {
396
+ const char* MemoryInfoName() const override {
391
397
  return CryptoJobTraits::JobName;
392
398
  }
393
399
 
@@ -400,15 +406,16 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
400
406
  Environment* env = Environment::GetCurrent(args);
401
407
 
402
408
  CryptoJob<CryptoJobTraits>* job;
403
- ASSIGN_OR_RETURN_UNWRAP(&job, args.Holder());
409
+ ASSIGN_OR_RETURN_UNWRAP(&job, args.This());
404
410
  if (job->mode() == kCryptoJobAsync)
405
411
  return job->ScheduleWork();
406
412
 
407
413
  v8::Local<v8::Value> ret[2];
408
414
  env->PrintSyncTrace();
409
415
  job->DoThreadPoolWork();
410
- v8::Maybe<bool> result = job->ToResult(&ret[0], &ret[1]);
411
- if (result.IsJust() && result.FromJust()) {
416
+ if (job->ToResult(&ret[0], &ret[1]).IsJust()) {
417
+ CHECK(!ret[0].IsEmpty());
418
+ CHECK(!ret[1].IsEmpty());
412
419
  args.GetReturnValue().Set(
413
420
  v8::Array::New(env->isolate(), ret, arraysize(ret)));
414
421
  }
@@ -418,12 +425,15 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
418
425
  v8::FunctionCallback new_fn,
419
426
  Environment* env,
420
427
  v8::Local<v8::Object> target) {
421
- v8::Local<v8::FunctionTemplate> job = env->NewFunctionTemplate(new_fn);
428
+ v8::Isolate* isolate = env->isolate();
429
+ v8::HandleScope scope(isolate);
430
+ v8::Local<v8::Context> context = env->context();
431
+ v8::Local<v8::FunctionTemplate> job = NewFunctionTemplate(isolate, new_fn);
422
432
  job->Inherit(AsyncWrap::GetConstructorTemplate(env));
423
433
  job->InstanceTemplate()->SetInternalFieldCount(
424
434
  AsyncWrap::kInternalFieldCount);
425
- env->SetProtoMethod(job, "run", Run);
426
- env->SetConstructorFunction(target, CryptoJobTraits::JobName, job);
435
+ SetProtoMethod(isolate, job, "run", Run);
436
+ SetConstructorFunction(context, target, CryptoJobTraits::JobName, job);
427
437
  }
428
438
 
429
439
  static void RegisterExternalReferences(v8::FunctionCallback new_fn,
@@ -495,26 +505,29 @@ class DeriveBitsJob final : public CryptoJob<DeriveBitsTraits> {
495
505
  success_ = true;
496
506
  }
497
507
 
498
- v8::Maybe<bool> ToResult(
499
- v8::Local<v8::Value>* err,
500
- v8::Local<v8::Value>* result) override {
508
+ v8::Maybe<void> ToResult(v8::Local<v8::Value>* err,
509
+ v8::Local<v8::Value>* result) override {
501
510
  Environment* env = AsyncWrap::env();
502
511
  CryptoErrorStore* errors = CryptoJob<DeriveBitsTraits>::errors();
503
512
  if (success_) {
504
513
  CHECK(errors->Empty());
505
514
  *err = v8::Undefined(env->isolate());
506
- return DeriveBitsTraits::EncodeOutput(
507
- env,
508
- *CryptoJob<DeriveBitsTraits>::params(),
509
- &out_,
510
- result);
515
+ if (!DeriveBitsTraits::EncodeOutput(
516
+ env, *CryptoJob<DeriveBitsTraits>::params(), &out_)
517
+ .ToLocal(result)) {
518
+ return v8::Nothing<void>();
519
+ }
520
+ } else {
521
+ if (errors->Empty()) errors->Capture();
522
+ CHECK(!errors->Empty());
523
+ *result = v8::Undefined(env->isolate());
524
+ if (!errors->ToException(env).ToLocal(err)) {
525
+ return v8::Nothing<void>();
526
+ }
511
527
  }
512
-
513
- if (errors->Empty())
514
- errors->Capture();
515
- CHECK(!errors->Empty());
516
- *result = v8::Undefined(env->isolate());
517
- return v8::Just(errors->ToException(env).ToLocal(err));
528
+ CHECK(!result->IsEmpty());
529
+ CHECK(!err->IsEmpty());
530
+ return v8::JustVoid();
518
531
  }
519
532
 
520
533
  SET_SELF_SIZE(DeriveBitsJob)
@@ -532,72 +545,6 @@ void ThrowCryptoError(Environment* env,
532
545
  unsigned long err, // NOLINT(runtime/int)
533
546
  const char* message = nullptr);
534
547
 
535
- #ifndef OPENSSL_NO_ENGINE
536
- struct EnginePointer {
537
- ENGINE* engine = nullptr;
538
- bool finish_on_exit = false;
539
-
540
- inline EnginePointer() = default;
541
-
542
- inline explicit EnginePointer(ENGINE* engine_, bool finish_on_exit_ = false)
543
- : engine(engine_),
544
- finish_on_exit(finish_on_exit_) {}
545
-
546
- inline EnginePointer(EnginePointer&& other) noexcept
547
- : engine(other.engine),
548
- finish_on_exit(other.finish_on_exit) {
549
- other.release();
550
- }
551
-
552
- inline ~EnginePointer() { reset(); }
553
-
554
- inline EnginePointer& operator=(EnginePointer&& other) noexcept {
555
- if (this == &other) return *this;
556
- this->~EnginePointer();
557
- return *new (this) EnginePointer(std::move(other));
558
- }
559
-
560
- inline operator bool() const { return engine != nullptr; }
561
-
562
- inline ENGINE* get() { return engine; }
563
-
564
- inline void reset(ENGINE* engine_ = nullptr, bool finish_on_exit_ = false) {
565
- if (engine != nullptr) {
566
- if (finish_on_exit) {
567
- // This also does the equivalent of ENGINE_free.
568
- CHECK_EQ(ENGINE_finish(engine), 1);
569
- } else {
570
- CHECK_EQ(ENGINE_free(engine), 1);
571
- }
572
- }
573
- engine = engine_;
574
- finish_on_exit = finish_on_exit_;
575
- }
576
-
577
- inline ENGINE* release() {
578
- ENGINE* ret = engine;
579
- engine = nullptr;
580
- finish_on_exit = false;
581
- return ret;
582
- }
583
- };
584
-
585
- EnginePointer LoadEngineById(const char* id, CryptoErrorStore* errors);
586
-
587
- bool SetEngine(
588
- const char* id,
589
- uint32_t flags,
590
- CryptoErrorStore* errors = nullptr);
591
-
592
- void SetEngine(const v8::FunctionCallbackInfo<v8::Value>& args);
593
- #endif // !OPENSSL_NO_ENGINE
594
-
595
- void GetFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
596
-
597
- void SetFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
598
-
599
- void TestFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
600
-
601
548
  class CipherPushContext {
602
549
  public:
603
550
  inline explicit CipherPushContext(Environment* env) : env_(env) {}
@@ -661,7 +608,8 @@ void array_push_back(const TypeName* evp_ref,
661
608
  }
662
609
  #endif
663
610
 
664
- inline bool IsAnyByteSource(v8::Local<v8::Value> arg) {
611
+ // WebIDL AllowSharedBufferSource.
612
+ inline bool IsAnyBufferSource(v8::Local<v8::Value> arg) {
665
613
  return arg->IsArrayBufferView() ||
666
614
  arg->IsArrayBuffer() ||
667
615
  arg->IsSharedArrayBuffer();
@@ -671,24 +619,30 @@ template <typename T>
671
619
  class ArrayBufferOrViewContents {
672
620
  public:
673
621
  ArrayBufferOrViewContents() = default;
622
+ ArrayBufferOrViewContents(const ArrayBufferOrViewContents&) = delete;
623
+ void operator=(const ArrayBufferOrViewContents&) = delete;
674
624
 
675
625
  inline explicit ArrayBufferOrViewContents(v8::Local<v8::Value> buf) {
676
- CHECK(IsAnyByteSource(buf));
626
+ if (buf.IsEmpty()) {
627
+ return;
628
+ }
629
+
630
+ CHECK(IsAnyBufferSource(buf));
677
631
  if (buf->IsArrayBufferView()) {
678
632
  auto view = buf.As<v8::ArrayBufferView>();
679
633
  offset_ = view->ByteOffset();
680
634
  length_ = view->ByteLength();
681
- store_ = view->Buffer()->GetBackingStore();
635
+ data_ = view->Buffer()->Data();
682
636
  } else if (buf->IsArrayBuffer()) {
683
637
  auto ab = buf.As<v8::ArrayBuffer>();
684
638
  offset_ = 0;
685
639
  length_ = ab->ByteLength();
686
- store_ = ab->GetBackingStore();
640
+ data_ = ab->Data();
687
641
  } else {
688
642
  auto sab = buf.As<v8::SharedArrayBuffer>();
689
643
  offset_ = 0;
690
644
  length_ = sab->ByteLength();
691
- store_ = sab->GetBackingStore();
645
+ data_ = sab->Data();
692
646
  }
693
647
  }
694
648
 
@@ -696,22 +650,22 @@ class ArrayBufferOrViewContents {
696
650
  // Ideally, these would return nullptr if IsEmpty() or length_ is zero,
697
651
  // but some of the openssl API react badly if given a nullptr even when
698
652
  // length is zero, so we have to return something.
699
- if (size() == 0)
700
- return &buf;
701
- return reinterpret_cast<T*>(store_->Data()) + offset_;
653
+ if (empty()) return &buf;
654
+ return reinterpret_cast<T*>(data_) + offset_;
702
655
  }
703
656
 
704
657
  inline T* data() {
705
658
  // Ideally, these would return nullptr if IsEmpty() or length_ is zero,
706
659
  // but some of the openssl API react badly if given a nullptr even when
707
660
  // length is zero, so we have to return something.
708
- if (size() == 0)
709
- return &buf;
710
- return reinterpret_cast<T*>(store_->Data()) + offset_;
661
+ if (empty()) return &buf;
662
+ return reinterpret_cast<T*>(data_) + offset_;
711
663
  }
712
664
 
713
665
  inline size_t size() const { return length_; }
714
666
 
667
+ inline bool empty() const { return length_ == 0; }
668
+
715
669
  // In most cases, input buffer sizes passed in to openssl need to
716
670
  // be limited to <= INT_MAX. This utility method helps us check.
717
671
  inline bool CheckSizeInt32() { return size() <= INT_MAX; }
@@ -721,63 +675,65 @@ class ArrayBufferOrViewContents {
721
675
  }
722
676
 
723
677
  inline ByteSource ToCopy() const {
724
- if (size() == 0) return ByteSource();
725
- char* buf = MallocOpenSSL<char>(size());
726
- CHECK_NOT_NULL(buf);
727
- memcpy(buf, data(), size());
728
- return ByteSource::Allocated(buf, size());
678
+ if (empty()) return ByteSource();
679
+ ByteSource::Builder buf(size());
680
+ memcpy(buf.data<void>(), data(), size());
681
+ return std::move(buf).release();
729
682
  }
730
683
 
731
684
  inline ByteSource ToNullTerminatedCopy() const {
732
- if (size() == 0) return ByteSource();
733
- char* buf = MallocOpenSSL<char>(size() + 1);
734
- CHECK_NOT_NULL(buf);
735
- buf[size()] = 0;
736
- memcpy(buf, data(), size());
737
- return ByteSource::Allocated(buf, size());
685
+ if (empty()) return ByteSource();
686
+ ByteSource::Builder buf(size() + 1);
687
+ memcpy(buf.data<void>(), data(), size());
688
+ buf.data<char>()[size()] = 0;
689
+ return std::move(buf).release(size());
690
+ }
691
+
692
+ inline ncrypto::DataPointer ToDataPointer() const {
693
+ if (empty()) return {};
694
+ if (auto dp = ncrypto::DataPointer::Alloc(size())) {
695
+ memcpy(dp.get(), data(), size());
696
+ return dp;
697
+ }
698
+ return {};
738
699
  }
739
700
 
740
701
  template <typename M>
741
702
  void CopyTo(M* dest, size_t len) const {
742
703
  static_assert(sizeof(M) == 1, "sizeof(M) must equal 1");
743
704
  len = std::min(len, size());
744
- if (len > 0 && data() != nullptr)
705
+ if (len > 0 && data() != nullptr) {
745
706
  memcpy(dest, data(), len);
707
+ }
746
708
  }
747
709
 
748
710
  private:
749
711
  T buf = 0;
750
712
  size_t offset_ = 0;
751
713
  size_t length_ = 0;
752
- std::shared_ptr<v8::BackingStore> store_;
714
+ void* data_ = nullptr;
715
+
716
+ // Declaring operator new and delete as deleted is not spec compliant.
717
+ // Therefore declare them private instead to disable dynamic alloc
718
+ void* operator new(size_t);
719
+ void* operator new[](size_t);
720
+ void operator delete(void*);
721
+ void operator delete[](void*);
753
722
  };
754
723
 
755
- template <typename T>
756
- std::vector<T> CopyBuffer(const ArrayBufferOrViewContents<T>& buf) {
757
- std::vector<T> vec;
758
- vec->resize(buf.size());
759
- if (vec->size() > 0 && buf.data() != nullptr)
760
- memcpy(vec->data(), buf.data(), vec->size());
761
- return vec;
762
- }
763
-
764
- template <typename T>
765
- std::vector<T> CopyBuffer(v8::Local<v8::Value> buf) {
766
- return CopyBuffer(ArrayBufferOrViewContents<T>(buf));
767
- }
768
-
769
724
  v8::MaybeLocal<v8::Value> EncodeBignum(
770
725
  Environment* env,
771
726
  const BIGNUM* bn,
772
727
  int size,
773
728
  v8::Local<v8::Value>* error);
774
729
 
775
- v8::Maybe<bool> SetEncodedValue(
776
- Environment* env,
777
- v8::Local<v8::Object> target,
778
- v8::Local<v8::String> name,
779
- const BIGNUM* bn,
780
- int size = 0);
730
+ v8::Maybe<void> SetEncodedValue(Environment* env,
731
+ v8::Local<v8::Object> target,
732
+ v8::Local<v8::String> name,
733
+ const BIGNUM* bn,
734
+ int size = 0);
735
+
736
+ bool SetRsaOaepLabel(const EVPKeyCtxPointer& rsa, const ByteSource& label);
781
737
 
782
738
  namespace Util {
783
739
  void Initialize(Environment* env, v8::Local<v8::Object> target);