@encharm/cws 4.4.1 → 4.5.1

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 (485) hide show
  1. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  2. package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
  3. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  4. package/dist/bindings/cws_linux_arm64_node127.node +0 -0
  5. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  6. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  7. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  8. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  9. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  10. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  11. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  12. package/package.json +1 -1
  13. package/src/Addon.h +8 -23
  14. package/src/Socket.h +0 -1
  15. package/src/headers/22/acorn_version.h +6 -0
  16. package/src/headers/22/aliased_buffer-inl.h +243 -0
  17. package/src/headers/22/aliased_buffer.h +206 -0
  18. package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
  19. package/src/headers/{18 → 22}/async_wrap.h +65 -59
  20. package/src/headers/{16 → 22}/base_object-inl.h +57 -117
  21. package/src/headers/{18 → 22}/base_object.h +58 -30
  22. package/src/headers/22/base_object_types.h +74 -0
  23. package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
  24. package/src/headers/22/blob_serializer_deserializer.h +132 -0
  25. package/src/headers/{16 → 22}/callback_queue.h +1 -0
  26. package/src/headers/{16 → 22}/cares_wrap.h +27 -20
  27. package/src/headers/22/cjs_module_lexer_version.h +6 -0
  28. package/src/headers/22/cleanup_queue-inl.h +62 -0
  29. package/src/headers/22/cleanup_queue.h +85 -0
  30. package/src/headers/22/compile_cache.h +104 -0
  31. package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
  32. package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
  33. package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
  34. package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
  35. package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
  36. package/src/headers/22/crypto/ncrypto.h +752 -0
  37. package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
  38. package/src/headers/{18 → 22}/debug_utils.h +25 -19
  39. package/src/headers/22/encoding_binding.h +59 -0
  40. package/src/headers/{14 → 22}/env-inl.h +276 -409
  41. package/src/headers/22/env.h +1266 -0
  42. package/src/headers/22/env_properties.h +497 -0
  43. package/src/headers/{18 → 22}/handle_wrap.h +2 -0
  44. package/src/headers/{18 → 22}/histogram.h +88 -48
  45. package/src/headers/{16 → 22}/inspector_agent.h +17 -1
  46. package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
  47. package/src/headers/{18 → 22}/js_native_api.h +78 -30
  48. package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
  49. package/src/headers/{18 → 22}/js_native_api_v8.h +206 -161
  50. package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
  51. package/src/headers/22/json_parser.h +40 -0
  52. package/src/headers/{16 → 22}/json_utils.h +19 -8
  53. package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
  54. package/src/headers/{14 → 22}/memory_tracker.h +13 -8
  55. package/src/headers/{16 → 22}/module_wrap.h +49 -19
  56. package/src/headers/22/ncrypto/ncrypto.h +752 -0
  57. package/src/headers/{18 → 22}/node.h +465 -68
  58. package/src/headers/{18 → 22}/node_api.h +66 -81
  59. package/src/headers/{18 → 22}/node_api_internals.h +8 -4
  60. package/src/headers/{18 → 22}/node_api_types.h +5 -0
  61. package/src/headers/22/node_binding.h +154 -0
  62. package/src/headers/{18 → 22}/node_blob.h +46 -78
  63. package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
  64. package/src/headers/{18 → 22}/node_bob.h +2 -6
  65. package/src/headers/{18 → 22}/node_buffer.h +1 -1
  66. package/src/headers/22/node_builtins.h +220 -0
  67. package/src/headers/{18 → 22}/node_constants.h +3 -5
  68. package/src/headers/22/node_context_data.h +168 -0
  69. package/src/headers/22/node_contextify.h +199 -0
  70. package/src/headers/{16 → 22}/node_crypto.h +1 -2
  71. package/src/headers/22/node_dotenv.h +45 -0
  72. package/src/headers/{18 → 22}/node_errors.h +86 -27
  73. package/src/headers/22/node_exit_code.h +54 -0
  74. package/src/headers/22/node_external_reference.h +249 -0
  75. package/src/headers/{18 → 22}/node_file-inl.h +127 -30
  76. package/src/headers/{16 → 22}/node_file.h +122 -11
  77. package/src/headers/{18 → 22}/node_http2.h +28 -11
  78. package/src/headers/{16 → 22}/node_http2_state.h +34 -25
  79. package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
  80. package/src/headers/{18 → 22}/node_http_common.h +56 -55
  81. package/src/headers/{16 → 22}/node_i18n.h +5 -18
  82. package/src/headers/{18 → 22}/node_internals.h +121 -59
  83. package/src/headers/{18 → 22}/node_main_instance.h +4 -31
  84. package/src/headers/{18 → 22}/node_messaging.h +27 -10
  85. package/src/headers/{18 → 22}/node_metadata.h +23 -1
  86. package/src/headers/{18 → 22}/node_options-inl.h +24 -11
  87. package/src/headers/{18 → 22}/node_options.h +124 -39
  88. package/src/headers/{18 → 22}/node_perf.h +0 -2
  89. package/src/headers/{18 → 22}/node_perf_common.h +20 -9
  90. package/src/headers/{18 → 22}/node_platform.h +11 -5
  91. package/src/headers/{18 → 22}/node_process.h +26 -14
  92. package/src/headers/22/node_realm-inl.h +145 -0
  93. package/src/headers/22/node_realm.h +184 -0
  94. package/src/headers/{16 → 22}/node_report.h +13 -17
  95. package/src/headers/{16 → 22}/node_revert.h +3 -3
  96. package/src/headers/{16 → 22}/node_root_certs.h +902 -461
  97. package/src/headers/22/node_sea.h +64 -0
  98. package/src/headers/22/node_shadow_realm.h +46 -0
  99. package/src/headers/22/node_snapshot_builder.h +57 -0
  100. package/src/headers/22/node_snapshotable.h +174 -0
  101. package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
  102. package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
  103. package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
  104. package/src/headers/22/node_threadsafe_cow.h +105 -0
  105. package/src/headers/22/node_union_bytes.h +81 -0
  106. package/src/headers/22/node_url.h +96 -0
  107. package/src/headers/22/node_v8.h +77 -0
  108. package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
  109. package/src/headers/{18 → 22}/node_version.h +20 -8
  110. package/src/headers/22/node_wasi.h +185 -0
  111. package/src/headers/{14 → 22}/node_watchdog.h +2 -0
  112. package/src/headers/{18 → 22}/node_worker.h +7 -2
  113. package/src/headers/22/permission/child_process_permission.h +31 -0
  114. package/src/headers/22/permission/fs_permission.h +167 -0
  115. package/src/headers/22/permission/inspector_permission.h +31 -0
  116. package/src/headers/22/permission/permission.h +99 -0
  117. package/src/headers/22/permission/permission_base.h +60 -0
  118. package/src/headers/22/permission/wasi_permission.h +31 -0
  119. package/src/headers/22/permission/worker_permission.h +31 -0
  120. package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
  121. package/src/headers/{14 → 22}/spawn_sync.h +3 -3
  122. package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
  123. package/src/headers/{18 → 22}/stream_base.h +35 -16
  124. package/src/headers/{18 → 22}/stream_pipe.h +3 -4
  125. package/src/headers/{16 → 22}/stream_wrap.h +2 -1
  126. package/src/headers/{18 → 22}/string_bytes.h +5 -14
  127. package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
  128. package/src/headers/{16 → 22}/string_decoder.h +0 -1
  129. package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
  130. package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
  131. package/src/headers/22/timers.h +76 -0
  132. package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
  133. package/src/headers/{16 → 22}/udp_wrap.h +8 -5
  134. package/src/headers/22/undici_version.h +6 -0
  135. package/src/headers/{18 → 22}/util-inl.h +97 -127
  136. package/src/headers/{18 → 22}/util.h +293 -106
  137. package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
  138. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  139. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  140. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  141. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  142. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  143. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  144. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  145. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  146. package/src/headers/14/aliased_buffer.h +0 -263
  147. package/src/headers/14/allocated_buffer-inl.h +0 -110
  148. package/src/headers/14/allocated_buffer.h +0 -73
  149. package/src/headers/14/async_wrap-inl.h +0 -94
  150. package/src/headers/14/async_wrap.h +0 -230
  151. package/src/headers/14/base64.h +0 -183
  152. package/src/headers/14/base_object-inl.h +0 -371
  153. package/src/headers/14/base_object.h +0 -281
  154. package/src/headers/14/callback_queue-inl.h +0 -97
  155. package/src/headers/14/callback_queue.h +0 -78
  156. package/src/headers/14/debug_utils-inl.h +0 -223
  157. package/src/headers/14/debug_utils.h +0 -181
  158. package/src/headers/14/env.h +0 -1388
  159. package/src/headers/14/handle_wrap.h +0 -117
  160. package/src/headers/14/histogram-inl.h +0 -83
  161. package/src/headers/14/histogram.h +0 -98
  162. package/src/headers/14/inspector_agent.h +0 -149
  163. package/src/headers/14/inspector_profiler.h +0 -137
  164. package/src/headers/14/js_native_api.h +0 -544
  165. package/src/headers/14/js_native_api_types.h +0 -143
  166. package/src/headers/14/js_native_api_v8.h +0 -301
  167. package/src/headers/14/js_native_api_v8_internals.h +0 -38
  168. package/src/headers/14/json_utils.h +0 -161
  169. package/src/headers/14/memory_tracker-inl.h +0 -355
  170. package/src/headers/14/module_wrap.h +0 -99
  171. package/src/headers/14/node.h +0 -1032
  172. package/src/headers/14/node_api.h +0 -255
  173. package/src/headers/14/node_api_types.h +0 -44
  174. package/src/headers/14/node_binding.h +0 -99
  175. package/src/headers/14/node_buffer.h +0 -92
  176. package/src/headers/14/node_constants.h +0 -84
  177. package/src/headers/14/node_context_data.h +0 -44
  178. package/src/headers/14/node_contextify.h +0 -161
  179. package/src/headers/14/node_crypto.h +0 -865
  180. package/src/headers/14/node_crypto_bio.h +0 -195
  181. package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
  182. package/src/headers/14/node_crypto_clienthello.h +0 -132
  183. package/src/headers/14/node_crypto_common.h +0 -138
  184. package/src/headers/14/node_crypto_groups.h +0 -415
  185. package/src/headers/14/node_dtrace.h +0 -86
  186. package/src/headers/14/node_errors.h +0 -214
  187. package/src/headers/14/node_file-inl.h +0 -306
  188. package/src/headers/14/node_file.h +0 -417
  189. package/src/headers/14/node_http2.h +0 -1191
  190. package/src/headers/14/node_http2_state.h +0 -149
  191. package/src/headers/14/node_http_common-inl.h +0 -194
  192. package/src/headers/14/node_http_common.h +0 -529
  193. package/src/headers/14/node_i18n.h +0 -144
  194. package/src/headers/14/node_internals.h +0 -405
  195. package/src/headers/14/node_main_instance.h +0 -96
  196. package/src/headers/14/node_mem.h +0 -45
  197. package/src/headers/14/node_messaging.h +0 -303
  198. package/src/headers/14/node_metadata.h +0 -109
  199. package/src/headers/14/node_mutex.h +0 -247
  200. package/src/headers/14/node_native_module.h +0 -101
  201. package/src/headers/14/node_native_module_env.h +0 -66
  202. package/src/headers/14/node_options-inl.h +0 -451
  203. package/src/headers/14/node_options.h +0 -481
  204. package/src/headers/14/node_perf.h +0 -181
  205. package/src/headers/14/node_perf_common.h +0 -97
  206. package/src/headers/14/node_platform.h +0 -189
  207. package/src/headers/14/node_process.h +0 -40
  208. package/src/headers/14/node_report.h +0 -47
  209. package/src/headers/14/node_revert.h +0 -72
  210. package/src/headers/14/node_root_certs.h +0 -3458
  211. package/src/headers/14/node_sockaddr-inl.h +0 -170
  212. package/src/headers/14/node_sockaddr.h +0 -123
  213. package/src/headers/14/node_stat_watcher.h +0 -70
  214. package/src/headers/14/node_union_bytes.h +0 -103
  215. package/src/headers/14/node_url.h +0 -188
  216. package/src/headers/14/node_version.h +0 -98
  217. package/src/headers/14/node_wasi.h +0 -108
  218. package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
  219. package/src/headers/14/node_win32_etw_provider.h +0 -99
  220. package/src/headers/14/node_worker.h +0 -141
  221. package/src/headers/14/pipe_wrap.h +0 -78
  222. package/src/headers/14/req_wrap-inl.h +0 -170
  223. package/src/headers/14/req_wrap.h +0 -77
  224. package/src/headers/14/stream_base-inl.h +0 -275
  225. package/src/headers/14/stream_base.h +0 -434
  226. package/src/headers/14/stream_pipe.h +0 -73
  227. package/src/headers/14/stream_wrap.h +0 -130
  228. package/src/headers/14/string_bytes.h +0 -129
  229. package/src/headers/14/string_decoder.h +0 -50
  230. package/src/headers/14/string_search.h +0 -638
  231. package/src/headers/14/tcp_wrap.h +0 -101
  232. package/src/headers/14/threadpoolwork-inl.h +0 -57
  233. package/src/headers/14/tls_wrap.h +0 -222
  234. package/src/headers/14/tracing/agent.h +0 -195
  235. package/src/headers/14/tracing/node_trace_buffer.h +0 -83
  236. package/src/headers/14/tracing/node_trace_writer.h +0 -75
  237. package/src/headers/14/tracing/trace_event.h +0 -720
  238. package/src/headers/14/tracing/traced_value.h +0 -70
  239. package/src/headers/14/tty_wrap.h +0 -64
  240. package/src/headers/14/udp_wrap.h +0 -227
  241. package/src/headers/14/util-inl.h +0 -566
  242. package/src/headers/14/util.h +0 -804
  243. package/src/headers/14/v8abbr.h +0 -124
  244. package/src/headers/16/aliased_buffer.h +0 -315
  245. package/src/headers/16/aliased_struct-inl.h +0 -54
  246. package/src/headers/16/aliased_struct.h +0 -63
  247. package/src/headers/16/allocated_buffer-inl.h +0 -110
  248. package/src/headers/16/allocated_buffer.h +0 -73
  249. package/src/headers/16/async_wrap-inl.h +0 -94
  250. package/src/headers/16/async_wrap.h +0 -246
  251. package/src/headers/16/base64-inl.h +0 -189
  252. package/src/headers/16/base64.h +0 -69
  253. package/src/headers/16/base_object.h +0 -294
  254. package/src/headers/16/connect_wrap.h +0 -26
  255. package/src/headers/16/connection_wrap.h +0 -30
  256. package/src/headers/16/crypto/crypto_aes.h +0 -89
  257. package/src/headers/16/crypto/crypto_bio.h +0 -194
  258. package/src/headers/16/crypto/crypto_cipher.h +0 -286
  259. package/src/headers/16/crypto/crypto_clienthello-inl.h +0 -90
  260. package/src/headers/16/crypto/crypto_clienthello.h +0 -131
  261. package/src/headers/16/crypto/crypto_common.h +0 -187
  262. package/src/headers/16/crypto/crypto_context.h +0 -147
  263. package/src/headers/16/crypto/crypto_dh.h +0 -157
  264. package/src/headers/16/crypto/crypto_dsa.h +0 -76
  265. package/src/headers/16/crypto/crypto_ec.h +0 -169
  266. package/src/headers/16/crypto/crypto_groups.h +0 -415
  267. package/src/headers/16/crypto/crypto_hash.h +0 -89
  268. package/src/headers/16/crypto/crypto_hkdf.h +0 -66
  269. package/src/headers/16/crypto/crypto_hmac.h +0 -94
  270. package/src/headers/16/crypto/crypto_keygen.h +0 -301
  271. package/src/headers/16/crypto/crypto_keys.h +0 -412
  272. package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
  273. package/src/headers/16/crypto/crypto_random.h +0 -130
  274. package/src/headers/16/crypto/crypto_rsa.h +0 -141
  275. package/src/headers/16/crypto/crypto_scrypt.h +0 -87
  276. package/src/headers/16/crypto/crypto_sig.h +0 -167
  277. package/src/headers/16/crypto/crypto_spkac.h +0 -20
  278. package/src/headers/16/crypto/crypto_timing.h +0 -20
  279. package/src/headers/16/crypto/crypto_tls.h +0 -292
  280. package/src/headers/16/crypto/crypto_util.h +0 -736
  281. package/src/headers/16/crypto/crypto_x509.h +0 -141
  282. package/src/headers/16/debug_utils.h +0 -184
  283. package/src/headers/16/diagnosticfilename-inl.h +0 -33
  284. package/src/headers/16/env-inl.h +0 -1277
  285. package/src/headers/16/env.h +0 -1629
  286. package/src/headers/16/handle_wrap.h +0 -121
  287. package/src/headers/16/histogram-inl.h +0 -88
  288. package/src/headers/16/histogram.h +0 -216
  289. package/src/headers/16/inspector_io.h +0 -78
  290. package/src/headers/16/inspector_socket.h +0 -60
  291. package/src/headers/16/inspector_socket_server.h +0 -110
  292. package/src/headers/16/js_native_api.h +0 -561
  293. package/src/headers/16/js_native_api_types.h +0 -160
  294. package/src/headers/16/js_native_api_v8.h +0 -451
  295. package/src/headers/16/js_native_api_v8_internals.h +0 -39
  296. package/src/headers/16/js_stream.h +0 -52
  297. package/src/headers/16/memory_tracker-inl.h +0 -356
  298. package/src/headers/16/memory_tracker.h +0 -284
  299. package/src/headers/16/node.d +0 -315
  300. package/src/headers/16/node.h +0 -1132
  301. package/src/headers/16/node.stp +0 -146
  302. package/src/headers/16/node_api.h +0 -275
  303. package/src/headers/16/node_api_internals.h +0 -30
  304. package/src/headers/16/node_api_types.h +0 -50
  305. package/src/headers/16/node_binding.h +0 -99
  306. package/src/headers/16/node_blob.h +0 -191
  307. package/src/headers/16/node_bob-inl.h +0 -37
  308. package/src/headers/16/node_bob.h +0 -111
  309. package/src/headers/16/node_buffer.h +0 -92
  310. package/src/headers/16/node_constants.h +0 -84
  311. package/src/headers/16/node_context_data.h +0 -44
  312. package/src/headers/16/node_contextify.h +0 -196
  313. package/src/headers/16/node_dir.h +0 -52
  314. package/src/headers/16/node_dtrace.h +0 -86
  315. package/src/headers/16/node_errors.h +0 -277
  316. package/src/headers/16/node_external_reference.h +0 -129
  317. package/src/headers/16/node_file-inl.h +0 -306
  318. package/src/headers/16/node_http2.h +0 -1140
  319. package/src/headers/16/node_http_common-inl.h +0 -200
  320. package/src/headers/16/node_http_common.h +0 -531
  321. package/src/headers/16/node_internals.h +0 -421
  322. package/src/headers/16/node_main_instance.h +0 -103
  323. package/src/headers/16/node_mem-inl.h +0 -112
  324. package/src/headers/16/node_messaging.h +0 -373
  325. package/src/headers/16/node_metadata.h +0 -122
  326. package/src/headers/16/node_native_module.h +0 -101
  327. package/src/headers/16/node_native_module_env.h +0 -68
  328. package/src/headers/16/node_object_wrap.h +0 -132
  329. package/src/headers/16/node_options-inl.h +0 -477
  330. package/src/headers/16/node_options.h +0 -494
  331. package/src/headers/16/node_perf.h +0 -185
  332. package/src/headers/16/node_perf_common.h +0 -89
  333. package/src/headers/16/node_platform.h +0 -192
  334. package/src/headers/16/node_process.h +0 -43
  335. package/src/headers/16/node_provider.d +0 -80
  336. package/src/headers/16/node_snapshotable.h +0 -137
  337. package/src/headers/16/node_sockaddr-inl.h +0 -266
  338. package/src/headers/16/node_sockaddr.h +0 -405
  339. package/src/headers/16/node_union_bytes.h +0 -103
  340. package/src/headers/16/node_url.h +0 -205
  341. package/src/headers/16/node_v8.h +0 -41
  342. package/src/headers/16/node_v8_platform-inl.h +0 -194
  343. package/src/headers/16/node_version.h +0 -98
  344. package/src/headers/16/node_wasi.h +0 -108
  345. package/src/headers/16/node_watchdog.h +0 -152
  346. package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
  347. package/src/headers/16/node_win32_etw_provider.h +0 -99
  348. package/src/headers/16/node_worker.h +0 -145
  349. package/src/headers/16/req_wrap.h +0 -77
  350. package/src/headers/16/spawn_sync.h +0 -242
  351. package/src/headers/16/stream_base-inl.h +0 -303
  352. package/src/headers/16/stream_base.h +0 -454
  353. package/src/headers/16/stream_pipe.h +0 -73
  354. package/src/headers/16/string_bytes.h +0 -122
  355. package/src/headers/16/string_decoder-inl.h +0 -37
  356. package/src/headers/16/string_search.h +0 -638
  357. package/src/headers/16/tcp_wrap.h +0 -103
  358. package/src/headers/16/threadpoolwork-inl.h +0 -57
  359. package/src/headers/16/timer_wrap.h +0 -84
  360. package/src/headers/16/tracing/agent.h +0 -195
  361. package/src/headers/16/tracing/node_trace_buffer.h +0 -83
  362. package/src/headers/16/tracing/node_trace_writer.h +0 -75
  363. package/src/headers/16/tracing/trace_event.h +0 -720
  364. package/src/headers/16/tracing/trace_event_common.h +0 -1109
  365. package/src/headers/16/tracing/traced_value.h +0 -70
  366. package/src/headers/16/tty_wrap.h +0 -66
  367. package/src/headers/16/util-inl.h +0 -575
  368. package/src/headers/16/util.h +0 -824
  369. package/src/headers/16/v8abbr.h +0 -123
  370. package/src/headers/16/v8ustack.d +0 -695
  371. package/src/headers/18/aliased_buffer.h +0 -315
  372. package/src/headers/18/aliased_struct-inl.h +0 -54
  373. package/src/headers/18/aliased_struct.h +0 -63
  374. package/src/headers/18/base64-inl.h +0 -189
  375. package/src/headers/18/base64.h +0 -69
  376. package/src/headers/18/base_object-inl.h +0 -374
  377. package/src/headers/18/callback_queue-inl.h +0 -97
  378. package/src/headers/18/callback_queue.h +0 -78
  379. package/src/headers/18/cares_wrap.h +0 -523
  380. package/src/headers/18/connect_wrap.h +0 -26
  381. package/src/headers/18/connection_wrap.h +0 -30
  382. package/src/headers/18/crypto/crypto_aes.h +0 -89
  383. package/src/headers/18/crypto/crypto_bio.h +0 -194
  384. package/src/headers/18/crypto/crypto_cipher.h +0 -291
  385. package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
  386. package/src/headers/18/crypto/crypto_common.h +0 -151
  387. package/src/headers/18/crypto/crypto_dh.h +0 -156
  388. package/src/headers/18/crypto/crypto_dsa.h +0 -77
  389. package/src/headers/18/crypto/crypto_ec.h +0 -170
  390. package/src/headers/18/crypto/crypto_groups.h +0 -415
  391. package/src/headers/18/crypto/crypto_hash.h +0 -89
  392. package/src/headers/18/crypto/crypto_hkdf.h +0 -65
  393. package/src/headers/18/crypto/crypto_hmac.h +0 -94
  394. package/src/headers/18/crypto/crypto_keygen.h +0 -305
  395. package/src/headers/18/crypto/crypto_pbkdf2.h +0 -76
  396. package/src/headers/18/crypto/crypto_random.h +0 -130
  397. package/src/headers/18/crypto/crypto_rsa.h +0 -141
  398. package/src/headers/18/crypto/crypto_scrypt.h +0 -87
  399. package/src/headers/18/crypto/crypto_sig.h +0 -168
  400. package/src/headers/18/crypto/crypto_spkac.h +0 -21
  401. package/src/headers/18/crypto/crypto_timing.h +0 -20
  402. package/src/headers/18/crypto/crypto_x509.h +0 -143
  403. package/src/headers/18/debug_utils-inl.h +0 -223
  404. package/src/headers/18/diagnosticfilename-inl.h +0 -33
  405. package/src/headers/18/env-inl.h +0 -1308
  406. package/src/headers/18/env.h +0 -1667
  407. package/src/headers/18/inspector_agent.h +0 -144
  408. package/src/headers/18/inspector_io.h +0 -78
  409. package/src/headers/18/inspector_profiler.h +0 -149
  410. package/src/headers/18/inspector_socket.h +0 -60
  411. package/src/headers/18/inspector_socket_server.h +0 -110
  412. package/src/headers/18/js_stream.h +0 -52
  413. package/src/headers/18/json_utils.h +0 -161
  414. package/src/headers/18/memory_tracker.h +0 -284
  415. package/src/headers/18/module_wrap.h +0 -116
  416. package/src/headers/18/node_binding.h +0 -99
  417. package/src/headers/18/node_context_data.h +0 -44
  418. package/src/headers/18/node_contextify.h +0 -196
  419. package/src/headers/18/node_crypto.h +0 -57
  420. package/src/headers/18/node_dir.h +0 -52
  421. package/src/headers/18/node_dtrace.h +0 -86
  422. package/src/headers/18/node_external_reference.h +0 -145
  423. package/src/headers/18/node_file.h +0 -426
  424. package/src/headers/18/node_http2_state.h +0 -149
  425. package/src/headers/18/node_i18n.h +0 -145
  426. package/src/headers/18/node_mem-inl.h +0 -112
  427. package/src/headers/18/node_mem.h +0 -45
  428. package/src/headers/18/node_mutex.h +0 -323
  429. package/src/headers/18/node_native_module.h +0 -109
  430. package/src/headers/18/node_native_module_env.h +0 -71
  431. package/src/headers/18/node_object_wrap.h +0 -132
  432. package/src/headers/18/node_process-inl.h +0 -26
  433. package/src/headers/18/node_report.h +0 -47
  434. package/src/headers/18/node_revert.h +0 -82
  435. package/src/headers/18/node_root_certs.h +0 -3246
  436. package/src/headers/18/node_snapshot_builder.h +0 -43
  437. package/src/headers/18/node_snapshotable.h +0 -130
  438. package/src/headers/18/node_stat_watcher.h +0 -72
  439. package/src/headers/18/node_union_bytes.h +0 -103
  440. package/src/headers/18/node_url.h +0 -205
  441. package/src/headers/18/node_v8.h +0 -41
  442. package/src/headers/18/node_v8_platform-inl.h +0 -194
  443. package/src/headers/18/node_wasi.h +0 -108
  444. package/src/headers/18/node_watchdog.h +0 -152
  445. package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
  446. package/src/headers/18/node_win32_etw_provider.h +0 -99
  447. package/src/headers/18/pipe_wrap.h +0 -80
  448. package/src/headers/18/req_wrap-inl.h +0 -170
  449. package/src/headers/18/spawn_sync.h +0 -242
  450. package/src/headers/18/stream_wrap.h +0 -133
  451. package/src/headers/18/string_decoder-inl.h +0 -37
  452. package/src/headers/18/string_decoder.h +0 -50
  453. package/src/headers/18/string_search.h +0 -638
  454. package/src/headers/18/tracing/node_trace_buffer.h +0 -83
  455. package/src/headers/18/tracing/node_trace_writer.h +0 -75
  456. package/src/headers/18/tracing/trace_event_common.h +0 -1109
  457. package/src/headers/18/tracing/traced_value.h +0 -70
  458. package/src/headers/18/udp_wrap.h +0 -227
  459. package/src/headers/18/v8abbr.h +0 -123
  460. /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
  461. /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
  462. /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
  463. /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
  464. /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
  465. /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
  466. /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
  467. /package/src/headers/{14 → 22}/inspector_io.h +0 -0
  468. /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
  469. /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
  470. /package/src/headers/{14 → 22}/js_stream.h +0 -0
  471. /package/src/headers/{14 → 22}/node_dir.h +0 -0
  472. /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
  473. /package/src/headers/{16 → 22}/node_mem.h +0 -0
  474. /package/src/headers/{16 → 22}/node_mutex.h +0 -0
  475. /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
  476. /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
  477. /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
  478. /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
  479. /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
  480. /package/src/headers/{18 → 22}/req_wrap.h +0 -0
  481. /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
  482. /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
  483. /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
  484. /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
  485. /package/src/headers/{18 → 22}/tty_wrap.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);