@kungfu-tech/libnode-win32-x64 22.22.3-kf.0 → 22.22.3-kf.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 (340) hide show
  1. package/dist/node/include/acorn_version.h +6 -0
  2. package/dist/node/include/aliased_buffer-inl.h +244 -0
  3. package/dist/node/include/aliased_buffer.h +206 -0
  4. package/dist/node/include/aliased_struct-inl.h +54 -0
  5. package/dist/node/include/aliased_struct.h +63 -0
  6. package/dist/node/include/amaro_version.h +6 -0
  7. package/dist/node/include/async_context_frame.h +33 -0
  8. package/dist/node/include/async_wrap-inl.h +96 -0
  9. package/dist/node/include/async_wrap.h +243 -0
  10. package/dist/node/include/base_object-inl.h +335 -0
  11. package/dist/node/include/base_object.h +342 -0
  12. package/dist/node/include/base_object_types.h +74 -0
  13. package/dist/node/include/blob_serializer_deserializer-inl.h +385 -0
  14. package/dist/node/include/blob_serializer_deserializer.h +132 -0
  15. package/dist/node/include/callback_queue-inl.h +97 -0
  16. package/dist/node/include/callback_queue.h +79 -0
  17. package/dist/node/include/cares_wrap.h +447 -0
  18. package/dist/node/include/cjs_module_lexer_version.h +6 -0
  19. package/dist/node/include/cleanup_queue-inl.h +36 -0
  20. package/dist/node/include/cleanup_queue.h +79 -0
  21. package/dist/node/include/compile_cache.h +104 -0
  22. package/dist/node/include/connect_wrap.h +26 -0
  23. package/dist/node/include/connection_wrap.h +30 -0
  24. package/dist/node/include/cppgc/allocation.h +310 -0
  25. package/dist/node/include/cppgc/common.h +28 -0
  26. package/dist/node/include/cppgc/cross-thread-persistent.h +466 -0
  27. package/dist/node/include/cppgc/custom-space.h +97 -0
  28. package/dist/node/include/cppgc/default-platform.h +67 -0
  29. package/dist/node/include/cppgc/ephemeron-pair.h +30 -0
  30. package/dist/node/include/cppgc/explicit-management.h +100 -0
  31. package/dist/node/include/cppgc/garbage-collected.h +106 -0
  32. package/dist/node/include/cppgc/heap-consistency.h +309 -0
  33. package/dist/node/include/cppgc/heap-handle.h +48 -0
  34. package/dist/node/include/cppgc/heap-state.h +82 -0
  35. package/dist/node/include/cppgc/heap-statistics.h +120 -0
  36. package/dist/node/include/cppgc/heap.h +202 -0
  37. package/dist/node/include/cppgc/internal/api-constants.h +87 -0
  38. package/dist/node/include/cppgc/internal/atomic-entry-flag.h +48 -0
  39. package/dist/node/include/cppgc/internal/base-page-handle.h +45 -0
  40. package/dist/node/include/cppgc/internal/caged-heap-local-data.h +121 -0
  41. package/dist/node/include/cppgc/internal/caged-heap.h +68 -0
  42. package/dist/node/include/cppgc/internal/compiler-specific.h +38 -0
  43. package/dist/node/include/cppgc/internal/finalizer-trait.h +93 -0
  44. package/dist/node/include/cppgc/internal/gc-info.h +148 -0
  45. package/dist/node/include/cppgc/internal/logging.h +50 -0
  46. package/dist/node/include/cppgc/internal/member-storage.h +256 -0
  47. package/dist/node/include/cppgc/internal/name-trait.h +137 -0
  48. package/dist/node/include/cppgc/internal/persistent-node.h +214 -0
  49. package/dist/node/include/cppgc/internal/pointer-policies.h +243 -0
  50. package/dist/node/include/cppgc/internal/write-barrier.h +487 -0
  51. package/dist/node/include/cppgc/liveness-broker.h +78 -0
  52. package/dist/node/include/cppgc/macros.h +35 -0
  53. package/dist/node/include/cppgc/member.h +629 -0
  54. package/dist/node/include/cppgc/name-provider.h +65 -0
  55. package/dist/node/include/cppgc/object-size-trait.h +58 -0
  56. package/dist/node/include/cppgc/persistent.h +377 -0
  57. package/dist/node/include/cppgc/platform.h +163 -0
  58. package/dist/node/include/cppgc/prefinalizer.h +75 -0
  59. package/dist/node/include/cppgc/process-heap-statistics.h +36 -0
  60. package/dist/node/include/cppgc/sentinel-pointer.h +39 -0
  61. package/dist/node/include/cppgc/source-location.h +16 -0
  62. package/dist/node/include/cppgc/testing.h +106 -0
  63. package/dist/node/include/cppgc/trace-trait.h +128 -0
  64. package/dist/node/include/cppgc/type-traits.h +271 -0
  65. package/dist/node/include/cppgc/visitor.h +504 -0
  66. package/dist/node/include/crypto/crypto_aes.h +88 -0
  67. package/dist/node/include/crypto/crypto_bio.h +193 -0
  68. package/dist/node/include/crypto/crypto_cipher.h +293 -0
  69. package/dist/node/include/crypto/crypto_clienthello-inl.h +90 -0
  70. package/dist/node/include/crypto/crypto_clienthello.h +131 -0
  71. package/dist/node/include/crypto/crypto_common.h +64 -0
  72. package/dist/node/include/crypto/crypto_context.h +171 -0
  73. package/dist/node/include/crypto/crypto_dh.h +126 -0
  74. package/dist/node/include/crypto/crypto_dsa.h +52 -0
  75. package/dist/node/include/crypto/crypto_ec.h +164 -0
  76. package/dist/node/include/crypto/crypto_hash.h +91 -0
  77. package/dist/node/include/crypto/crypto_hkdf.h +61 -0
  78. package/dist/node/include/crypto/crypto_hmac.h +92 -0
  79. package/dist/node/include/crypto/crypto_keygen.h +299 -0
  80. package/dist/node/include/crypto/crypto_keys.h +392 -0
  81. package/dist/node/include/crypto/crypto_pbkdf2.h +74 -0
  82. package/dist/node/include/crypto/crypto_random.h +124 -0
  83. package/dist/node/include/crypto/crypto_rsa.h +136 -0
  84. package/dist/node/include/crypto/crypto_scrypt.h +85 -0
  85. package/dist/node/include/crypto/crypto_sig.h +165 -0
  86. package/dist/node/include/crypto/crypto_spkac.h +21 -0
  87. package/dist/node/include/crypto/crypto_timing.h +20 -0
  88. package/dist/node/include/crypto/crypto_tls.h +305 -0
  89. package/dist/node/include/crypto/crypto_util.h +725 -0
  90. package/dist/node/include/crypto/crypto_x509.h +140 -0
  91. package/dist/node/include/dataqueue/queue.h +306 -0
  92. package/dist/node/include/debug_utils-inl.h +278 -0
  93. package/dist/node/include/debug_utils.h +196 -0
  94. package/dist/node/include/diagnosticfilename-inl.h +33 -0
  95. package/dist/node/include/embedded_data.h +17 -0
  96. package/dist/node/include/encoding_binding.h +61 -0
  97. package/dist/node/include/env-inl.h +984 -0
  98. package/dist/node/include/env.h +1287 -0
  99. package/dist/node/include/env_properties.h +540 -0
  100. package/dist/node/include/handle_wrap.h +123 -0
  101. package/dist/node/include/histogram-inl.h +107 -0
  102. package/dist/node/include/histogram.h +279 -0
  103. package/dist/node/include/inspector/io_agent.h +30 -0
  104. package/dist/node/include/inspector/main_thread_interface.h +116 -0
  105. package/dist/node/include/inspector/network_agent.h +94 -0
  106. package/dist/node/include/inspector/network_inspector.h +45 -0
  107. package/dist/node/include/inspector/network_requests_buffer.h +195 -0
  108. package/dist/node/include/inspector/network_resource_manager.h +29 -0
  109. package/dist/node/include/inspector/node_json.h +24 -0
  110. package/dist/node/include/inspector/node_string.h +101 -0
  111. package/dist/node/include/inspector/protocol_helper.h +27 -0
  112. package/dist/node/include/inspector/runtime_agent.h +41 -0
  113. package/dist/node/include/inspector/target_agent.h +75 -0
  114. package/dist/node/include/inspector/tracing_agent.h +43 -0
  115. package/dist/node/include/inspector/worker_agent.h +40 -0
  116. package/dist/node/include/inspector/worker_inspector.h +124 -0
  117. package/dist/node/include/inspector_agent.h +165 -0
  118. package/dist/node/include/inspector_io.h +78 -0
  119. package/dist/node/include/inspector_profiler.h +149 -0
  120. package/dist/node/include/inspector_socket.h +60 -0
  121. package/dist/node/include/inspector_socket_server.h +110 -0
  122. package/dist/node/include/js_native_api.h +607 -0
  123. package/dist/node/include/js_native_api_types.h +226 -0
  124. package/dist/node/include/js_native_api_v8.h +485 -0
  125. package/dist/node/include/js_native_api_v8_internals.h +45 -0
  126. package/dist/node/include/js_stream.h +52 -0
  127. package/dist/node/include/json_utils.h +172 -0
  128. package/dist/node/include/large_pages/node_large_page.h +34 -0
  129. package/dist/node/include/libplatform/libplatform-export.h +29 -0
  130. package/dist/node/include/libplatform/libplatform.h +112 -0
  131. package/dist/node/include/libplatform/v8-tracing.h +333 -0
  132. package/dist/node/include/memory_tracker-inl.h +359 -0
  133. package/dist/node/include/memory_tracker.h +289 -0
  134. package/dist/node/include/module_wrap.h +216 -0
  135. package/dist/node/include/node.h +1593 -0
  136. package/dist/node/include/node_api.h +265 -0
  137. package/dist/node/include/node_api_internals.h +48 -0
  138. package/dist/node/include/node_api_types.h +56 -0
  139. package/dist/node/include/node_binding.h +161 -0
  140. package/dist/node/include/node_blob.h +159 -0
  141. package/dist/node/include/node_bob-inl.h +36 -0
  142. package/dist/node/include/node_bob.h +107 -0
  143. package/dist/node/include/node_buffer.h +92 -0
  144. package/dist/node/include/node_builtins.h +220 -0
  145. package/dist/node/include/node_config_file.h +46 -0
  146. package/dist/node/include/node_constants.h +82 -0
  147. package/dist/node/include/node_context_data.h +168 -0
  148. package/dist/node/include/node_contextify.h +204 -0
  149. package/dist/node/include/node_crypto.h +56 -0
  150. package/dist/node/include/node_debug.h +30 -0
  151. package/dist/node/include/node_dir.h +52 -0
  152. package/dist/node/include/node_dotenv.h +45 -0
  153. package/dist/node/include/node_errors.h +380 -0
  154. package/dist/node/include/node_exit_code.h +54 -0
  155. package/dist/node/include/node_external_reference.h +165 -0
  156. package/dist/node/include/node_file-inl.h +406 -0
  157. package/dist/node/include/node_file.h +537 -0
  158. package/dist/node/include/node_http2.h +1177 -0
  159. package/dist/node/include/node_http2_state.h +159 -0
  160. package/dist/node/include/node_http_common-inl.h +202 -0
  161. package/dist/node/include/node_http_common.h +535 -0
  162. package/dist/node/include/node_i18n.h +132 -0
  163. package/dist/node/include/node_internals.h +483 -0
  164. package/dist/node/include/node_main_instance.h +67 -0
  165. package/dist/node/include/node_mem-inl.h +113 -0
  166. package/dist/node/include/node_mem.h +45 -0
  167. package/dist/node/include/node_messaging.h +389 -0
  168. package/dist/node/include/node_metadata.h +164 -0
  169. package/dist/node/include/node_modules.h +91 -0
  170. package/dist/node/include/node_mutex.h +323 -0
  171. package/dist/node/include/node_object_wrap.h +132 -0
  172. package/dist/node/include/node_options-inl.h +490 -0
  173. package/dist/node/include/node_options.h +615 -0
  174. package/dist/node/include/node_perf.h +166 -0
  175. package/dist/node/include/node_perf_common.h +102 -0
  176. package/dist/node/include/node_platform.h +238 -0
  177. package/dist/node/include/node_process-inl.h +26 -0
  178. package/dist/node/include/node_process.h +112 -0
  179. package/dist/node/include/node_realm-inl.h +151 -0
  180. package/dist/node/include/node_realm.h +183 -0
  181. package/dist/node/include/node_report.h +43 -0
  182. package/dist/node/include/node_revert.h +82 -0
  183. package/dist/node/include/node_root_certs.h +3520 -0
  184. package/dist/node/include/node_sea.h +74 -0
  185. package/dist/node/include/node_shadow_realm.h +46 -0
  186. package/dist/node/include/node_snapshot_builder.h +57 -0
  187. package/dist/node/include/node_snapshotable.h +174 -0
  188. package/dist/node/include/node_sockaddr-inl.h +257 -0
  189. package/dist/node/include/node_sockaddr.h +394 -0
  190. package/dist/node/include/node_sqlite.h +270 -0
  191. package/dist/node/include/node_stat_watcher.h +73 -0
  192. package/dist/node/include/node_task_runner.h +92 -0
  193. package/dist/node/include/node_threadsafe_cow-inl.h +54 -0
  194. package/dist/node/include/node_threadsafe_cow.h +105 -0
  195. package/dist/node/include/node_union_bytes.h +81 -0
  196. package/dist/node/include/node_url.h +96 -0
  197. package/dist/node/include/node_v8.h +77 -0
  198. package/dist/node/include/node_v8_platform-inl.h +185 -0
  199. package/dist/node/include/node_version.h +110 -0
  200. package/dist/node/include/node_wasi.h +184 -0
  201. package/dist/node/include/node_wasm_web_api.h +55 -0
  202. package/dist/node/include/node_watchdog.h +154 -0
  203. package/dist/node/include/node_webstorage.h +60 -0
  204. package/dist/node/include/node_worker.h +158 -0
  205. package/dist/node/include/path.h +33 -0
  206. package/dist/node/include/permission/addon_permission.h +31 -0
  207. package/dist/node/include/permission/child_process_permission.h +31 -0
  208. package/dist/node/include/permission/fs_permission.h +167 -0
  209. package/dist/node/include/permission/inspector_permission.h +31 -0
  210. package/dist/node/include/permission/permission.h +138 -0
  211. package/dist/node/include/permission/permission_base.h +65 -0
  212. package/dist/node/include/permission/wasi_permission.h +31 -0
  213. package/dist/node/include/permission/worker_permission.h +31 -0
  214. package/dist/node/include/pipe_wrap.h +80 -0
  215. package/dist/node/include/quic/application.h +159 -0
  216. package/dist/node/include/quic/bindingdata.h +272 -0
  217. package/dist/node/include/quic/cid.h +127 -0
  218. package/dist/node/include/quic/data.h +148 -0
  219. package/dist/node/include/quic/defs.h +245 -0
  220. package/dist/node/include/quic/endpoint.h +458 -0
  221. package/dist/node/include/quic/http3.h +15 -0
  222. package/dist/node/include/quic/logstream.h +81 -0
  223. package/dist/node/include/quic/packet.h +152 -0
  224. package/dist/node/include/quic/preferredaddress.h +72 -0
  225. package/dist/node/include/quic/session.h +443 -0
  226. package/dist/node/include/quic/sessionticket.h +108 -0
  227. package/dist/node/include/quic/streams.h +232 -0
  228. package/dist/node/include/quic/tlscontext.h +227 -0
  229. package/dist/node/include/quic/tokens.h +256 -0
  230. package/dist/node/include/quic/transportparams.h +165 -0
  231. package/dist/node/include/req_wrap-inl.h +171 -0
  232. package/dist/node/include/req_wrap.h +77 -0
  233. package/dist/node/include/spawn_sync.h +243 -0
  234. package/dist/node/include/stream_base-inl.h +173 -0
  235. package/dist/node/include/stream_base.h +478 -0
  236. package/dist/node/include/stream_pipe.h +76 -0
  237. package/dist/node/include/stream_wrap.h +132 -0
  238. package/dist/node/include/string_bytes.h +113 -0
  239. package/dist/node/include/string_decoder-inl.h +31 -0
  240. package/dist/node/include/string_decoder.h +49 -0
  241. package/dist/node/include/tcp_wrap.h +105 -0
  242. package/dist/node/include/threadpoolwork-inl.h +70 -0
  243. package/dist/node/include/timer_wrap-inl.h +32 -0
  244. package/dist/node/include/timer_wrap.h +85 -0
  245. package/dist/node/include/timers.h +70 -0
  246. package/dist/node/include/tracing/agent.h +195 -0
  247. package/dist/node/include/tracing/node_trace_buffer.h +83 -0
  248. package/dist/node/include/tracing/node_trace_writer.h +75 -0
  249. package/dist/node/include/tracing/trace_event.h +722 -0
  250. package/dist/node/include/tracing/trace_event_common.h +1109 -0
  251. package/dist/node/include/tracing/traced_value.h +129 -0
  252. package/dist/node/include/tty_wrap.h +65 -0
  253. package/dist/node/include/udp_wrap.h +230 -0
  254. package/dist/node/include/undici_version.h +6 -0
  255. package/dist/node/include/util-inl.h +700 -0
  256. package/dist/node/include/util.h +1021 -0
  257. package/dist/node/include/uv/aix.h +32 -0
  258. package/dist/node/include/uv/bsd.h +34 -0
  259. package/dist/node/include/uv/darwin.h +61 -0
  260. package/dist/node/include/uv/errno.h +483 -0
  261. package/dist/node/include/uv/linux.h +34 -0
  262. package/dist/node/include/uv/os390.h +33 -0
  263. package/dist/node/include/uv/posix.h +31 -0
  264. package/dist/node/include/uv/sunos.h +44 -0
  265. package/dist/node/include/uv/threadpool.h +37 -0
  266. package/dist/node/include/uv/tree.h +521 -0
  267. package/dist/node/include/uv/unix.h +512 -0
  268. package/dist/node/include/uv/version.h +43 -0
  269. package/dist/node/include/uv/win.h +698 -0
  270. package/dist/node/include/uv.h +1990 -0
  271. package/dist/node/include/v8-array-buffer.h +525 -0
  272. package/dist/node/include/v8-callbacks.h +462 -0
  273. package/dist/node/include/v8-container.h +183 -0
  274. package/dist/node/include/v8-context.h +485 -0
  275. package/dist/node/include/v8-cppgc.h +245 -0
  276. package/dist/node/include/v8-data.h +80 -0
  277. package/dist/node/include/v8-date.h +48 -0
  278. package/dist/node/include/v8-debug.h +168 -0
  279. package/dist/node/include/v8-embedder-heap.h +82 -0
  280. package/dist/node/include/v8-embedder-state-scope.h +52 -0
  281. package/dist/node/include/v8-exception.h +223 -0
  282. package/dist/node/include/v8-extension.h +62 -0
  283. package/dist/node/include/v8-external.h +37 -0
  284. package/dist/node/include/v8-fast-api-calls.h +984 -0
  285. package/dist/node/include/v8-forward.h +82 -0
  286. package/dist/node/include/v8-function-callback.h +607 -0
  287. package/dist/node/include/v8-function.h +140 -0
  288. package/dist/node/include/v8-handle-base.h +137 -0
  289. package/dist/node/include/v8-initialization.h +289 -0
  290. package/dist/node/include/v8-inspector-protocol.h +13 -0
  291. package/dist/node/include/v8-inspector.h +419 -0
  292. package/dist/node/include/v8-internal.h +1397 -0
  293. package/dist/node/include/v8-isolate.h +1767 -0
  294. package/dist/node/include/v8-json.h +47 -0
  295. package/dist/node/include/v8-local-handle.h +758 -0
  296. package/dist/node/include/v8-locker.h +138 -0
  297. package/dist/node/include/v8-maybe.h +160 -0
  298. package/dist/node/include/v8-memory-span.h +198 -0
  299. package/dist/node/include/v8-message.h +233 -0
  300. package/dist/node/include/v8-metrics.h +264 -0
  301. package/dist/node/include/v8-microtask-queue.h +157 -0
  302. package/dist/node/include/v8-microtask.h +28 -0
  303. package/dist/node/include/v8-object.h +824 -0
  304. package/dist/node/include/v8-persistent-handle.h +582 -0
  305. package/dist/node/include/v8-platform.h +1358 -0
  306. package/dist/node/include/v8-primitive-object.h +118 -0
  307. package/dist/node/include/v8-primitive.h +877 -0
  308. package/dist/node/include/v8-profiler.h +1302 -0
  309. package/dist/node/include/v8-promise.h +174 -0
  310. package/dist/node/include/v8-proxy.h +50 -0
  311. package/dist/node/include/v8-regexp.h +106 -0
  312. package/dist/node/include/v8-script.h +904 -0
  313. package/dist/node/include/v8-snapshot.h +266 -0
  314. package/dist/node/include/v8-source-location.h +92 -0
  315. package/dist/node/include/v8-statistics.h +238 -0
  316. package/dist/node/include/v8-template.h +1297 -0
  317. package/dist/node/include/v8-traced-handle.h +432 -0
  318. package/dist/node/include/v8-typed-array.h +390 -0
  319. package/dist/node/include/v8-unwinder-state.h +31 -0
  320. package/dist/node/include/v8-unwinder.h +132 -0
  321. package/dist/node/include/v8-util.h +665 -0
  322. package/dist/node/include/v8-value-serializer-version.h +24 -0
  323. package/dist/node/include/v8-value-serializer.h +316 -0
  324. package/dist/node/include/v8-value.h +655 -0
  325. package/dist/node/include/v8-version-string.h +38 -0
  326. package/dist/node/include/v8-version.h +20 -0
  327. package/dist/node/include/v8-wasm-trap-handler-posix.h +31 -0
  328. package/dist/node/include/v8-wasm-trap-handler-win.h +28 -0
  329. package/dist/node/include/v8-wasm.h +201 -0
  330. package/dist/node/include/v8-weak-callback-info.h +80 -0
  331. package/dist/node/include/v8.h +88 -0
  332. package/dist/node/include/v8config.h +981 -0
  333. package/dist/node/include/zlib_version.h +6 -0
  334. package/dist/node/libnode.dll +0 -0
  335. package/dist/node/libnode.lib +0 -0
  336. package/dist/node/libnodebuildinfo.json +10 -0
  337. package/dist/node/link_node.lib +0 -0
  338. package/dist/node/link_node.node +0 -0
  339. package/libnode.release.json +2 -2
  340. package/package.json +1 -1
