@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
@@ -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);