@encharm/cws 4.4.0 → 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 (511) 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_node108.node +0 -0
  6. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  7. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  8. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  9. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  10. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  11. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  12. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  13. package/package.json +1 -1
  14. package/src/Addon.h +20 -24
  15. package/src/Socket.h +0 -1
  16. package/src/headers/20/acorn_version.h +1 -1
  17. package/src/headers/20/connection_wrap.h +1 -0
  18. package/src/headers/20/crypto/crypto_keys.h +3 -0
  19. package/src/headers/20/crypto/crypto_tls.h +12 -3
  20. package/src/headers/20/crypto/crypto_util.h +3 -2
  21. package/src/headers/20/env_properties.h +3 -1
  22. package/src/headers/20/js_native_api.h +11 -1
  23. package/src/headers/20/js_native_api_v8.h +40 -3
  24. package/src/headers/20/js_native_api_v8_internals.h +6 -0
  25. package/src/headers/20/module_wrap.h +1 -1
  26. package/src/headers/20/node.h +2 -0
  27. package/src/headers/20/node_api.h +8 -7
  28. package/src/headers/20/node_constants.h +3 -0
  29. package/src/headers/20/node_contextify.h +24 -0
  30. package/src/headers/20/node_file-inl.h +32 -0
  31. package/src/headers/20/node_file.h +25 -12
  32. package/src/headers/20/node_options.h +9 -9
  33. package/src/headers/20/node_version.h +1 -1
  34. package/src/headers/20/permission/child_process_permission.h +2 -1
  35. package/src/headers/20/permission/fs_permission.h +11 -9
  36. package/src/headers/20/permission/inspector_permission.h +29 -0
  37. package/src/headers/20/permission/permission.h +4 -1
  38. package/src/headers/20/permission/permission_base.h +6 -2
  39. package/src/headers/20/permission/worker_permission.h +2 -1
  40. package/src/headers/20/undici_version.h +2 -2
  41. package/src/headers/22/acorn_version.h +6 -0
  42. package/src/headers/22/aliased_buffer-inl.h +243 -0
  43. package/src/headers/22/aliased_buffer.h +206 -0
  44. package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
  45. package/src/headers/{18 → 22}/async_wrap.h +65 -59
  46. package/src/headers/{16 → 22}/base_object-inl.h +57 -117
  47. package/src/headers/{18 → 22}/base_object.h +58 -30
  48. package/src/headers/22/base_object_types.h +74 -0
  49. package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
  50. package/src/headers/22/blob_serializer_deserializer.h +132 -0
  51. package/src/headers/{16 → 22}/callback_queue.h +1 -0
  52. package/src/headers/{16 → 22}/cares_wrap.h +27 -20
  53. package/src/headers/22/cjs_module_lexer_version.h +6 -0
  54. package/src/headers/22/cleanup_queue-inl.h +62 -0
  55. package/src/headers/22/cleanup_queue.h +85 -0
  56. package/src/headers/22/compile_cache.h +104 -0
  57. package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
  58. package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
  59. package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
  60. package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
  61. package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
  62. package/src/headers/22/crypto/ncrypto.h +752 -0
  63. package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
  64. package/src/headers/{18 → 22}/debug_utils.h +25 -19
  65. package/src/headers/22/encoding_binding.h +59 -0
  66. package/src/headers/{14 → 22}/env-inl.h +276 -409
  67. package/src/headers/22/env.h +1266 -0
  68. package/src/headers/22/env_properties.h +497 -0
  69. package/src/headers/{18 → 22}/handle_wrap.h +2 -0
  70. package/src/headers/{18 → 22}/histogram.h +88 -48
  71. package/src/headers/{16 → 22}/inspector_agent.h +17 -1
  72. package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
  73. package/src/headers/{18 → 22}/js_native_api.h +78 -30
  74. package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
  75. package/src/headers/{18 → 22}/js_native_api_v8.h +206 -161
  76. package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
  77. package/src/headers/22/json_parser.h +40 -0
  78. package/src/headers/{16 → 22}/json_utils.h +19 -8
  79. package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
  80. package/src/headers/{14 → 22}/memory_tracker.h +13 -8
  81. package/src/headers/{16 → 22}/module_wrap.h +49 -19
  82. package/src/headers/22/ncrypto/ncrypto.h +752 -0
  83. package/src/headers/{18 → 22}/node.h +465 -68
  84. package/src/headers/{18 → 22}/node_api.h +66 -81
  85. package/src/headers/{18 → 22}/node_api_internals.h +8 -4
  86. package/src/headers/{18 → 22}/node_api_types.h +5 -0
  87. package/src/headers/22/node_binding.h +154 -0
  88. package/src/headers/{18 → 22}/node_blob.h +46 -78
  89. package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
  90. package/src/headers/{18 → 22}/node_bob.h +2 -6
  91. package/src/headers/{18 → 22}/node_buffer.h +1 -1
  92. package/src/headers/22/node_builtins.h +220 -0
  93. package/src/headers/{18 → 22}/node_constants.h +3 -5
  94. package/src/headers/22/node_context_data.h +168 -0
  95. package/src/headers/22/node_contextify.h +199 -0
  96. package/src/headers/{16 → 22}/node_crypto.h +1 -2
  97. package/src/headers/22/node_dotenv.h +45 -0
  98. package/src/headers/{18 → 22}/node_errors.h +86 -27
  99. package/src/headers/22/node_exit_code.h +54 -0
  100. package/src/headers/22/node_external_reference.h +249 -0
  101. package/src/headers/{18 → 22}/node_file-inl.h +127 -30
  102. package/src/headers/{16 → 22}/node_file.h +122 -11
  103. package/src/headers/{18 → 22}/node_http2.h +28 -11
  104. package/src/headers/{16 → 22}/node_http2_state.h +34 -25
  105. package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
  106. package/src/headers/{18 → 22}/node_http_common.h +56 -55
  107. package/src/headers/{16 → 22}/node_i18n.h +5 -18
  108. package/src/headers/{18 → 22}/node_internals.h +121 -59
  109. package/src/headers/{18 → 22}/node_main_instance.h +4 -31
  110. package/src/headers/{18 → 22}/node_messaging.h +27 -10
  111. package/src/headers/{18 → 22}/node_metadata.h +23 -1
  112. package/src/headers/{18 → 22}/node_options-inl.h +24 -11
  113. package/src/headers/{18 → 22}/node_options.h +124 -39
  114. package/src/headers/{18 → 22}/node_perf.h +0 -2
  115. package/src/headers/{18 → 22}/node_perf_common.h +20 -9
  116. package/src/headers/{18 → 22}/node_platform.h +11 -5
  117. package/src/headers/{18 → 22}/node_process.h +26 -14
  118. package/src/headers/22/node_realm-inl.h +145 -0
  119. package/src/headers/22/node_realm.h +184 -0
  120. package/src/headers/{16 → 22}/node_report.h +13 -17
  121. package/src/headers/{16 → 22}/node_revert.h +3 -3
  122. package/src/headers/{16 → 22}/node_root_certs.h +902 -461
  123. package/src/headers/22/node_sea.h +64 -0
  124. package/src/headers/22/node_shadow_realm.h +46 -0
  125. package/src/headers/22/node_snapshot_builder.h +57 -0
  126. package/src/headers/22/node_snapshotable.h +174 -0
  127. package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
  128. package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
  129. package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
  130. package/src/headers/22/node_threadsafe_cow.h +105 -0
  131. package/src/headers/22/node_union_bytes.h +81 -0
  132. package/src/headers/22/node_url.h +96 -0
  133. package/src/headers/22/node_v8.h +77 -0
  134. package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
  135. package/src/headers/{18 → 22}/node_version.h +20 -8
  136. package/src/headers/22/node_wasi.h +185 -0
  137. package/src/headers/{14 → 22}/node_watchdog.h +2 -0
  138. package/src/headers/{18 → 22}/node_worker.h +7 -2
  139. package/src/headers/22/permission/child_process_permission.h +31 -0
  140. package/src/headers/22/permission/fs_permission.h +167 -0
  141. package/src/headers/22/permission/inspector_permission.h +31 -0
  142. package/src/headers/22/permission/permission.h +99 -0
  143. package/src/headers/22/permission/permission_base.h +60 -0
  144. package/src/headers/22/permission/wasi_permission.h +31 -0
  145. package/src/headers/22/permission/worker_permission.h +31 -0
  146. package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
  147. package/src/headers/{14 → 22}/spawn_sync.h +3 -3
  148. package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
  149. package/src/headers/{18 → 22}/stream_base.h +35 -16
  150. package/src/headers/{18 → 22}/stream_pipe.h +3 -4
  151. package/src/headers/{16 → 22}/stream_wrap.h +2 -1
  152. package/src/headers/{18 → 22}/string_bytes.h +5 -14
  153. package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
  154. package/src/headers/{16 → 22}/string_decoder.h +0 -1
  155. package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
  156. package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
  157. package/src/headers/22/timers.h +76 -0
  158. package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
  159. package/src/headers/{16 → 22}/udp_wrap.h +8 -5
  160. package/src/headers/22/undici_version.h +6 -0
  161. package/src/headers/{18 → 22}/util-inl.h +97 -127
  162. package/src/headers/{18 → 22}/util.h +293 -106
  163. package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
  164. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  165. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  166. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  167. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  168. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  169. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  170. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  171. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  172. package/src/headers/14/aliased_buffer.h +0 -263
  173. package/src/headers/14/allocated_buffer-inl.h +0 -110
  174. package/src/headers/14/allocated_buffer.h +0 -73
  175. package/src/headers/14/async_wrap-inl.h +0 -94
  176. package/src/headers/14/async_wrap.h +0 -230
  177. package/src/headers/14/base64.h +0 -183
  178. package/src/headers/14/base_object-inl.h +0 -371
  179. package/src/headers/14/base_object.h +0 -281
  180. package/src/headers/14/callback_queue-inl.h +0 -97
  181. package/src/headers/14/callback_queue.h +0 -78
  182. package/src/headers/14/debug_utils-inl.h +0 -223
  183. package/src/headers/14/debug_utils.h +0 -181
  184. package/src/headers/14/env.h +0 -1388
  185. package/src/headers/14/handle_wrap.h +0 -117
  186. package/src/headers/14/histogram-inl.h +0 -83
  187. package/src/headers/14/histogram.h +0 -98
  188. package/src/headers/14/inspector_agent.h +0 -149
  189. package/src/headers/14/inspector_profiler.h +0 -137
  190. package/src/headers/14/js_native_api.h +0 -544
  191. package/src/headers/14/js_native_api_types.h +0 -143
  192. package/src/headers/14/js_native_api_v8.h +0 -301
  193. package/src/headers/14/js_native_api_v8_internals.h +0 -38
  194. package/src/headers/14/json_utils.h +0 -161
  195. package/src/headers/14/memory_tracker-inl.h +0 -355
  196. package/src/headers/14/module_wrap.h +0 -99
  197. package/src/headers/14/node.h +0 -1032
  198. package/src/headers/14/node_api.h +0 -255
  199. package/src/headers/14/node_api_types.h +0 -44
  200. package/src/headers/14/node_binding.h +0 -99
  201. package/src/headers/14/node_buffer.h +0 -92
  202. package/src/headers/14/node_constants.h +0 -84
  203. package/src/headers/14/node_context_data.h +0 -44
  204. package/src/headers/14/node_contextify.h +0 -161
  205. package/src/headers/14/node_crypto.h +0 -865
  206. package/src/headers/14/node_crypto_bio.h +0 -195
  207. package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
  208. package/src/headers/14/node_crypto_clienthello.h +0 -132
  209. package/src/headers/14/node_crypto_common.h +0 -138
  210. package/src/headers/14/node_crypto_groups.h +0 -415
  211. package/src/headers/14/node_dtrace.h +0 -86
  212. package/src/headers/14/node_errors.h +0 -214
  213. package/src/headers/14/node_file-inl.h +0 -306
  214. package/src/headers/14/node_file.h +0 -417
  215. package/src/headers/14/node_http2.h +0 -1191
  216. package/src/headers/14/node_http2_state.h +0 -149
  217. package/src/headers/14/node_http_common-inl.h +0 -194
  218. package/src/headers/14/node_http_common.h +0 -529
  219. package/src/headers/14/node_i18n.h +0 -144
  220. package/src/headers/14/node_internals.h +0 -405
  221. package/src/headers/14/node_main_instance.h +0 -96
  222. package/src/headers/14/node_mem.h +0 -45
  223. package/src/headers/14/node_messaging.h +0 -303
  224. package/src/headers/14/node_metadata.h +0 -109
  225. package/src/headers/14/node_mutex.h +0 -247
  226. package/src/headers/14/node_native_module.h +0 -101
  227. package/src/headers/14/node_native_module_env.h +0 -66
  228. package/src/headers/14/node_options-inl.h +0 -451
  229. package/src/headers/14/node_options.h +0 -481
  230. package/src/headers/14/node_perf.h +0 -181
  231. package/src/headers/14/node_perf_common.h +0 -97
  232. package/src/headers/14/node_platform.h +0 -189
  233. package/src/headers/14/node_process.h +0 -40
  234. package/src/headers/14/node_report.h +0 -47
  235. package/src/headers/14/node_revert.h +0 -72
  236. package/src/headers/14/node_root_certs.h +0 -3458
  237. package/src/headers/14/node_sockaddr-inl.h +0 -170
  238. package/src/headers/14/node_sockaddr.h +0 -123
  239. package/src/headers/14/node_stat_watcher.h +0 -70
  240. package/src/headers/14/node_union_bytes.h +0 -103
  241. package/src/headers/14/node_url.h +0 -188
  242. package/src/headers/14/node_version.h +0 -98
  243. package/src/headers/14/node_wasi.h +0 -108
  244. package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
  245. package/src/headers/14/node_win32_etw_provider.h +0 -99
  246. package/src/headers/14/node_worker.h +0 -141
  247. package/src/headers/14/pipe_wrap.h +0 -78
  248. package/src/headers/14/req_wrap-inl.h +0 -170
  249. package/src/headers/14/req_wrap.h +0 -77
  250. package/src/headers/14/stream_base-inl.h +0 -275
  251. package/src/headers/14/stream_base.h +0 -434
  252. package/src/headers/14/stream_pipe.h +0 -73
  253. package/src/headers/14/stream_wrap.h +0 -130
  254. package/src/headers/14/string_bytes.h +0 -129
  255. package/src/headers/14/string_decoder.h +0 -50
  256. package/src/headers/14/string_search.h +0 -638
  257. package/src/headers/14/tcp_wrap.h +0 -101
  258. package/src/headers/14/threadpoolwork-inl.h +0 -57
  259. package/src/headers/14/tls_wrap.h +0 -222
  260. package/src/headers/14/tracing/agent.h +0 -195
  261. package/src/headers/14/tracing/trace_event.h +0 -720
  262. package/src/headers/14/tty_wrap.h +0 -64
  263. package/src/headers/14/udp_wrap.h +0 -227
  264. package/src/headers/14/util-inl.h +0 -566
  265. package/src/headers/14/util.h +0 -804
  266. package/src/headers/14/v8abbr.h +0 -124
  267. package/src/headers/16/aliased_buffer.h +0 -315
  268. package/src/headers/16/aliased_struct-inl.h +0 -54
  269. package/src/headers/16/aliased_struct.h +0 -63
  270. package/src/headers/16/allocated_buffer-inl.h +0 -110
  271. package/src/headers/16/allocated_buffer.h +0 -73
  272. package/src/headers/16/async_wrap-inl.h +0 -94
  273. package/src/headers/16/async_wrap.h +0 -246
  274. package/src/headers/16/base64-inl.h +0 -189
  275. package/src/headers/16/base64.h +0 -69
  276. package/src/headers/16/base_object.h +0 -294
  277. package/src/headers/16/connect_wrap.h +0 -26
  278. package/src/headers/16/connection_wrap.h +0 -30
  279. package/src/headers/16/crypto/crypto_aes.h +0 -89
  280. package/src/headers/16/crypto/crypto_bio.h +0 -194
  281. package/src/headers/16/crypto/crypto_cipher.h +0 -286
  282. package/src/headers/16/crypto/crypto_clienthello-inl.h +0 -90
  283. package/src/headers/16/crypto/crypto_clienthello.h +0 -131
  284. package/src/headers/16/crypto/crypto_common.h +0 -187
  285. package/src/headers/16/crypto/crypto_context.h +0 -147
  286. package/src/headers/16/crypto/crypto_dh.h +0 -157
  287. package/src/headers/16/crypto/crypto_dsa.h +0 -76
  288. package/src/headers/16/crypto/crypto_ec.h +0 -169
  289. package/src/headers/16/crypto/crypto_groups.h +0 -415
  290. package/src/headers/16/crypto/crypto_hash.h +0 -89
  291. package/src/headers/16/crypto/crypto_hkdf.h +0 -66
  292. package/src/headers/16/crypto/crypto_hmac.h +0 -94
  293. package/src/headers/16/crypto/crypto_keygen.h +0 -301
  294. package/src/headers/16/crypto/crypto_keys.h +0 -412
  295. package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
  296. package/src/headers/16/crypto/crypto_random.h +0 -130
  297. package/src/headers/16/crypto/crypto_rsa.h +0 -141
  298. package/src/headers/16/crypto/crypto_scrypt.h +0 -87
  299. package/src/headers/16/crypto/crypto_sig.h +0 -167
  300. package/src/headers/16/crypto/crypto_spkac.h +0 -20
  301. package/src/headers/16/crypto/crypto_timing.h +0 -20
  302. package/src/headers/16/crypto/crypto_tls.h +0 -292
  303. package/src/headers/16/crypto/crypto_util.h +0 -736
  304. package/src/headers/16/crypto/crypto_x509.h +0 -141
  305. package/src/headers/16/debug_utils.h +0 -184
  306. package/src/headers/16/diagnosticfilename-inl.h +0 -33
  307. package/src/headers/16/env-inl.h +0 -1277
  308. package/src/headers/16/env.h +0 -1629
  309. package/src/headers/16/handle_wrap.h +0 -121
  310. package/src/headers/16/histogram-inl.h +0 -88
  311. package/src/headers/16/histogram.h +0 -216
  312. package/src/headers/16/inspector_io.h +0 -78
  313. package/src/headers/16/inspector_socket.h +0 -60
  314. package/src/headers/16/inspector_socket_server.h +0 -110
  315. package/src/headers/16/js_native_api.h +0 -561
  316. package/src/headers/16/js_native_api_types.h +0 -160
  317. package/src/headers/16/js_native_api_v8.h +0 -451
  318. package/src/headers/16/js_native_api_v8_internals.h +0 -39
  319. package/src/headers/16/js_stream.h +0 -52
  320. package/src/headers/16/memory_tracker-inl.h +0 -356
  321. package/src/headers/16/memory_tracker.h +0 -284
  322. package/src/headers/16/node.d +0 -315
  323. package/src/headers/16/node.h +0 -1132
  324. package/src/headers/16/node.stp +0 -146
  325. package/src/headers/16/node_api.h +0 -275
  326. package/src/headers/16/node_api_internals.h +0 -30
  327. package/src/headers/16/node_api_types.h +0 -50
  328. package/src/headers/16/node_binding.h +0 -99
  329. package/src/headers/16/node_blob.h +0 -191
  330. package/src/headers/16/node_bob-inl.h +0 -37
  331. package/src/headers/16/node_bob.h +0 -111
  332. package/src/headers/16/node_buffer.h +0 -92
  333. package/src/headers/16/node_constants.h +0 -84
  334. package/src/headers/16/node_context_data.h +0 -44
  335. package/src/headers/16/node_contextify.h +0 -196
  336. package/src/headers/16/node_dir.h +0 -52
  337. package/src/headers/16/node_dtrace.h +0 -86
  338. package/src/headers/16/node_errors.h +0 -277
  339. package/src/headers/16/node_external_reference.h +0 -129
  340. package/src/headers/16/node_file-inl.h +0 -306
  341. package/src/headers/16/node_http2.h +0 -1140
  342. package/src/headers/16/node_http_common-inl.h +0 -200
  343. package/src/headers/16/node_http_common.h +0 -531
  344. package/src/headers/16/node_internals.h +0 -421
  345. package/src/headers/16/node_main_instance.h +0 -103
  346. package/src/headers/16/node_mem-inl.h +0 -112
  347. package/src/headers/16/node_messaging.h +0 -373
  348. package/src/headers/16/node_metadata.h +0 -122
  349. package/src/headers/16/node_native_module.h +0 -101
  350. package/src/headers/16/node_native_module_env.h +0 -68
  351. package/src/headers/16/node_object_wrap.h +0 -132
  352. package/src/headers/16/node_options-inl.h +0 -477
  353. package/src/headers/16/node_options.h +0 -494
  354. package/src/headers/16/node_perf.h +0 -185
  355. package/src/headers/16/node_perf_common.h +0 -89
  356. package/src/headers/16/node_platform.h +0 -192
  357. package/src/headers/16/node_process.h +0 -43
  358. package/src/headers/16/node_provider.d +0 -80
  359. package/src/headers/16/node_snapshotable.h +0 -137
  360. package/src/headers/16/node_sockaddr-inl.h +0 -266
  361. package/src/headers/16/node_sockaddr.h +0 -405
  362. package/src/headers/16/node_union_bytes.h +0 -103
  363. package/src/headers/16/node_url.h +0 -205
  364. package/src/headers/16/node_v8.h +0 -41
  365. package/src/headers/16/node_v8_platform-inl.h +0 -194
  366. package/src/headers/16/node_version.h +0 -98
  367. package/src/headers/16/node_wasi.h +0 -108
  368. package/src/headers/16/node_watchdog.h +0 -152
  369. package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
  370. package/src/headers/16/node_win32_etw_provider.h +0 -99
  371. package/src/headers/16/node_worker.h +0 -145
  372. package/src/headers/16/req_wrap.h +0 -77
  373. package/src/headers/16/spawn_sync.h +0 -242
  374. package/src/headers/16/stream_base-inl.h +0 -303
  375. package/src/headers/16/stream_base.h +0 -454
  376. package/src/headers/16/stream_pipe.h +0 -73
  377. package/src/headers/16/string_bytes.h +0 -122
  378. package/src/headers/16/string_decoder-inl.h +0 -37
  379. package/src/headers/16/string_search.h +0 -638
  380. package/src/headers/16/tcp_wrap.h +0 -103
  381. package/src/headers/16/threadpoolwork-inl.h +0 -57
  382. package/src/headers/16/timer_wrap.h +0 -84
  383. package/src/headers/16/tracing/agent.h +0 -195
  384. package/src/headers/16/tracing/node_trace_buffer.h +0 -83
  385. package/src/headers/16/tracing/node_trace_writer.h +0 -75
  386. package/src/headers/16/tracing/trace_event.h +0 -720
  387. package/src/headers/16/tracing/trace_event_common.h +0 -1109
  388. package/src/headers/16/tracing/traced_value.h +0 -70
  389. package/src/headers/16/tty_wrap.h +0 -66
  390. package/src/headers/16/util-inl.h +0 -575
  391. package/src/headers/16/util.h +0 -824
  392. package/src/headers/16/v8abbr.h +0 -123
  393. package/src/headers/16/v8ustack.d +0 -695
  394. package/src/headers/18/aliased_buffer.h +0 -315
  395. package/src/headers/18/aliased_struct-inl.h +0 -54
  396. package/src/headers/18/aliased_struct.h +0 -63
  397. package/src/headers/18/base64-inl.h +0 -189
  398. package/src/headers/18/base64.h +0 -69
  399. package/src/headers/18/base_object-inl.h +0 -374
  400. package/src/headers/18/callback_queue-inl.h +0 -97
  401. package/src/headers/18/callback_queue.h +0 -78
  402. package/src/headers/18/cares_wrap.h +0 -523
  403. package/src/headers/18/connect_wrap.h +0 -26
  404. package/src/headers/18/connection_wrap.h +0 -30
  405. package/src/headers/18/crypto/crypto_aes.h +0 -89
  406. package/src/headers/18/crypto/crypto_bio.h +0 -194
  407. package/src/headers/18/crypto/crypto_cipher.h +0 -291
  408. package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
  409. package/src/headers/18/crypto/crypto_common.h +0 -151
  410. package/src/headers/18/crypto/crypto_dh.h +0 -156
  411. package/src/headers/18/crypto/crypto_dsa.h +0 -77
  412. package/src/headers/18/crypto/crypto_ec.h +0 -170
  413. package/src/headers/18/crypto/crypto_groups.h +0 -415
  414. package/src/headers/18/crypto/crypto_hash.h +0 -89
  415. package/src/headers/18/crypto/crypto_hkdf.h +0 -65
  416. package/src/headers/18/crypto/crypto_hmac.h +0 -94
  417. package/src/headers/18/crypto/crypto_keygen.h +0 -305
  418. package/src/headers/18/crypto/crypto_pbkdf2.h +0 -76
  419. package/src/headers/18/crypto/crypto_random.h +0 -130
  420. package/src/headers/18/crypto/crypto_rsa.h +0 -141
  421. package/src/headers/18/crypto/crypto_scrypt.h +0 -87
  422. package/src/headers/18/crypto/crypto_sig.h +0 -168
  423. package/src/headers/18/crypto/crypto_spkac.h +0 -21
  424. package/src/headers/18/crypto/crypto_timing.h +0 -20
  425. package/src/headers/18/crypto/crypto_x509.h +0 -143
  426. package/src/headers/18/debug_utils-inl.h +0 -223
  427. package/src/headers/18/diagnosticfilename-inl.h +0 -33
  428. package/src/headers/18/env-inl.h +0 -1308
  429. package/src/headers/18/env.h +0 -1667
  430. package/src/headers/18/inspector_agent.h +0 -144
  431. package/src/headers/18/inspector_io.h +0 -78
  432. package/src/headers/18/inspector_profiler.h +0 -149
  433. package/src/headers/18/inspector_socket.h +0 -60
  434. package/src/headers/18/inspector_socket_server.h +0 -110
  435. package/src/headers/18/js_stream.h +0 -52
  436. package/src/headers/18/json_utils.h +0 -161
  437. package/src/headers/18/memory_tracker.h +0 -284
  438. package/src/headers/18/module_wrap.h +0 -116
  439. package/src/headers/18/node_binding.h +0 -99
  440. package/src/headers/18/node_context_data.h +0 -44
  441. package/src/headers/18/node_contextify.h +0 -196
  442. package/src/headers/18/node_crypto.h +0 -57
  443. package/src/headers/18/node_dir.h +0 -52
  444. package/src/headers/18/node_dtrace.h +0 -86
  445. package/src/headers/18/node_external_reference.h +0 -145
  446. package/src/headers/18/node_file.h +0 -426
  447. package/src/headers/18/node_http2_state.h +0 -149
  448. package/src/headers/18/node_i18n.h +0 -145
  449. package/src/headers/18/node_mem-inl.h +0 -112
  450. package/src/headers/18/node_mem.h +0 -45
  451. package/src/headers/18/node_mutex.h +0 -323
  452. package/src/headers/18/node_native_module.h +0 -109
  453. package/src/headers/18/node_native_module_env.h +0 -71
  454. package/src/headers/18/node_object_wrap.h +0 -132
  455. package/src/headers/18/node_process-inl.h +0 -26
  456. package/src/headers/18/node_report.h +0 -47
  457. package/src/headers/18/node_revert.h +0 -82
  458. package/src/headers/18/node_root_certs.h +0 -3246
  459. package/src/headers/18/node_snapshot_builder.h +0 -43
  460. package/src/headers/18/node_snapshotable.h +0 -130
  461. package/src/headers/18/node_stat_watcher.h +0 -72
  462. package/src/headers/18/node_union_bytes.h +0 -103
  463. package/src/headers/18/node_url.h +0 -205
  464. package/src/headers/18/node_v8.h +0 -41
  465. package/src/headers/18/node_v8_platform-inl.h +0 -194
  466. package/src/headers/18/node_wasi.h +0 -108
  467. package/src/headers/18/node_watchdog.h +0 -152
  468. package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
  469. package/src/headers/18/node_win32_etw_provider.h +0 -99
  470. package/src/headers/18/pipe_wrap.h +0 -80
  471. package/src/headers/18/req_wrap-inl.h +0 -170
  472. package/src/headers/18/spawn_sync.h +0 -242
  473. package/src/headers/18/stream_wrap.h +0 -133
  474. package/src/headers/18/string_decoder-inl.h +0 -37
  475. package/src/headers/18/string_decoder.h +0 -50
  476. package/src/headers/18/string_search.h +0 -638
  477. package/src/headers/18/tracing/node_trace_buffer.h +0 -83
  478. package/src/headers/18/tracing/node_trace_writer.h +0 -75
  479. package/src/headers/18/tracing/trace_event_common.h +0 -1109
  480. package/src/headers/18/tracing/traced_value.h +0 -70
  481. package/src/headers/18/udp_wrap.h +0 -227
  482. package/src/headers/18/v8abbr.h +0 -123
  483. /package/src/headers/{14 → 20}/tracing/node_trace_buffer.h +0 -0
  484. /package/src/headers/{14 → 20}/tracing/node_trace_writer.h +0 -0
  485. /package/src/headers/{14 → 20}/tracing/traced_value.h +0 -0
  486. /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
  487. /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
  488. /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
  489. /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
  490. /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
  491. /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
  492. /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
  493. /package/src/headers/{14 → 22}/inspector_io.h +0 -0
  494. /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
  495. /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
  496. /package/src/headers/{14 → 22}/js_stream.h +0 -0
  497. /package/src/headers/{14 → 22}/node_dir.h +0 -0
  498. /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
  499. /package/src/headers/{16 → 22}/node_mem.h +0 -0
  500. /package/src/headers/{16 → 22}/node_mutex.h +0 -0
  501. /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
  502. /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
  503. /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
  504. /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
  505. /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
  506. /package/src/headers/{18 → 22}/req_wrap.h +0 -0
  507. /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
  508. /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
  509. /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
  510. /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
  511. /package/src/headers/{18 → 22}/tty_wrap.h +0 -0