@@ -0,0 +1,305 @@
1
+ // Copyright Joyent, Inc. and other Node contributors.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a
4
+ // copy of this software and associated documentation files (the
5
+ // "Software"), to deal in the Software without restriction, including
6
+ // without limitation the rights to use, copy, modify, merge, publish,
7
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
8
+ // persons to whom the Software is furnished to do so, subject to the
9
+ // following conditions:
10
+ //
11
+ // The above copyright notice and this permission notice shall be included
12
+ // in all copies or substantial portions of the Software.
13
+ //
14
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ #ifndef SRC_CRYPTO_CRYPTO_TLS_H_
23
+ #define SRC_CRYPTO_CRYPTO_TLS_H_
24
+
25
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
+
27
+ #include "crypto/crypto_context.h"
28
+ #include "crypto/crypto_clienthello.h"
29
+
30
+ #include "async_wrap.h"
31
+ #include "stream_wrap.h"
32
+ #include "v8.h"
33
+
34
+ #include <openssl/ssl.h>
35
+
36
+ #include <string>
37
+ #include <vector>
38
+
39
+ namespace node {
40
+ namespace crypto {
41
+
42
+ class TLSWrap : public AsyncWrap,
43
+ public StreamBase,
44
+ public StreamListener {
45
+ public:
46
+ enum class Kind {
47
+ kClient,
48
+ kServer
49
+ };
50
+
51
+ enum class UnderlyingStreamWriteStatus { kHasActive, kVacancy };
52
+
53
+ static void Initialize(v8::Local<v8::Object> target,
54
+ v8::Local<v8::Value> unused,
55
+ v8::Local<v8::Context> context,
56
+ void* priv);
57
+ static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
58
+
59
+ ~TLSWrap() override;
60
+
61
+ bool is_cert_cb_running() const { return cert_cb_running_; }
62
+ bool is_waiting_cert_cb() const { return cert_cb_ != nullptr; }
63
+ bool has_session_callbacks() const { return session_callbacks_; }
64
+ void set_cert_cb_running(bool on = true) { cert_cb_running_ = on; }
65
+ void set_awaiting_new_session(bool on = true) { awaiting_new_session_ = on; }
66
+ void enable_session_callbacks() { session_callbacks_ = true; }
67
+ bool is_server() const { return kind_ == Kind::kServer; }
68
+ bool is_client() const { return kind_ == Kind::kClient; }
69
+ bool is_awaiting_new_session() const { return awaiting_new_session_; }
70
+
71
+ // Implement StreamBase:
72
+ bool IsAlive() override;
73
+ bool IsClosing() override;
74
+ bool IsIPCPipe() override;
75
+ int GetFD() override;
76
+ ShutdownWrap* CreateShutdownWrap(
77
+ v8::Local<v8::Object> req_wrap_object) override;
78
+ AsyncWrap* GetAsyncWrap() override;
79
+
80
+
81
+ // Implement StreamResource:
82
+ int ReadStart() override; // Exposed to JS
83
+ int ReadStop() override; // Exposed to JS
84
+ int DoShutdown(ShutdownWrap* req_wrap) override;
85
+ int DoWrite(WriteWrap* w,
86
+ uv_buf_t* bufs,
87
+ size_t count,
88
+ uv_stream_t* send_handle) override;
89
+ // Return error_ string or nullptr if it's empty.
90
+ const char* Error() const override;
91
+ // Reset error_ string to empty. Not related to "clear text".
92
+ void ClearError() override;
93
+
94
+ v8::MaybeLocal<v8::ArrayBufferView> ocsp_response() const;
95
+ void ClearOcspResponse();
96
+ SSL_SESSION* ReleaseSession();
97
+
98
+ // Called by the done() callback of the 'newSession' event.
99
+ void NewSessionDoneCb();
100
+
101
+ // Implement MemoryRetainer:
102
+ void MemoryInfo(MemoryTracker* tracker) const override;
103
+ SET_MEMORY_INFO_NAME(TLSWrap)
104
+ SET_SELF_SIZE(TLSWrap)
105
+
106
+ std::string diagnostic_name() const override;
107
+
108
+ private:
109
+ // OpenSSL structures are opaque. Estimate SSL memory size for OpenSSL 1.1.1b:
110
+ // SSL: 6224
111
+ // SSL->SSL3_STATE: 1040
112
+ // ...some buffers: 42 * 1024
113
+ // NOTE: Actually it is much more than this
114
+ static constexpr int64_t kExternalSize = 6224 + 1040 + 42 * 1024;
115
+
116
+ static constexpr int kClearOutChunkSize = 16384;
117
+
118
+ // Maximum number of bytes for hello parser
119
+ static constexpr int kMaxHelloLength = 16384;
120
+
121
+ // Usual ServerHello + Certificate size
122
+ static constexpr int kInitialClientBufferLength = 4096;
123
+
124
+ // Maximum number of buffers passed to uv_write()
125
+ static constexpr int kSimultaneousBufferCount = 10;
126
+
127
+ typedef void (*CertCb)(void* arg);
128
+
129
+ // Alternative to StreamListener::stream(), that returns a StreamBase instead
130
+ // of a StreamResource.
131
+ StreamBase* underlying_stream() const {
132
+ return static_cast<StreamBase*>(stream());
133
+ }
134
+
135
+ void WaitForCertCb(CertCb cb, void* arg);
136
+
137
+ TLSWrap(Environment* env,
138
+ v8::Local<v8::Object> obj,
139
+ Kind kind,
140
+ StreamBase* stream,
141
+ SecureContext* sc,
142
+ UnderlyingStreamWriteStatus under_stream_ws);
143
+
144
+ static void SSLInfoCallback(const SSL* ssl_, int where, int ret);
145
+ void InitSSL();
146
+ // SSL has a "clear" text (unencrypted) side (to/from the node API) and
147
+ // encrypted ("enc") text side (to/from the underlying socket/stream).
148
+ // On each side data flows "in" or "out" of SSL context.
149
+ //
150
+ // EncIn() doesn't exist. Encrypted data is pushed from underlying stream into
151
+ // enc_in_ via the stream listener's OnStreamAlloc()/OnStreamRead() interface.
152
+ void EncOut(); // Write encrypted data from enc_out_ to underlying stream.
153
+ void ClearIn(); // SSL_write() clear data "in" to SSL.
154
+ void ClearOut(); // SSL_read() clear text "out" from SSL.
155
+ void Destroy();
156
+
157
+ // Call Done() on outstanding WriteWrap request.
158
+ void InvokeQueued(int status, const char* error_str = nullptr);
159
+
160
+ // Drive the SSL state machine by attempting to SSL_read() and SSL_write() to
161
+ // it. Transparent handshakes mean SSL_read() might trigger I/O on the
162
+ // underlying stream even if there is no clear text to read or write.
163
+ void Cycle();
164
+
165
+ // Implement StreamListener:
166
+ // Returns buf that points into enc_in_.
167
+ uv_buf_t OnStreamAlloc(size_t size) override;
168
+ void OnStreamRead(ssize_t nread, const uv_buf_t& buf) override;
169
+ void OnStreamAfterWrite(WriteWrap* w, int status) override;
170
+
171
+ int SetCACerts(SecureContext* sc);
172
+
173
+ static int SelectSNIContextCallback(SSL* s, int* ad, void* arg);
174
+
175
+ static void CertCbDone(const v8::FunctionCallbackInfo<v8::Value>& args);
176
+ static void DestroySSL(const v8::FunctionCallbackInfo<v8::Value>& args);
177
+ static void EnableCertCb(const v8::FunctionCallbackInfo<v8::Value>& args);
178
+ static void EnableALPNCb(const v8::FunctionCallbackInfo<v8::Value>& args);
179
+ static void EnableKeylogCallback(
180
+ const v8::FunctionCallbackInfo<v8::Value>& args);
181
+ static void EnableSessionCallbacks(
182
+ const v8::FunctionCallbackInfo<v8::Value>& args);
183
+ static void EnableTrace(const v8::FunctionCallbackInfo<v8::Value>& args);
184
+ static void EndParser(const v8::FunctionCallbackInfo<v8::Value>& args);
185
+ static void ExportKeyingMaterial(
186
+ const v8::FunctionCallbackInfo<v8::Value>& args);
187
+ static void GetALPNNegotiatedProto(
188
+ const v8::FunctionCallbackInfo<v8::Value>& args);
189
+ static void GetCertificate(const v8::FunctionCallbackInfo<v8::Value>& args);
190
+ static void GetX509Certificate(
191
+ const v8::FunctionCallbackInfo<v8::Value>& args);
192
+ static void GetCipher(const v8::FunctionCallbackInfo<v8::Value>& args);
193
+ static void GetEphemeralKeyInfo(
194
+ const v8::FunctionCallbackInfo<v8::Value>& args);
195
+ static void GetFinished(const v8::FunctionCallbackInfo<v8::Value>& args);
196
+ static void GetPeerCertificate(
197
+ const v8::FunctionCallbackInfo<v8::Value>& args);
198
+ static void GetPeerX509Certificate(
199
+ const v8::FunctionCallbackInfo<v8::Value>& args);
200
+ static void GetPeerFinished(const v8::FunctionCallbackInfo<v8::Value>& args);
201
+ static void GetProtocol(const v8::FunctionCallbackInfo<v8::Value>& args);
202
+ static void GetServername(const v8::FunctionCallbackInfo<v8::Value>& args);
203
+ static void GetSession(const v8::FunctionCallbackInfo<v8::Value>& args);
204
+ static void GetSharedSigalgs(const v8::FunctionCallbackInfo<v8::Value>& args);
205
+ static void GetTLSTicket(const v8::FunctionCallbackInfo<v8::Value>& args);
206
+ static void GetWriteQueueSize(
207
+ const v8::FunctionCallbackInfo<v8::Value>& info);
208
+ static void IsSessionReused(const v8::FunctionCallbackInfo<v8::Value>& args);
209
+ static void LoadSession(const v8::FunctionCallbackInfo<v8::Value>& args);
210
+ static void NewSessionDone(const v8::FunctionCallbackInfo<v8::Value>& args);
211
+ static void OnClientHelloParseEnd(void* arg);
212
+ static void Receive(const v8::FunctionCallbackInfo<v8::Value>& args);
213
+ static void Renegotiate(const v8::FunctionCallbackInfo<v8::Value>& args);
214
+ static void RequestOCSP(const v8::FunctionCallbackInfo<v8::Value>& args);
215
+ static void SetALPNProtocols(const v8::FunctionCallbackInfo<v8::Value>& args);
216
+ static void SetKeyCert(const v8::FunctionCallbackInfo<v8::Value>& args);
217
+ static void SetOCSPResponse(const v8::FunctionCallbackInfo<v8::Value>& args);
218
+ static void SetServername(const v8::FunctionCallbackInfo<v8::Value>& args);
219
+ static void SetSession(const v8::FunctionCallbackInfo<v8::Value>& args);
220
+ static void SetVerifyMode(const v8::FunctionCallbackInfo<v8::Value>& args);
221
+ static void Start(const v8::FunctionCallbackInfo<v8::Value>& args);
222
+ static void VerifyError(const v8::FunctionCallbackInfo<v8::Value>& args);
223
+ static void Wrap(const v8::FunctionCallbackInfo<v8::Value>& args);
224
+ static void WritesIssuedByPrevListenerDone(
225
+ const v8::FunctionCallbackInfo<v8::Value>& args);
226
+
227
+ #ifdef SSL_set_max_send_fragment
228
+ static void SetMaxSendFragment(
229
+ const v8::FunctionCallbackInfo<v8::Value>& args);
230
+ #endif // SSL_set_max_send_fragment
231
+
232
+ #ifndef OPENSSL_NO_PSK
233
+ static void EnablePskCallback(
234
+ const v8::FunctionCallbackInfo<v8::Value>& args);
235
+ static void SetPskIdentityHint(
236
+ const v8::FunctionCallbackInfo<v8::Value>& args);
237
+ static unsigned int PskServerCallback(SSL* s,
238
+ const char* identity,
239
+ unsigned char* psk,
240
+ unsigned int max_psk_len);
241
+ static unsigned int PskClientCallback(SSL* s,
242
+ const char* hint,
243
+ char* identity,
244
+ unsigned int max_identity_len,
245
+ unsigned char* psk,
246
+ unsigned int max_psk_len);
247
+ #endif
248
+
249
+ Environment* const env_;
250
+ Kind kind_;
251
+ ncrypto::SSLSessionPointer next_sess_;
252
+ ncrypto::SSLPointer ssl_;
253
+ ClientHelloParser hello_parser_;
254
+ v8::Global<v8::ArrayBufferView> ocsp_response_;
255
+ BaseObjectPtr<SecureContext> sni_context_;
256
+ BaseObjectPtr<SecureContext> sc_;
257
+
258
+ // BIO buffers hold encrypted data.
259
+ BIO* enc_in_ = nullptr; // StreamListener fills this for SSL_read().
260
+ BIO* enc_out_ = nullptr; // SSL_write()/handshake fills this for EncOut().
261
+ // Waiting for ClearIn() to pass to SSL_write().
262
+ std::unique_ptr<v8::BackingStore> pending_cleartext_input_;
263
+ size_t write_size_ = 0;
264
+ BaseObjectPtr<AsyncWrap> current_write_;
265
+ BaseObjectPtr<AsyncWrap> current_empty_write_;
266
+ std::string error_;
267
+
268
+ bool session_callbacks_ = false;
269
+ bool awaiting_new_session_ = false;
270
+ bool in_dowrite_ = false;
271
+ bool started_ = false;
272
+ bool shutdown_ = false;
273
+ bool cert_cb_running_ = false;
274
+ bool eof_ = false;
275
+
276
+ // TODO(@jasnell): These state flags should be revisited.
277
+ // The established_ flag indicates that the handshake is
278
+ // completed. The write_callback_scheduled_ flag is less
279
+ // clear -- once it is set to true, it is never set to
280
+ // false and it is only set to true after established_
281
+ // is set to true, so it's likely redundant.
282
+ bool established_ = false;
283
+ bool write_callback_scheduled_ = false;
284
+
285
+ int cycle_depth_ = 0;
286
+
287
+ // SSL_set_cert_cb
288
+ CertCb cert_cb_ = nullptr;
289
+ void* cert_cb_arg_ = nullptr;
290
+
291
+ ncrypto::BIOPointer bio_trace_;
292
+
293
+ bool has_active_write_issued_by_prev_listener_ = false;
294
+
295
+ public:
296
+ std::vector<unsigned char> alpn_protos_; // Accessed by SelectALPNCallback.
297
+ bool alpn_callback_enabled_ = false; // Accessed by SelectALPNCallback.
298
+ };
299
+
300
+ } // namespace crypto
301
+ } // namespace node
302
+
303
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
304
+
305
+ #endif // SRC_CRYPTO_CRYPTO_TLS_H_