@@ -1,736 +0,0 @@
1
- #ifndef SRC_CRYPTO_CRYPTO_UTIL_H_
2
- #define SRC_CRYPTO_CRYPTO_UTIL_H_
3
-
4
- #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
-
6
- #include "env.h"
7
- #include "async_wrap.h"
8
- #include "allocated_buffer.h"
9
- #include "node_errors.h"
10
- #include "node_internals.h"
11
- #include "util.h"
12
- #include "v8.h"
13
- #include "string_bytes.h"
14
-
15
- #include <openssl/err.h>
16
- #include <openssl/evp.h>
17
- #include <openssl/ec.h>
18
- #include <openssl/kdf.h>
19
- #include <openssl/rsa.h>
20
- #include <openssl/dsa.h>
21
- #include <openssl/ssl.h>
22
- #ifndef OPENSSL_NO_ENGINE
23
- # include <openssl/engine.h>
24
- #endif // !OPENSSL_NO_ENGINE
25
- // The FIPS-related functions are only available
26
- // when the OpenSSL itself was compiled with FIPS support.
27
- #if defined(OPENSSL_FIPS) && OPENSSL_VERSION_MAJOR < 3
28
- # include <openssl/fips.h>
29
- #endif // OPENSSL_FIPS
30
-
31
- #include <algorithm>
32
- #include <memory>
33
- #include <string>
34
- #include <vector>
35
- #include <climits>
36
- #include <cstdio>
37
-
38
- namespace node {
39
- namespace crypto {
40
- // Currently known sizes of commonly used OpenSSL struct sizes.
41
- // OpenSSL considers it's various structs to be opaque and the
42
- // sizes may change from one version of OpenSSL to another, so
43
- // these values should not be trusted to remain static. These
44
- // are provided to allow for some close to reasonable memory
45
- // tracking.
46
- constexpr size_t kSizeOf_DH = 144;
47
- constexpr size_t kSizeOf_EC_KEY = 80;
48
- constexpr size_t kSizeOf_EVP_CIPHER_CTX = 168;
49
- constexpr size_t kSizeOf_EVP_MD_CTX = 48;
50
- constexpr size_t kSizeOf_EVP_PKEY = 72;
51
- constexpr size_t kSizeOf_EVP_PKEY_CTX = 80;
52
- constexpr size_t kSizeOf_HMAC_CTX = 32;
53
-
54
- // 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);
88
-
89
- bool ProcessFipsOptions();
90
-
91
- void InitCryptoOnce();
92
-
93
- void InitCrypto(v8::Local<v8::Object> target);
94
-
95
- extern void UseExtraCaCerts(const std::string& file);
96
-
97
- // Forcibly clear OpenSSL's error stack on return. This stops stale errors
98
- // from popping up later in the lifecycle of crypto operations where they
99
- // would cause spurious failures. It's a rather blunt method, though.
100
- // ERR_clear_error() isn't necessarily cheap either.
101
- struct ClearErrorOnReturn {
102
- ~ClearErrorOnReturn() { ERR_clear_error(); }
103
- };
104
-
105
- // Pop errors from OpenSSL's error stack that were added
106
- // between when this was constructed and destructed.
107
- struct MarkPopErrorOnReturn {
108
- MarkPopErrorOnReturn() { ERR_set_mark(); }
109
- ~MarkPopErrorOnReturn() { ERR_pop_to_mark(); }
110
- };
111
-
112
- // Ensure that OpenSSL has enough entropy (at least 256 bits) for its PRNG.
113
- // The entropy pool starts out empty and needs to fill up before the PRNG
114
- // can be used securely. Once the pool is filled, it never dries up again;
115
- // its contents is stirred and reused when necessary.
116
- //
117
- // OpenSSL normally fills the pool automatically but not when someone starts
118
- // generating random numbers before the pool is full: in that case OpenSSL
119
- // keeps lowering the entropy estimate to thwart attackers trying to guess
120
- // the initial state of the PRNG.
121
- //
122
- // When that happens, we will have to wait until enough entropy is available.
123
- // That should normally never take longer than a few milliseconds.
124
- //
125
- // OpenSSL draws from /dev/random and /dev/urandom. While /dev/random may
126
- // block pending "true" randomness, /dev/urandom is a CSPRNG that doesn't
127
- // block under normal circumstances.
128
- //
129
- // The only time when /dev/urandom may conceivably block is right after boot,
130
- // when the whole system is still low on entropy. That's not something we can
131
- // do anything about.
132
- void CheckEntropy();
133
-
134
- // Generate length bytes of random data. If this returns false, the data
135
- // may not be truly random but it's still generally good enough.
136
- bool EntropySource(unsigned char* buffer, size_t length);
137
-
138
- int PasswordCallback(char* buf, int size, int rwflag, void* u);
139
-
140
- int NoPasswordCallback(char* buf, int size, int rwflag, void* u);
141
-
142
- // Decode is used by the various stream-based crypto utilities to decode
143
- // string input.
144
- template <typename T>
145
- void Decode(const v8::FunctionCallbackInfo<v8::Value>& args,
146
- void (*callback)(T*, const v8::FunctionCallbackInfo<v8::Value>&,
147
- const char*, size_t)) {
148
- T* ctx;
149
- ASSIGN_OR_RETURN_UNWRAP(&ctx, args.Holder());
150
-
151
- if (args[0]->IsString()) {
152
- StringBytes::InlineDecoder decoder;
153
- Environment* env = Environment::GetCurrent(args);
154
- enum encoding enc = ParseEncoding(env->isolate(), args[1], UTF8);
155
- if (decoder.Decode(env, args[0].As<v8::String>(), enc).IsNothing())
156
- return;
157
- callback(ctx, args, decoder.out(), decoder.size());
158
- } else {
159
- ArrayBufferViewContents<char> buf(args[0]);
160
- callback(ctx, args, buf.data(), buf.length());
161
- }
162
- }
163
-
164
- #define NODE_CRYPTO_ERROR_CODES_MAP(V) \
165
- V(CIPHER_JOB_FAILED, "Cipher job failed") \
166
- V(DERIVING_BITS_FAILED, "Deriving bits failed") \
167
- V(ENGINE_NOT_FOUND, "Engine \"%s\" was not found") \
168
- V(INVALID_KEY_TYPE, "Invalid key type") \
169
- V(KEY_GENERATION_JOB_FAILED, "Key generation job failed") \
170
- V(OK, "Ok") \
171
-
172
- enum class NodeCryptoError {
173
- #define V(CODE, DESCRIPTION) CODE,
174
- NODE_CRYPTO_ERROR_CODES_MAP(V)
175
- #undef V
176
- };
177
-
178
- // Utility struct used to harvest error information from openssl's error stack
179
- struct CryptoErrorStore final : public MemoryRetainer {
180
- public:
181
- void Capture();
182
-
183
- bool Empty() const;
184
-
185
- template <typename... Args>
186
- void Insert(const NodeCryptoError error, Args&&... args);
187
-
188
- v8::MaybeLocal<v8::Value> ToException(
189
- Environment* env,
190
- v8::Local<v8::String> exception_string = v8::Local<v8::String>()) const;
191
-
192
- SET_NO_MEMORY_INFO()
193
- SET_MEMORY_INFO_NAME(CryptoErrorStore)
194
- SET_SELF_SIZE(CryptoErrorStore)
195
-
196
- private:
197
- std::vector<std::string> errors_;
198
- };
199
-
200
- template <typename... Args>
201
- void CryptoErrorStore::Insert(const NodeCryptoError error, Args&&... args) {
202
- const char* error_string = nullptr;
203
- switch (error) {
204
- #define V(CODE, DESCRIPTION) \
205
- case NodeCryptoError::CODE: error_string = DESCRIPTION; break;
206
- NODE_CRYPTO_ERROR_CODES_MAP(V)
207
- #undef V
208
- }
209
- errors_.emplace_back(SPrintF(error_string,
210
- std::forward<Args>(args)...));
211
- }
212
-
213
- template <typename T>
214
- T* MallocOpenSSL(size_t count) {
215
- void* mem = OPENSSL_malloc(MultiplyWithOverflowCheck(count, sizeof(T)));
216
- CHECK_IMPLIES(mem == nullptr, count == 0);
217
- return static_cast<T*>(mem);
218
- }
219
-
220
- template <typename T>
221
- T* ReallocOpenSSL(T* buf, size_t count) {
222
- void* mem = OPENSSL_realloc(buf, MultiplyWithOverflowCheck(count, sizeof(T)));
223
- CHECK_IMPLIES(mem == nullptr, count == 0);
224
- return static_cast<T*>(mem);
225
- }
226
-
227
- // A helper class representing a read-only byte array. When deallocated, its
228
- // contents are zeroed.
229
- class ByteSource {
230
- public:
231
- ByteSource() = default;
232
- ByteSource(ByteSource&& other) noexcept;
233
- ~ByteSource();
234
-
235
- ByteSource& operator=(ByteSource&& other) noexcept;
236
-
237
- const char* get() const;
238
-
239
- template <typename T>
240
- const T* data() const { return reinterpret_cast<const T*>(get()); }
241
-
242
- size_t size() const;
243
-
244
- operator bool() const { return data_ != nullptr; }
245
-
246
- BignumPointer ToBN() const {
247
- return BignumPointer(BN_bin2bn(
248
- reinterpret_cast<const unsigned char*>(get()),
249
- size(),
250
- nullptr));
251
- }
252
-
253
- // Creates a v8::BackingStore that takes over responsibility for
254
- // any allocated data. The ByteSource will be reset with size = 0
255
- // after being called.
256
- std::unique_ptr<v8::BackingStore> ReleaseToBackingStore();
257
-
258
- v8::Local<v8::ArrayBuffer> ToArrayBuffer(Environment* env);
259
-
260
- void reset();
261
-
262
- // Allows an Allocated ByteSource to be truncated.
263
- void Resize(size_t newsize) {
264
- CHECK_LE(newsize, size_);
265
- CHECK_NOT_NULL(allocated_data_);
266
- char* new_data_ = ReallocOpenSSL<char>(allocated_data_, newsize);
267
- data_ = allocated_data_ = new_data_;
268
- size_ = newsize;
269
- }
270
-
271
- static ByteSource Allocated(char* data, size_t size);
272
- static ByteSource Foreign(const char* data, size_t size);
273
-
274
- static ByteSource FromEncodedString(Environment* env,
275
- v8::Local<v8::String> value,
276
- enum encoding enc = BASE64);
277
-
278
- static ByteSource FromStringOrBuffer(Environment* env,
279
- v8::Local<v8::Value> value);
280
-
281
- static ByteSource FromString(Environment* env,
282
- v8::Local<v8::String> str,
283
- bool ntc = false);
284
-
285
- static ByteSource FromBuffer(v8::Local<v8::Value> buffer,
286
- bool ntc = false);
287
-
288
- static ByteSource FromBIO(const BIOPointer& bio);
289
-
290
- static ByteSource NullTerminatedCopy(Environment* env,
291
- v8::Local<v8::Value> value);
292
-
293
- static ByteSource FromSymmetricKeyObjectHandle(v8::Local<v8::Value> handle);
294
-
295
- ByteSource(const ByteSource&) = delete;
296
- ByteSource& operator=(const ByteSource&) = delete;
297
-
298
- static ByteSource FromSecretKeyBytes(
299
- Environment* env, v8::Local<v8::Value> value);
300
-
301
- private:
302
- const char* data_ = nullptr;
303
- char* allocated_data_ = nullptr;
304
- size_t size_ = 0;
305
-
306
- ByteSource(const char* data, char* allocated_data, size_t size);
307
- };
308
-
309
- enum CryptoJobMode {
310
- kCryptoJobAsync,
311
- kCryptoJobSync
312
- };
313
-
314
- CryptoJobMode GetCryptoJobMode(v8::Local<v8::Value> args);
315
-
316
- template <typename CryptoJobTraits>
317
- class CryptoJob : public AsyncWrap, public ThreadPoolWork {
318
- public:
319
- using AdditionalParams = typename CryptoJobTraits::AdditionalParameters;
320
-
321
- explicit CryptoJob(
322
- Environment* env,
323
- v8::Local<v8::Object> object,
324
- AsyncWrap::ProviderType type,
325
- CryptoJobMode mode,
326
- AdditionalParams&& params)
327
- : AsyncWrap(env, object, type),
328
- ThreadPoolWork(env),
329
- mode_(mode),
330
- params_(std::move(params)) {
331
- // If the CryptoJob is async, then the instance will be
332
- // cleaned up when AfterThreadPoolWork is called.
333
- if (mode == kCryptoJobSync) MakeWeak();
334
- }
335
-
336
- bool IsNotIndicativeOfMemoryLeakAtExit() const override {
337
- // CryptoJobs run a work in the libuv thread pool and may still
338
- // exist when the event loop empties and starts to exit.
339
- return true;
340
- }
341
-
342
- void AfterThreadPoolWork(int status) override {
343
- Environment* env = AsyncWrap::env();
344
- CHECK_EQ(mode_, kCryptoJobAsync);
345
- CHECK(status == 0 || status == UV_ECANCELED);
346
- std::unique_ptr<CryptoJob> ptr(this);
347
- // If the job was canceled do not execute the callback.
348
- // TODO(@jasnell): We should likely revisit skipping the
349
- // callback on cancel as that could leave the JS in a pending
350
- // state (e.g. unresolved promises...)
351
- if (status == UV_ECANCELED) return;
352
- v8::HandleScope handle_scope(env->isolate());
353
- v8::Context::Scope context_scope(env->context());
354
-
355
- // TODO(tniessen): Remove the exception handling logic here as soon as we
356
- // can verify that no code path in ToResult will ever throw an exception.
357
- v8::Local<v8::Value> exception;
358
- v8::Local<v8::Value> args[2];
359
- {
360
- node::errors::TryCatchScope try_catch(env);
361
- v8::Maybe<bool> ret = ptr->ToResult(&args[0], &args[1]);
362
- if (!ret.IsJust()) {
363
- CHECK(try_catch.HasCaught());
364
- exception = try_catch.Exception();
365
- } else if (!ret.FromJust()) {
366
- return;
367
- }
368
- }
369
-
370
- if (exception.IsEmpty()) {
371
- ptr->MakeCallback(env->ondone_string(), arraysize(args), args);
372
- } else {
373
- ptr->MakeCallback(env->ondone_string(), 1, &exception);
374
- }
375
- }
376
-
377
- virtual v8::Maybe<bool> ToResult(
378
- v8::Local<v8::Value>* err,
379
- v8::Local<v8::Value>* result) = 0;
380
-
381
- CryptoJobMode mode() const { return mode_; }
382
-
383
- CryptoErrorStore* errors() { return &errors_; }
384
-
385
- AdditionalParams* params() { return &params_; }
386
-
387
- std::string MemoryInfoName() const override {
388
- return CryptoJobTraits::JobName;
389
- }
390
-
391
- void MemoryInfo(MemoryTracker* tracker) const override {
392
- tracker->TrackField("params", params_);
393
- tracker->TrackField("errors", errors_);
394
- }
395
-
396
- static void Run(const v8::FunctionCallbackInfo<v8::Value>& args) {
397
- Environment* env = Environment::GetCurrent(args);
398
-
399
- CryptoJob<CryptoJobTraits>* job;
400
- ASSIGN_OR_RETURN_UNWRAP(&job, args.Holder());
401
- if (job->mode() == kCryptoJobAsync)
402
- return job->ScheduleWork();
403
-
404
- v8::Local<v8::Value> ret[2];
405
- env->PrintSyncTrace();
406
- job->DoThreadPoolWork();
407
- v8::Maybe<bool> result = job->ToResult(&ret[0], &ret[1]);
408
- if (result.IsJust() && result.FromJust()) {
409
- args.GetReturnValue().Set(
410
- v8::Array::New(env->isolate(), ret, arraysize(ret)));
411
- }
412
- }
413
-
414
- static void Initialize(
415
- v8::FunctionCallback new_fn,
416
- Environment* env,
417
- v8::Local<v8::Object> target) {
418
- v8::Local<v8::FunctionTemplate> job = env->NewFunctionTemplate(new_fn);
419
- job->Inherit(AsyncWrap::GetConstructorTemplate(env));
420
- job->InstanceTemplate()->SetInternalFieldCount(
421
- AsyncWrap::kInternalFieldCount);
422
- env->SetProtoMethod(job, "run", Run);
423
- env->SetConstructorFunction(target, CryptoJobTraits::JobName, job);
424
- }
425
-
426
- private:
427
- const CryptoJobMode mode_;
428
- CryptoErrorStore errors_;
429
- AdditionalParams params_;
430
- };
431
-
432
- template <typename DeriveBitsTraits>
433
- class DeriveBitsJob final : public CryptoJob<DeriveBitsTraits> {
434
- public:
435
- using AdditionalParams = typename DeriveBitsTraits::AdditionalParameters;
436
-
437
- static void New(const v8::FunctionCallbackInfo<v8::Value>& args) {
438
- Environment* env = Environment::GetCurrent(args);
439
-
440
- CryptoJobMode mode = GetCryptoJobMode(args[0]);
441
-
442
- AdditionalParams params;
443
- if (DeriveBitsTraits::AdditionalConfig(mode, args, 1, &params)
444
- .IsNothing()) {
445
- // The DeriveBitsTraits::AdditionalConfig is responsible for
446
- // calling an appropriate THROW_CRYPTO_* variant reporting
447
- // whatever error caused initialization to fail.
448
- return;
449
- }
450
-
451
- new DeriveBitsJob(env, args.This(), mode, std::move(params));
452
- }
453
-
454
- static void Initialize(
455
- Environment* env,
456
- v8::Local<v8::Object> target) {
457
- CryptoJob<DeriveBitsTraits>::Initialize(New, env, target);
458
- }
459
-
460
- DeriveBitsJob(
461
- Environment* env,
462
- v8::Local<v8::Object> object,
463
- CryptoJobMode mode,
464
- AdditionalParams&& params)
465
- : CryptoJob<DeriveBitsTraits>(
466
- env,
467
- object,
468
- DeriveBitsTraits::Provider,
469
- mode,
470
- std::move(params)) {}
471
-
472
- void DoThreadPoolWork() override {
473
- if (!DeriveBitsTraits::DeriveBits(
474
- AsyncWrap::env(),
475
- *CryptoJob<DeriveBitsTraits>::params(), &out_)) {
476
- CryptoErrorStore* errors = CryptoJob<DeriveBitsTraits>::errors();
477
- errors->Capture();
478
- if (errors->Empty())
479
- errors->Insert(NodeCryptoError::DERIVING_BITS_FAILED);
480
- return;
481
- }
482
- success_ = true;
483
- }
484
-
485
- v8::Maybe<bool> ToResult(
486
- v8::Local<v8::Value>* err,
487
- v8::Local<v8::Value>* result) override {
488
- Environment* env = AsyncWrap::env();
489
- CryptoErrorStore* errors = CryptoJob<DeriveBitsTraits>::errors();
490
- if (success_) {
491
- CHECK(errors->Empty());
492
- *err = v8::Undefined(env->isolate());
493
- return DeriveBitsTraits::EncodeOutput(
494
- env,
495
- *CryptoJob<DeriveBitsTraits>::params(),
496
- &out_,
497
- result);
498
- }
499
-
500
- if (errors->Empty())
501
- errors->Capture();
502
- CHECK(!errors->Empty());
503
- *result = v8::Undefined(env->isolate());
504
- return v8::Just(errors->ToException(env).ToLocal(err));
505
- }
506
-
507
- SET_SELF_SIZE(DeriveBitsJob)
508
- void MemoryInfo(MemoryTracker* tracker) const override {
509
- tracker->TrackFieldWithSize("out", out_.size());
510
- CryptoJob<DeriveBitsTraits>::MemoryInfo(tracker);
511
- }
512
-
513
- private:
514
- ByteSource out_;
515
- bool success_ = false;
516
- };
517
-
518
- void ThrowCryptoError(Environment* env,
519
- unsigned long err, // NOLINT(runtime/int)
520
- const char* message = nullptr);
521
-
522
- #ifndef OPENSSL_NO_ENGINE
523
- struct EnginePointer {
524
- ENGINE* engine = nullptr;
525
- bool finish_on_exit = false;
526
-
527
- inline EnginePointer() = default;
528
-
529
- inline explicit EnginePointer(ENGINE* engine_, bool finish_on_exit_ = false)
530
- : engine(engine_),
531
- finish_on_exit(finish_on_exit_) {}
532
-
533
- inline EnginePointer(EnginePointer&& other) noexcept
534
- : engine(other.engine),
535
- finish_on_exit(other.finish_on_exit) {
536
- other.release();
537
- }
538
-
539
- inline ~EnginePointer() { reset(); }
540
-
541
- inline EnginePointer& operator=(EnginePointer&& other) noexcept {
542
- if (this == &other) return *this;
543
- this->~EnginePointer();
544
- return *new (this) EnginePointer(std::move(other));
545
- }
546
-
547
- inline operator bool() const { return engine != nullptr; }
548
-
549
- inline ENGINE* get() { return engine; }
550
-
551
- inline void reset(ENGINE* engine_ = nullptr, bool finish_on_exit_ = false) {
552
- if (engine != nullptr) {
553
- if (finish_on_exit)
554
- ENGINE_finish(engine);
555
- ENGINE_free(engine);
556
- }
557
- engine = engine_;
558
- finish_on_exit = finish_on_exit_;
559
- }
560
-
561
- inline ENGINE* release() {
562
- ENGINE* ret = engine;
563
- engine = nullptr;
564
- finish_on_exit = false;
565
- return ret;
566
- }
567
- };
568
-
569
- EnginePointer LoadEngineById(const char* id, CryptoErrorStore* errors);
570
-
571
- bool SetEngine(
572
- const char* id,
573
- uint32_t flags,
574
- CryptoErrorStore* errors = nullptr);
575
-
576
- void SetEngine(const v8::FunctionCallbackInfo<v8::Value>& args);
577
- #endif // !OPENSSL_NO_ENGINE
578
-
579
- void GetFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
580
-
581
- void SetFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
582
-
583
- void TestFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
584
-
585
- class CipherPushContext {
586
- public:
587
- inline explicit CipherPushContext(Environment* env) : env_(env) {}
588
-
589
- inline void push_back(const char* str) {
590
- list_.emplace_back(OneByteString(env_->isolate(), str));
591
- }
592
-
593
- inline v8::Local<v8::Array> ToJSArray() {
594
- return v8::Array::New(env_->isolate(), list_.data(), list_.size());
595
- }
596
-
597
- private:
598
- std::vector<v8::Local<v8::Value>> list_;
599
- Environment* env_;
600
- };
601
-
602
- template <class TypeName>
603
- void array_push_back(const TypeName* md,
604
- const char* from,
605
- const char* to,
606
- void* arg) {
607
- static_cast<CipherPushContext*>(arg)->push_back(from);
608
- }
609
-
610
- inline bool IsAnyByteSource(v8::Local<v8::Value> arg) {
611
- return arg->IsArrayBufferView() ||
612
- arg->IsArrayBuffer() ||
613
- arg->IsSharedArrayBuffer();
614
- }
615
-
616
- template <typename T>
617
- class ArrayBufferOrViewContents {
618
- public:
619
- ArrayBufferOrViewContents() = default;
620
-
621
- inline explicit ArrayBufferOrViewContents(v8::Local<v8::Value> buf) {
622
- CHECK(IsAnyByteSource(buf));
623
- if (buf->IsArrayBufferView()) {
624
- auto view = buf.As<v8::ArrayBufferView>();
625
- offset_ = view->ByteOffset();
626
- length_ = view->ByteLength();
627
- store_ = view->Buffer()->GetBackingStore();
628
- } else if (buf->IsArrayBuffer()) {
629
- auto ab = buf.As<v8::ArrayBuffer>();
630
- offset_ = 0;
631
- length_ = ab->ByteLength();
632
- store_ = ab->GetBackingStore();
633
- } else {
634
- auto sab = buf.As<v8::SharedArrayBuffer>();
635
- offset_ = 0;
636
- length_ = sab->ByteLength();
637
- store_ = sab->GetBackingStore();
638
- }
639
- }
640
-
641
- inline const T* data() const {
642
- // Ideally, these would return nullptr if IsEmpty() or length_ is zero,
643
- // but some of the openssl API react badly if given a nullptr even when
644
- // length is zero, so we have to return something.
645
- if (size() == 0)
646
- return &buf;
647
- return reinterpret_cast<T*>(store_->Data()) + offset_;
648
- }
649
-
650
- inline T* data() {
651
- // Ideally, these would return nullptr if IsEmpty() or length_ is zero,
652
- // but some of the openssl API react badly if given a nullptr even when
653
- // length is zero, so we have to return something.
654
- if (size() == 0)
655
- return &buf;
656
- return reinterpret_cast<T*>(store_->Data()) + offset_;
657
- }
658
-
659
- inline size_t size() const { return length_; }
660
-
661
- // In most cases, input buffer sizes passed in to openssl need to
662
- // be limited to <= INT_MAX. This utility method helps us check.
663
- inline bool CheckSizeInt32() { return size() <= INT_MAX; }
664
-
665
- inline ByteSource ToByteSource() const {
666
- return ByteSource::Foreign(data(), size());
667
- }
668
-
669
- inline ByteSource ToCopy() const {
670
- if (size() == 0) return ByteSource();
671
- char* buf = MallocOpenSSL<char>(size());
672
- CHECK_NOT_NULL(buf);
673
- memcpy(buf, data(), size());
674
- return ByteSource::Allocated(buf, size());
675
- }
676
-
677
- inline ByteSource ToNullTerminatedCopy() const {
678
- if (size() == 0) return ByteSource();
679
- char* buf = MallocOpenSSL<char>(size() + 1);
680
- CHECK_NOT_NULL(buf);
681
- buf[size()] = 0;
682
- memcpy(buf, data(), size());
683
- return ByteSource::Allocated(buf, size());
684
- }
685
-
686
- template <typename M>
687
- void CopyTo(M* dest, size_t len) const {
688
- static_assert(sizeof(M) == 1, "sizeof(M) must equal 1");
689
- len = std::min(len, size());
690
- if (len > 0 && data() != nullptr)
691
- memcpy(dest, data(), len);
692
- }
693
-
694
- private:
695
- T buf = 0;
696
- size_t offset_ = 0;
697
- size_t length_ = 0;
698
- std::shared_ptr<v8::BackingStore> store_;
699
- };
700
-
701
- template <typename T>
702
- std::vector<T> CopyBuffer(const ArrayBufferOrViewContents<T>& buf) {
703
- std::vector<T> vec;
704
- vec->resize(buf.size());
705
- if (vec->size() > 0 && buf.data() != nullptr)
706
- memcpy(vec->data(), buf.data(), vec->size());
707
- return vec;
708
- }
709
-
710
- template <typename T>
711
- std::vector<T> CopyBuffer(v8::Local<v8::Value> buf) {
712
- return CopyBuffer(ArrayBufferOrViewContents<T>(buf));
713
- }
714
-
715
- v8::MaybeLocal<v8::Value> EncodeBignum(
716
- Environment* env,
717
- const BIGNUM* bn,
718
- int size,
719
- v8::Local<v8::Value>* error);
720
-
721
- v8::Maybe<bool> SetEncodedValue(
722
- Environment* env,
723
- v8::Local<v8::Object> target,
724
- v8::Local<v8::String> name,
725
- const BIGNUM* bn,
726
- int size = 0);
727
-
728
- namespace Util {
729
- void Initialize(Environment* env, v8::Local<v8::Object> target);
730
- } // namespace Util
731
-
732
- } // namespace crypto
733
- } // namespace node
734
-
735
- #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
736
- #endif // SRC_CRYPTO_CRYPTO_UTIL_H_