@kungfu-tech/libnode-win32-x64 0.0.0-bootstrap.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 (343) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/node/include/acorn_version.h +6 -0
  4. package/dist/node/include/aliased_buffer-inl.h +244 -0
  5. package/dist/node/include/aliased_buffer.h +206 -0
  6. package/dist/node/include/aliased_struct-inl.h +54 -0
  7. package/dist/node/include/aliased_struct.h +63 -0
  8. package/dist/node/include/amaro_version.h +6 -0
  9. package/dist/node/include/async_context_frame.h +33 -0
  10. package/dist/node/include/async_wrap-inl.h +96 -0
  11. package/dist/node/include/async_wrap.h +243 -0
  12. package/dist/node/include/base_object-inl.h +335 -0
  13. package/dist/node/include/base_object.h +342 -0
  14. package/dist/node/include/base_object_types.h +74 -0
  15. package/dist/node/include/blob_serializer_deserializer-inl.h +385 -0
  16. package/dist/node/include/blob_serializer_deserializer.h +132 -0
  17. package/dist/node/include/callback_queue-inl.h +97 -0
  18. package/dist/node/include/callback_queue.h +79 -0
  19. package/dist/node/include/cares_wrap.h +447 -0
  20. package/dist/node/include/cjs_module_lexer_version.h +6 -0
  21. package/dist/node/include/cleanup_queue-inl.h +36 -0
  22. package/dist/node/include/cleanup_queue.h +79 -0
  23. package/dist/node/include/compile_cache.h +104 -0
  24. package/dist/node/include/connect_wrap.h +26 -0
  25. package/dist/node/include/connection_wrap.h +30 -0
  26. package/dist/node/include/cppgc/allocation.h +310 -0
  27. package/dist/node/include/cppgc/common.h +28 -0
  28. package/dist/node/include/cppgc/cross-thread-persistent.h +466 -0
  29. package/dist/node/include/cppgc/custom-space.h +97 -0
  30. package/dist/node/include/cppgc/default-platform.h +67 -0
  31. package/dist/node/include/cppgc/ephemeron-pair.h +30 -0
  32. package/dist/node/include/cppgc/explicit-management.h +100 -0
  33. package/dist/node/include/cppgc/garbage-collected.h +106 -0
  34. package/dist/node/include/cppgc/heap-consistency.h +309 -0
  35. package/dist/node/include/cppgc/heap-handle.h +48 -0
  36. package/dist/node/include/cppgc/heap-state.h +82 -0
  37. package/dist/node/include/cppgc/heap-statistics.h +120 -0
  38. package/dist/node/include/cppgc/heap.h +202 -0
  39. package/dist/node/include/cppgc/internal/api-constants.h +87 -0
  40. package/dist/node/include/cppgc/internal/atomic-entry-flag.h +48 -0
  41. package/dist/node/include/cppgc/internal/base-page-handle.h +45 -0
  42. package/dist/node/include/cppgc/internal/caged-heap-local-data.h +121 -0
  43. package/dist/node/include/cppgc/internal/caged-heap.h +68 -0
  44. package/dist/node/include/cppgc/internal/compiler-specific.h +38 -0
  45. package/dist/node/include/cppgc/internal/finalizer-trait.h +93 -0
  46. package/dist/node/include/cppgc/internal/gc-info.h +148 -0
  47. package/dist/node/include/cppgc/internal/logging.h +50 -0
  48. package/dist/node/include/cppgc/internal/member-storage.h +256 -0
  49. package/dist/node/include/cppgc/internal/name-trait.h +137 -0
  50. package/dist/node/include/cppgc/internal/persistent-node.h +214 -0
  51. package/dist/node/include/cppgc/internal/pointer-policies.h +243 -0
  52. package/dist/node/include/cppgc/internal/write-barrier.h +487 -0
  53. package/dist/node/include/cppgc/liveness-broker.h +78 -0
  54. package/dist/node/include/cppgc/macros.h +35 -0
  55. package/dist/node/include/cppgc/member.h +629 -0
  56. package/dist/node/include/cppgc/name-provider.h +65 -0
  57. package/dist/node/include/cppgc/object-size-trait.h +58 -0
  58. package/dist/node/include/cppgc/persistent.h +377 -0
  59. package/dist/node/include/cppgc/platform.h +163 -0
  60. package/dist/node/include/cppgc/prefinalizer.h +75 -0
  61. package/dist/node/include/cppgc/process-heap-statistics.h +36 -0
  62. package/dist/node/include/cppgc/sentinel-pointer.h +39 -0
  63. package/dist/node/include/cppgc/source-location.h +16 -0
  64. package/dist/node/include/cppgc/testing.h +106 -0
  65. package/dist/node/include/cppgc/trace-trait.h +128 -0
  66. package/dist/node/include/cppgc/type-traits.h +271 -0
  67. package/dist/node/include/cppgc/visitor.h +504 -0
  68. package/dist/node/include/crypto/crypto_aes.h +88 -0
  69. package/dist/node/include/crypto/crypto_bio.h +193 -0
  70. package/dist/node/include/crypto/crypto_cipher.h +293 -0
  71. package/dist/node/include/crypto/crypto_clienthello-inl.h +90 -0
  72. package/dist/node/include/crypto/crypto_clienthello.h +131 -0
  73. package/dist/node/include/crypto/crypto_common.h +64 -0
  74. package/dist/node/include/crypto/crypto_context.h +171 -0
  75. package/dist/node/include/crypto/crypto_dh.h +126 -0
  76. package/dist/node/include/crypto/crypto_dsa.h +52 -0
  77. package/dist/node/include/crypto/crypto_ec.h +164 -0
  78. package/dist/node/include/crypto/crypto_hash.h +91 -0
  79. package/dist/node/include/crypto/crypto_hkdf.h +61 -0
  80. package/dist/node/include/crypto/crypto_hmac.h +92 -0
  81. package/dist/node/include/crypto/crypto_keygen.h +299 -0
  82. package/dist/node/include/crypto/crypto_keys.h +392 -0
  83. package/dist/node/include/crypto/crypto_pbkdf2.h +74 -0
  84. package/dist/node/include/crypto/crypto_random.h +124 -0
  85. package/dist/node/include/crypto/crypto_rsa.h +136 -0
  86. package/dist/node/include/crypto/crypto_scrypt.h +85 -0
  87. package/dist/node/include/crypto/crypto_sig.h +165 -0
  88. package/dist/node/include/crypto/crypto_spkac.h +21 -0
  89. package/dist/node/include/crypto/crypto_timing.h +20 -0
  90. package/dist/node/include/crypto/crypto_tls.h +305 -0
  91. package/dist/node/include/crypto/crypto_util.h +725 -0
  92. package/dist/node/include/crypto/crypto_x509.h +140 -0
  93. package/dist/node/include/dataqueue/queue.h +306 -0
  94. package/dist/node/include/debug_utils-inl.h +278 -0
  95. package/dist/node/include/debug_utils.h +196 -0
  96. package/dist/node/include/diagnosticfilename-inl.h +33 -0
  97. package/dist/node/include/embedded_data.h +17 -0
  98. package/dist/node/include/encoding_binding.h +61 -0
  99. package/dist/node/include/env-inl.h +984 -0
  100. package/dist/node/include/env.h +1287 -0
  101. package/dist/node/include/env_properties.h +540 -0
  102. package/dist/node/include/handle_wrap.h +123 -0
  103. package/dist/node/include/histogram-inl.h +107 -0
  104. package/dist/node/include/histogram.h +279 -0
  105. package/dist/node/include/inspector/io_agent.h +30 -0
  106. package/dist/node/include/inspector/main_thread_interface.h +116 -0
  107. package/dist/node/include/inspector/network_agent.h +94 -0
  108. package/dist/node/include/inspector/network_inspector.h +45 -0
  109. package/dist/node/include/inspector/network_requests_buffer.h +195 -0
  110. package/dist/node/include/inspector/network_resource_manager.h +29 -0
  111. package/dist/node/include/inspector/node_json.h +24 -0
  112. package/dist/node/include/inspector/node_string.h +101 -0
  113. package/dist/node/include/inspector/protocol_helper.h +27 -0
  114. package/dist/node/include/inspector/runtime_agent.h +41 -0
  115. package/dist/node/include/inspector/target_agent.h +75 -0
  116. package/dist/node/include/inspector/tracing_agent.h +43 -0
  117. package/dist/node/include/inspector/worker_agent.h +40 -0
  118. package/dist/node/include/inspector/worker_inspector.h +124 -0
  119. package/dist/node/include/inspector_agent.h +165 -0
  120. package/dist/node/include/inspector_io.h +78 -0
  121. package/dist/node/include/inspector_profiler.h +149 -0
  122. package/dist/node/include/inspector_socket.h +60 -0
  123. package/dist/node/include/inspector_socket_server.h +110 -0
  124. package/dist/node/include/js_native_api.h +607 -0
  125. package/dist/node/include/js_native_api_types.h +226 -0
  126. package/dist/node/include/js_native_api_v8.h +485 -0
  127. package/dist/node/include/js_native_api_v8_internals.h +45 -0
  128. package/dist/node/include/js_stream.h +52 -0
  129. package/dist/node/include/json_utils.h +172 -0
  130. package/dist/node/include/large_pages/node_large_page.h +34 -0
  131. package/dist/node/include/libplatform/libplatform-export.h +29 -0
  132. package/dist/node/include/libplatform/libplatform.h +112 -0
  133. package/dist/node/include/libplatform/v8-tracing.h +333 -0
  134. package/dist/node/include/memory_tracker-inl.h +359 -0
  135. package/dist/node/include/memory_tracker.h +289 -0
  136. package/dist/node/include/module_wrap.h +216 -0
  137. package/dist/node/include/node.h +1593 -0
  138. package/dist/node/include/node_api.h +265 -0
  139. package/dist/node/include/node_api_internals.h +48 -0
  140. package/dist/node/include/node_api_types.h +56 -0
  141. package/dist/node/include/node_binding.h +161 -0
  142. package/dist/node/include/node_blob.h +159 -0
  143. package/dist/node/include/node_bob-inl.h +36 -0
  144. package/dist/node/include/node_bob.h +107 -0
  145. package/dist/node/include/node_buffer.h +92 -0
  146. package/dist/node/include/node_builtins.h +220 -0
  147. package/dist/node/include/node_config_file.h +46 -0
  148. package/dist/node/include/node_constants.h +82 -0
  149. package/dist/node/include/node_context_data.h +168 -0
  150. package/dist/node/include/node_contextify.h +204 -0
  151. package/dist/node/include/node_crypto.h +56 -0
  152. package/dist/node/include/node_debug.h +30 -0
  153. package/dist/node/include/node_dir.h +52 -0
  154. package/dist/node/include/node_dotenv.h +45 -0
  155. package/dist/node/include/node_errors.h +380 -0
  156. package/dist/node/include/node_exit_code.h +54 -0
  157. package/dist/node/include/node_external_reference.h +165 -0
  158. package/dist/node/include/node_file-inl.h +406 -0
  159. package/dist/node/include/node_file.h +537 -0
  160. package/dist/node/include/node_http2.h +1177 -0
  161. package/dist/node/include/node_http2_state.h +159 -0
  162. package/dist/node/include/node_http_common-inl.h +202 -0
  163. package/dist/node/include/node_http_common.h +535 -0
  164. package/dist/node/include/node_i18n.h +132 -0
  165. package/dist/node/include/node_internals.h +483 -0
  166. package/dist/node/include/node_main_instance.h +67 -0
  167. package/dist/node/include/node_mem-inl.h +113 -0
  168. package/dist/node/include/node_mem.h +45 -0
  169. package/dist/node/include/node_messaging.h +389 -0
  170. package/dist/node/include/node_metadata.h +164 -0
  171. package/dist/node/include/node_modules.h +91 -0
  172. package/dist/node/include/node_mutex.h +323 -0
  173. package/dist/node/include/node_object_wrap.h +132 -0
  174. package/dist/node/include/node_options-inl.h +490 -0
  175. package/dist/node/include/node_options.h +615 -0
  176. package/dist/node/include/node_perf.h +166 -0
  177. package/dist/node/include/node_perf_common.h +102 -0
  178. package/dist/node/include/node_platform.h +238 -0
  179. package/dist/node/include/node_process-inl.h +26 -0
  180. package/dist/node/include/node_process.h +112 -0
  181. package/dist/node/include/node_realm-inl.h +151 -0
  182. package/dist/node/include/node_realm.h +183 -0
  183. package/dist/node/include/node_report.h +43 -0
  184. package/dist/node/include/node_revert.h +82 -0
  185. package/dist/node/include/node_root_certs.h +3520 -0
  186. package/dist/node/include/node_sea.h +74 -0
  187. package/dist/node/include/node_shadow_realm.h +46 -0
  188. package/dist/node/include/node_snapshot_builder.h +57 -0
  189. package/dist/node/include/node_snapshotable.h +174 -0
  190. package/dist/node/include/node_sockaddr-inl.h +257 -0
  191. package/dist/node/include/node_sockaddr.h +394 -0
  192. package/dist/node/include/node_sqlite.h +270 -0
  193. package/dist/node/include/node_stat_watcher.h +73 -0
  194. package/dist/node/include/node_task_runner.h +92 -0
  195. package/dist/node/include/node_threadsafe_cow-inl.h +54 -0
  196. package/dist/node/include/node_threadsafe_cow.h +105 -0
  197. package/dist/node/include/node_union_bytes.h +81 -0
  198. package/dist/node/include/node_url.h +96 -0
  199. package/dist/node/include/node_v8.h +77 -0
  200. package/dist/node/include/node_v8_platform-inl.h +185 -0
  201. package/dist/node/include/node_version.h +110 -0
  202. package/dist/node/include/node_wasi.h +184 -0
  203. package/dist/node/include/node_wasm_web_api.h +55 -0
  204. package/dist/node/include/node_watchdog.h +154 -0
  205. package/dist/node/include/node_webstorage.h +60 -0
  206. package/dist/node/include/node_worker.h +158 -0
  207. package/dist/node/include/path.h +33 -0
  208. package/dist/node/include/permission/addon_permission.h +31 -0
  209. package/dist/node/include/permission/child_process_permission.h +31 -0
  210. package/dist/node/include/permission/fs_permission.h +167 -0
  211. package/dist/node/include/permission/inspector_permission.h +31 -0
  212. package/dist/node/include/permission/permission.h +138 -0
  213. package/dist/node/include/permission/permission_base.h +65 -0
  214. package/dist/node/include/permission/wasi_permission.h +31 -0
  215. package/dist/node/include/permission/worker_permission.h +31 -0
  216. package/dist/node/include/pipe_wrap.h +80 -0
  217. package/dist/node/include/quic/application.h +159 -0
  218. package/dist/node/include/quic/bindingdata.h +272 -0
  219. package/dist/node/include/quic/cid.h +127 -0
  220. package/dist/node/include/quic/data.h +148 -0
  221. package/dist/node/include/quic/defs.h +245 -0
  222. package/dist/node/include/quic/endpoint.h +458 -0
  223. package/dist/node/include/quic/http3.h +15 -0
  224. package/dist/node/include/quic/logstream.h +81 -0
  225. package/dist/node/include/quic/packet.h +152 -0
  226. package/dist/node/include/quic/preferredaddress.h +72 -0
  227. package/dist/node/include/quic/session.h +443 -0
  228. package/dist/node/include/quic/sessionticket.h +108 -0
  229. package/dist/node/include/quic/streams.h +232 -0
  230. package/dist/node/include/quic/tlscontext.h +227 -0
  231. package/dist/node/include/quic/tokens.h +256 -0
  232. package/dist/node/include/quic/transportparams.h +165 -0
  233. package/dist/node/include/req_wrap-inl.h +171 -0
  234. package/dist/node/include/req_wrap.h +77 -0
  235. package/dist/node/include/spawn_sync.h +243 -0
  236. package/dist/node/include/stream_base-inl.h +173 -0
  237. package/dist/node/include/stream_base.h +478 -0
  238. package/dist/node/include/stream_pipe.h +76 -0
  239. package/dist/node/include/stream_wrap.h +132 -0
  240. package/dist/node/include/string_bytes.h +113 -0
  241. package/dist/node/include/string_decoder-inl.h +31 -0
  242. package/dist/node/include/string_decoder.h +49 -0
  243. package/dist/node/include/tcp_wrap.h +105 -0
  244. package/dist/node/include/threadpoolwork-inl.h +70 -0
  245. package/dist/node/include/timer_wrap-inl.h +32 -0
  246. package/dist/node/include/timer_wrap.h +85 -0
  247. package/dist/node/include/timers.h +70 -0
  248. package/dist/node/include/tracing/agent.h +195 -0
  249. package/dist/node/include/tracing/node_trace_buffer.h +83 -0
  250. package/dist/node/include/tracing/node_trace_writer.h +75 -0
  251. package/dist/node/include/tracing/trace_event.h +722 -0
  252. package/dist/node/include/tracing/trace_event_common.h +1109 -0
  253. package/dist/node/include/tracing/traced_value.h +129 -0
  254. package/dist/node/include/tty_wrap.h +65 -0
  255. package/dist/node/include/udp_wrap.h +230 -0
  256. package/dist/node/include/undici_version.h +6 -0
  257. package/dist/node/include/util-inl.h +700 -0
  258. package/dist/node/include/util.h +1021 -0
  259. package/dist/node/include/uv/aix.h +32 -0
  260. package/dist/node/include/uv/bsd.h +34 -0
  261. package/dist/node/include/uv/darwin.h +61 -0
  262. package/dist/node/include/uv/errno.h +483 -0
  263. package/dist/node/include/uv/linux.h +34 -0
  264. package/dist/node/include/uv/os390.h +33 -0
  265. package/dist/node/include/uv/posix.h +31 -0
  266. package/dist/node/include/uv/sunos.h +44 -0
  267. package/dist/node/include/uv/threadpool.h +37 -0
  268. package/dist/node/include/uv/tree.h +521 -0
  269. package/dist/node/include/uv/unix.h +512 -0
  270. package/dist/node/include/uv/version.h +43 -0
  271. package/dist/node/include/uv/win.h +698 -0
  272. package/dist/node/include/uv.h +1990 -0
  273. package/dist/node/include/v8-array-buffer.h +525 -0
  274. package/dist/node/include/v8-callbacks.h +462 -0
  275. package/dist/node/include/v8-container.h +183 -0
  276. package/dist/node/include/v8-context.h +485 -0
  277. package/dist/node/include/v8-cppgc.h +245 -0
  278. package/dist/node/include/v8-data.h +80 -0
  279. package/dist/node/include/v8-date.h +48 -0
  280. package/dist/node/include/v8-debug.h +168 -0
  281. package/dist/node/include/v8-embedder-heap.h +82 -0
  282. package/dist/node/include/v8-embedder-state-scope.h +52 -0
  283. package/dist/node/include/v8-exception.h +223 -0
  284. package/dist/node/include/v8-extension.h +62 -0
  285. package/dist/node/include/v8-external.h +37 -0
  286. package/dist/node/include/v8-fast-api-calls.h +984 -0
  287. package/dist/node/include/v8-forward.h +82 -0
  288. package/dist/node/include/v8-function-callback.h +607 -0
  289. package/dist/node/include/v8-function.h +140 -0
  290. package/dist/node/include/v8-handle-base.h +137 -0
  291. package/dist/node/include/v8-initialization.h +289 -0
  292. package/dist/node/include/v8-inspector-protocol.h +13 -0
  293. package/dist/node/include/v8-inspector.h +419 -0
  294. package/dist/node/include/v8-internal.h +1397 -0
  295. package/dist/node/include/v8-isolate.h +1767 -0
  296. package/dist/node/include/v8-json.h +47 -0
  297. package/dist/node/include/v8-local-handle.h +758 -0
  298. package/dist/node/include/v8-locker.h +138 -0
  299. package/dist/node/include/v8-maybe.h +160 -0
  300. package/dist/node/include/v8-memory-span.h +198 -0
  301. package/dist/node/include/v8-message.h +233 -0
  302. package/dist/node/include/v8-metrics.h +264 -0
  303. package/dist/node/include/v8-microtask-queue.h +157 -0
  304. package/dist/node/include/v8-microtask.h +28 -0
  305. package/dist/node/include/v8-object.h +824 -0
  306. package/dist/node/include/v8-persistent-handle.h +582 -0
  307. package/dist/node/include/v8-platform.h +1358 -0
  308. package/dist/node/include/v8-primitive-object.h +118 -0
  309. package/dist/node/include/v8-primitive.h +877 -0
  310. package/dist/node/include/v8-profiler.h +1302 -0
  311. package/dist/node/include/v8-promise.h +174 -0
  312. package/dist/node/include/v8-proxy.h +50 -0
  313. package/dist/node/include/v8-regexp.h +106 -0
  314. package/dist/node/include/v8-script.h +904 -0
  315. package/dist/node/include/v8-snapshot.h +266 -0
  316. package/dist/node/include/v8-source-location.h +92 -0
  317. package/dist/node/include/v8-statistics.h +238 -0
  318. package/dist/node/include/v8-template.h +1297 -0
  319. package/dist/node/include/v8-traced-handle.h +432 -0
  320. package/dist/node/include/v8-typed-array.h +390 -0
  321. package/dist/node/include/v8-unwinder-state.h +31 -0
  322. package/dist/node/include/v8-unwinder.h +132 -0
  323. package/dist/node/include/v8-util.h +665 -0
  324. package/dist/node/include/v8-value-serializer-version.h +24 -0
  325. package/dist/node/include/v8-value-serializer.h +316 -0
  326. package/dist/node/include/v8-value.h +655 -0
  327. package/dist/node/include/v8-version-string.h +38 -0
  328. package/dist/node/include/v8-version.h +20 -0
  329. package/dist/node/include/v8-wasm-trap-handler-posix.h +31 -0
  330. package/dist/node/include/v8-wasm-trap-handler-win.h +28 -0
  331. package/dist/node/include/v8-wasm.h +201 -0
  332. package/dist/node/include/v8-weak-callback-info.h +80 -0
  333. package/dist/node/include/v8.h +88 -0
  334. package/dist/node/include/v8config.h +981 -0
  335. package/dist/node/include/zlib_version.h +6 -0
  336. package/dist/node/libnode.dll +0 -0
  337. package/dist/node/libnode.lib +0 -0
  338. package/dist/node/libnodebuildinfo.json +10 -0
  339. package/dist/node/link_node.lib +0 -0
  340. package/dist/node/link_node.node +0 -0
  341. package/index.js +5 -0
  342. package/libnode.release.json +8 -0
  343. package/package.json +29 -1
@@ -0,0 +1,108 @@
1
+ #pragma once
2
+
3
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
4
+ #if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
5
+
6
+ #include <crypto/crypto_common.h>
7
+ #include <env.h>
8
+ #include <memory_tracker.h>
9
+ #include <uv.h>
10
+ #include <v8.h>
11
+ #include "data.h"
12
+ #include "defs.h"
13
+
14
+ namespace node::quic {
15
+
16
+ // A TLS 1.3 Session resumption ticket. Encapsulates both the TLS
17
+ // ticket and the encoded QUIC transport parameters. The encoded
18
+ // structure should be considered to be opaque for end users.
19
+ // In JavaScript, the ticket will be represented as a Buffer
20
+ // instance with opaque data. To resume a session, the user code
21
+ // would pass that Buffer back into to client connection API.
22
+ class SessionTicket final : public MemoryRetainer {
23
+ public:
24
+ static v8::Maybe<SessionTicket> FromV8Value(Environment* env,
25
+ v8::Local<v8::Value> value);
26
+
27
+ SessionTicket() = default;
28
+ SessionTicket(Store&& ticket, Store&& transport_params);
29
+
30
+ const uv_buf_t ticket() const;
31
+
32
+ const ngtcp2_vec transport_params() const;
33
+
34
+ v8::MaybeLocal<v8::Object> encode(Environment* env) const;
35
+
36
+ void MemoryInfo(MemoryTracker* tracker) const override;
37
+ SET_MEMORY_INFO_NAME(SessionTicket)
38
+ SET_SELF_SIZE(SessionTicket)
39
+
40
+ class AppData;
41
+
42
+ // The callback that OpenSSL will call when generating the session ticket
43
+ // and it needs to collect additional application specific data.
44
+ static int GenerateCallback(SSL* ssl, void* arg);
45
+
46
+ // The callback that OpenSSL will call when consuming the session ticket
47
+ // and it needs to pass embedded application data back into the app.
48
+ static SSL_TICKET_RETURN DecryptedCallback(SSL* ssl,
49
+ SSL_SESSION* session,
50
+ const unsigned char* keyname,
51
+ size_t keyname_len,
52
+ SSL_TICKET_STATUS status,
53
+ void* arg);
54
+
55
+ private:
56
+ Store ticket_;
57
+ Store transport_params_;
58
+ };
59
+
60
+ // SessionTicket::AppData is a utility class that is used only during the
61
+ // generation or access of TLS stateless session tickets. It exists solely to
62
+ // provide a easier way for Session::Application instances to set relevant
63
+ // metadata in the session ticket when it is created, and the extract and
64
+ // subsequently verify that data when a ticket is received and is being
65
+ // validated. The app data is completely opaque to anything other than the
66
+ // server-side of the Session::Application that sets it.
67
+ class SessionTicket::AppData final {
68
+ public:
69
+ enum class Status {
70
+ TICKET_IGNORE = SSL_TICKET_RETURN_IGNORE,
71
+ TICKET_IGNORE_RENEW = SSL_TICKET_RETURN_IGNORE_RENEW,
72
+ TICKET_USE = SSL_TICKET_RETURN_USE,
73
+ TICKET_USE_RENEW = SSL_TICKET_RETURN_USE_RENEW,
74
+ };
75
+
76
+ explicit AppData(SSL* session);
77
+ DISALLOW_COPY_AND_MOVE(AppData)
78
+
79
+ bool Set(const uv_buf_t& data);
80
+ std::optional<const uv_buf_t> Get() const;
81
+
82
+ // A source of application data collected during the creation of the
83
+ // session ticket. This interface will be implemented by the QUIC
84
+ // Session.
85
+ class Source {
86
+ public:
87
+ enum class Flag { STATUS_NONE, STATUS_RENEW };
88
+
89
+ // Collect application data into the given AppData instance.
90
+ virtual void CollectSessionTicketAppData(AppData* app_data) const = 0;
91
+
92
+ // Extract application data from the given AppData instance.
93
+ virtual Status ExtractSessionTicketAppData(
94
+ const AppData& app_data, Flag flag = Flag::STATUS_NONE) = 0;
95
+ };
96
+
97
+ static void Collect(SSL* ssl);
98
+ static Status Extract(SSL* ssl);
99
+
100
+ private:
101
+ bool set_ = false;
102
+ SSL* ssl_;
103
+ };
104
+
105
+ } // namespace node::quic
106
+
107
+ #endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
108
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
@@ -0,0 +1,232 @@
1
+ #pragma once
2
+
3
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
4
+ #if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
5
+
6
+ #include <aliased_struct.h>
7
+ #include <async_wrap.h>
8
+ #include <base_object.h>
9
+ #include <dataqueue/queue.h>
10
+ #include <env.h>
11
+ #include <memory_tracker.h>
12
+ #include <node_blob.h>
13
+ #include <node_bob.h>
14
+ #include <node_http_common.h>
15
+ #include "bindingdata.h"
16
+ #include "data.h"
17
+
18
+ namespace node::quic {
19
+
20
+ class Session;
21
+
22
+ using Ngtcp2Source = bob::SourceImpl<ngtcp2_vec>;
23
+
24
+ // QUIC Stream's are simple data flows that may be:
25
+ //
26
+ // * Bidirectional (both sides can send) or Unidirectional (one side can send)
27
+ // * Server or Client Initiated
28
+ //
29
+ // The flow direction and origin of the stream are important in determining the
30
+ // write and read state (Open or Closed). Specifically:
31
+ //
32
+ // Bidirectional Stream States:
33
+ // +--------+--------------+----------+----------+
34
+ // | ON | Initiated By | Readable | Writable |
35
+ // +--------+--------------+----------+----------+
36
+ // | Server | Server | Y | Y |
37
+ // +--------+--------------+----------+----------+
38
+ // | Server | Client | Y | Y |
39
+ // +--------+--------------+----------+----------+
40
+ // | Client | Server | Y | Y |
41
+ // +--------+--------------+----------+----------+
42
+ // | Client | Client | Y | Y |
43
+ // +--------+--------------+----------+----------+
44
+ //
45
+ // Unidirectional Stream States
46
+ // +--------+--------------+----------+----------+
47
+ // | ON | Initiated By | Readable | Writable |
48
+ // +--------+--------------+----------+----------+
49
+ // | Server | Server | N | Y |
50
+ // +--------+--------------+----------+----------+
51
+ // | Server | Client | Y | N |
52
+ // +--------+--------------+----------+----------+
53
+ // | Client | Server | Y | N |
54
+ // +--------+--------------+----------+----------+
55
+ // | Client | Client | N | Y |
56
+ // +--------+--------------+----------+----------+
57
+ //
58
+ // All data sent via the Stream is buffered internally until either receipt is
59
+ // acknowledged from the peer or attempts to send are abandoned. The fact that
60
+ // data is buffered in memory makes it essential that the flow control for the
61
+ // session and the stream are properly handled. For now, we are largely relying
62
+ // on ngtcp2's default flow control mechanisms which generally should be doing
63
+ // the right thing.
64
+ //
65
+ // A Stream may be in a fully closed state (No longer readable nor writable)
66
+ // state but still have unacknowledged data in it's inbound and outbound
67
+ // queues.
68
+ //
69
+ // A Stream is gracefully closed when (a) both read and write states are closed,
70
+ // (b) all queued data has been acknowledged.
71
+ //
72
+ // The Stream may be forcefully closed immediately using destroy(err). This
73
+ // causes all queued outbound data and pending JavaScript writes are abandoned,
74
+ // and causes the Stream to be immediately closed at the ngtcp2 level without
75
+ // waiting for any outstanding acknowledgements. Keep in mind, however, that the
76
+ // peer is not notified that the stream is destroyed and may attempt to continue
77
+ // sending data and acknowledgements.
78
+ //
79
+ // QUIC streams in general do not have headers. Some QUIC applications, however,
80
+ // may associate headers with the stream (HTTP/3 for instance).
81
+ class Stream : public AsyncWrap,
82
+ public Ngtcp2Source,
83
+ public DataQueue::BackpressureListener {
84
+ public:
85
+ using Header = NgHeaderBase<BindingData>;
86
+
87
+ static Stream* From(void* stream_user_data);
88
+
89
+ static bool HasInstance(Environment* env, v8::Local<v8::Value> value);
90
+ static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
91
+ Environment* env);
92
+ static void Initialize(Environment* env, v8::Local<v8::Object> target);
93
+ static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
94
+
95
+ static BaseObjectPtr<Stream> Create(
96
+ Session* session,
97
+ int64_t id,
98
+ std::shared_ptr<DataQueue> source = nullptr);
99
+
100
+ // The constructor is only public to be visible by MakeDetachedBaseObject.
101
+ // Call Create to create new instances of Stream.
102
+ Stream(BaseObjectWeakPtr<Session> session,
103
+ v8::Local<v8::Object> obj,
104
+ int64_t id,
105
+ std::shared_ptr<DataQueue> source);
106
+ ~Stream() override;
107
+
108
+ int64_t id() const;
109
+ Side origin() const;
110
+ Direction direction() const;
111
+ Session& session() const;
112
+
113
+ bool is_destroyed() const;
114
+
115
+ // True if we've completely sent all outbound data for this stream.
116
+ bool is_eos() const;
117
+
118
+ bool is_readable() const;
119
+ bool is_writable() const;
120
+
121
+ // Called by the session/application to indicate that the specified number
122
+ // of bytes have been acknowledged by the peer.
123
+ void Acknowledge(size_t datalen);
124
+ void Commit(size_t datalen);
125
+ void EndWritable();
126
+ void EndReadable(std::optional<uint64_t> maybe_final_size = std::nullopt);
127
+ void EntryRead(size_t amount) override;
128
+
129
+ // Pulls data from the internal outbound DataQueue configured for this stream.
130
+ int DoPull(bob::Next<ngtcp2_vec> next,
131
+ int options,
132
+ ngtcp2_vec* data,
133
+ size_t count,
134
+ size_t max_count_hint) override;
135
+
136
+ // Forcefully close the stream immediately. All queued data and pending
137
+ // writes are abandoned, and the stream is immediately closed at the ngtcp2
138
+ // level without waiting for any outstanding acknowledgements.
139
+ void Destroy(QuicError error = QuicError());
140
+
141
+ struct ReceiveDataFlags final {
142
+ // Identifies the final chunk of data that the peer will send for the
143
+ // stream.
144
+ bool fin = false;
145
+ // Indicates that this chunk of data was received in a 0RTT packet before
146
+ // the TLS handshake completed, suggesting that is is not as secure and
147
+ // could be replayed by an attacker.
148
+ bool early = false;
149
+ };
150
+
151
+ void ReceiveData(const uint8_t* data, size_t len, ReceiveDataFlags flags);
152
+ void ReceiveStopSending(QuicError error);
153
+ void ReceiveStreamReset(uint64_t final_size, QuicError error);
154
+
155
+ void BeginHeaders(HeadersKind kind);
156
+ // Returns false if the header cannot be added. This will typically happen
157
+ // if the application does not support headers, a maximum number of headers
158
+ // have already been added, or the maximum total header length is reached.
159
+ bool AddHeader(const Header& header);
160
+ void set_headers_kind(HeadersKind kind);
161
+
162
+ SET_NO_MEMORY_INFO()
163
+ SET_MEMORY_INFO_NAME(Stream)
164
+ SET_SELF_SIZE(Stream)
165
+
166
+ struct State;
167
+ struct Stats;
168
+
169
+ // Notifies the JavaScript side that sending data on the stream has been
170
+ // blocked because of flow control restriction.
171
+ void EmitBlocked();
172
+
173
+ // Delivers the set of inbound headers that have been collected.
174
+ void EmitHeaders();
175
+
176
+ private:
177
+ struct Impl;
178
+ class Outbound;
179
+
180
+ // Gets a reader for the data received for this stream from the peer,
181
+ BaseObjectPtr<Blob::Reader> get_reader();
182
+
183
+ void set_final_size(uint64_t amount);
184
+ void set_outbound(std::shared_ptr<DataQueue> source);
185
+
186
+ // JavaScript callouts
187
+
188
+ // Notifies the JavaScript side that the stream has been destroyed.
189
+ void EmitClose(const QuicError& error);
190
+
191
+ // Notifies the JavaScript side that the stream has been reset.
192
+ void EmitReset(const QuicError& error);
193
+
194
+ // Notifies the JavaScript side that the application is ready to receive
195
+ // trailing headers.
196
+ void EmitWantTrailers();
197
+
198
+ AliasedStruct<Stats> stats_;
199
+ AliasedStruct<State> state_;
200
+ BaseObjectWeakPtr<Session> session_;
201
+ const Side origin_;
202
+ const Direction direction_;
203
+ std::unique_ptr<Outbound> outbound_;
204
+ std::shared_ptr<DataQueue> inbound_;
205
+
206
+ v8::LocalVector<v8::Value> headers_;
207
+ HeadersKind headers_kind_ = HeadersKind::INITIAL;
208
+ size_t headers_length_ = 0;
209
+
210
+ friend struct Impl;
211
+
212
+ public:
213
+ // The Queue/Schedule/Unschedule here are part of the mechanism used to
214
+ // determine which streams have data to send on the session. When a stream
215
+ // potentially has data available, it will be scheduled in the Queue. Then,
216
+ // when the Session::Application starts sending pending data, it will check
217
+ // the queue to see if there are streams waiting. If there are, it will grab
218
+ // one and check to see if there is data to send. When a stream does not have
219
+ // data to send (such as when it is initially created or is using an async
220
+ // source that is still waiting for data to be pushed) it will not appear in
221
+ // the queue.
222
+ ListNode<Stream> stream_queue_;
223
+ using Queue = ListHead<Stream, &Stream::stream_queue_>;
224
+
225
+ void Schedule(Queue* queue);
226
+ void Unschedule();
227
+ };
228
+
229
+ } // namespace node::quic
230
+
231
+ #endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
232
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
@@ -0,0 +1,227 @@
1
+ #pragma once
2
+
3
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
4
+ #if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
5
+
6
+ #include <base_object.h>
7
+ #include <crypto/crypto_context.h>
8
+ #include <crypto/crypto_keys.h>
9
+ #include <memory_tracker.h>
10
+ #include <ncrypto.h>
11
+ #include <ngtcp2/ngtcp2_crypto.h>
12
+ #include "bindingdata.h"
13
+ #include "data.h"
14
+ #include "defs.h"
15
+ #include "sessionticket.h"
16
+
17
+ namespace node::quic {
18
+
19
+ class Session;
20
+ class TLSContext;
21
+
22
+ // Every QUIC Session has exactly one TLSSession that maintains the state
23
+ // of the TLS handshake and negotiated keys after the handshake has been
24
+ // completed. It is separated out from the main Session class only as a
25
+ // convenience to help make the code more maintainable and understandable.
26
+ // A TLSSession is created from a TLSContext and maintains a reference to
27
+ // the context.
28
+ class TLSSession final : public MemoryRetainer {
29
+ public:
30
+ static const TLSSession& From(const SSL* ssl);
31
+
32
+ // The constructor is public in order to satisfy the call to std::make_unique
33
+ // in TLSContext::NewSession. It should not be called directly.
34
+ TLSSession(Session* session,
35
+ std::shared_ptr<TLSContext> context,
36
+ const std::optional<SessionTicket>& maybeSessionTicket);
37
+ DISALLOW_COPY_AND_MOVE(TLSSession)
38
+
39
+ inline operator bool() const { return ssl_ != nullptr; }
40
+ inline Session& session() const { return *session_; }
41
+ inline TLSContext& context() const { return *context_; }
42
+
43
+ // Returns true if the handshake has been completed and early data was
44
+ // accepted by the TLS session. This will assert if the handshake has
45
+ // not been completed.
46
+ bool early_data_was_accepted() const;
47
+
48
+ v8::MaybeLocal<v8::Object> cert(Environment* env) const;
49
+ v8::MaybeLocal<v8::Object> peer_cert(Environment* env) const;
50
+ v8::MaybeLocal<v8::Object> ephemeral_key(Environment* env) const;
51
+ v8::MaybeLocal<v8::Value> cipher_name(Environment* env) const;
52
+ v8::MaybeLocal<v8::Value> cipher_version(Environment* env) const;
53
+
54
+ // The SNI (server name) negotiated for the session
55
+ const std::string_view servername() const;
56
+
57
+ // The ALPN (protocol name) negotiated for the session
58
+ const std::string_view alpn() const;
59
+
60
+ // Triggers key update to begin. This will fail and return false if either a
61
+ // previous key update is in progress or if the initial handshake has not yet
62
+ // been confirmed.
63
+ bool InitiateKeyUpdate();
64
+
65
+ struct PeerIdentityValidationError {
66
+ v8::MaybeLocal<v8::Value> reason;
67
+ v8::MaybeLocal<v8::Value> code;
68
+ };
69
+
70
+ // Checks the peer identity against the configured CA and CRL. If the peer
71
+ // certificate is valid, std::nullopt is returned. Otherwise a
72
+ // PeerIdentityValidationError is returned with the reason and code for the
73
+ // failure.
74
+ std::optional<PeerIdentityValidationError> VerifyPeerIdentity(
75
+ Environment* env);
76
+
77
+ inline const std::string_view validation_error() const {
78
+ return validation_error_;
79
+ }
80
+
81
+ SET_NO_MEMORY_INFO()
82
+ SET_MEMORY_INFO_NAME(TLSSession)
83
+ SET_SELF_SIZE(TLSSession)
84
+
85
+ private:
86
+ operator SSL*() const;
87
+ ncrypto::SSLPointer Initialize(
88
+ const std::optional<SessionTicket>& maybeSessionTicket);
89
+
90
+ static ngtcp2_conn* connection(ngtcp2_crypto_conn_ref* ref);
91
+
92
+ ngtcp2_crypto_conn_ref ref_;
93
+ std::shared_ptr<TLSContext> context_;
94
+ Session* session_;
95
+ ncrypto::SSLPointer ssl_;
96
+ ncrypto::BIOPointer bio_trace_;
97
+ std::string validation_error_ = "";
98
+ bool in_key_update_ = false;
99
+ };
100
+
101
+ // The TLSContext is used to create a TLSSession. For the client, there is
102
+ // typically only a single TLSContext for each TLSSession. For the server,
103
+ // there is a single TLSContext for the server and a TLSSession for every
104
+ // QUIC session created by that server.
105
+ class TLSContext final : public MemoryRetainer,
106
+ public std::enable_shared_from_this<TLSContext> {
107
+ public:
108
+ static constexpr auto DEFAULT_CIPHERS = "TLS_AES_128_GCM_SHA256:"
109
+ "TLS_AES_256_GCM_SHA384:"
110
+ "TLS_CHACHA20_POLY1305_"
111
+ "SHA256:TLS_AES_128_CCM_SHA256";
112
+ static constexpr auto DEFAULT_GROUPS = "X25519:P-256:P-384:P-521";
113
+
114
+ struct Options final : public MemoryRetainer {
115
+ // The SNI servername to use for this session. This option is only used by
116
+ // the client.
117
+ std::string sni = "localhost";
118
+
119
+ // The ALPN (protocol name) to use for this session. This option is only
120
+ // used by the client.
121
+ std::string alpn = NGHTTP3_ALPN_H3;
122
+
123
+ // The list of TLS ciphers to use for this session.
124
+ std::string ciphers = DEFAULT_CIPHERS;
125
+
126
+ // The list of TLS groups to use for this session.
127
+ std::string groups = DEFAULT_GROUPS;
128
+
129
+ // When true, enables keylog output for the session.
130
+ bool keylog = false;
131
+
132
+ // When true, the peer certificate is verified against the list of supplied
133
+ // CA. If verification fails, the connection will be refused. When set,
134
+ // instructs the server session to request a client auth certificate. This
135
+ // option is only used by the server side.
136
+ bool verify_client = false;
137
+
138
+ // When true, enables TLS tracing for the session. This should only be used
139
+ // for debugging.
140
+ // JavaScript option name "tlsTrace".
141
+ bool enable_tls_trace = false;
142
+
143
+ // When true, causes the private key passed in for the session to be
144
+ // verified.
145
+ // JavaScript option name "verifyPrivateKey"
146
+ bool verify_private_key = false;
147
+
148
+ // The TLS private key(s) to use for this session.
149
+ // JavaScript option name "keys"
150
+ std::vector<crypto::KeyObjectData> keys;
151
+
152
+ // Collection of certificates to use for this session.
153
+ // JavaScript option name "certs"
154
+ std::vector<Store> certs;
155
+
156
+ // Optional certificate authority overrides to use.
157
+ // JavaScript option name "ca"
158
+ std::vector<Store> ca;
159
+
160
+ // Optional certificate revocation lists to use.
161
+ // JavaScript option name "crl"
162
+ std::vector<Store> crl;
163
+
164
+ void MemoryInfo(MemoryTracker* tracker) const override;
165
+ SET_MEMORY_INFO_NAME(TLSContext::Options)
166
+ SET_SELF_SIZE(Options)
167
+
168
+ // The default TLS configuration.
169
+ static const Options kDefault;
170
+
171
+ static v8::Maybe<Options> From(Environment* env,
172
+ v8::Local<v8::Value> value);
173
+
174
+ std::string ToString() const;
175
+ };
176
+
177
+ static std::shared_ptr<TLSContext> CreateClient(const Options& options);
178
+ static std::shared_ptr<TLSContext> CreateServer(const Options& options);
179
+
180
+ TLSContext(Side side, const Options& options);
181
+ DISALLOW_COPY_AND_MOVE(TLSContext)
182
+
183
+ // Each QUIC Session has exactly one TLSSession. Each TLSSession maintains
184
+ // a reference to the TLSContext used to create it.
185
+ std::unique_ptr<TLSSession> NewSession(
186
+ Session* session, const std::optional<SessionTicket>& maybeSessionTicket);
187
+
188
+ inline Side side() const { return side_; }
189
+ inline const Options& options() const { return options_; }
190
+ inline operator bool() const { return ctx_ != nullptr; }
191
+
192
+ inline const std::string_view validation_error() const {
193
+ return validation_error_;
194
+ }
195
+
196
+ void MemoryInfo(MemoryTracker* tracker) const override;
197
+ SET_MEMORY_INFO_NAME(TLSContext)
198
+ SET_SELF_SIZE(TLSContext)
199
+
200
+ private:
201
+ ncrypto::SSLCtxPointer Initialize();
202
+ operator SSL_CTX*() const;
203
+
204
+ static void OnKeylog(const SSL* ssl, const char* line);
205
+ static int OnNewSession(SSL* ssl, SSL_SESSION* session);
206
+ static int OnSelectAlpn(SSL* ssl,
207
+ const unsigned char** out,
208
+ unsigned char* outlen,
209
+ const unsigned char* in,
210
+ unsigned int inlen,
211
+ void* arg);
212
+ static int OnVerifyClientCertificate(int preverify_ok, X509_STORE_CTX* ctx);
213
+
214
+ Side side_;
215
+ Options options_;
216
+ ncrypto::X509Pointer cert_;
217
+ ncrypto::X509Pointer issuer_;
218
+ ncrypto::SSLCtxPointer ctx_;
219
+ std::string validation_error_ = "";
220
+
221
+ friend class TLSSession;
222
+ };
223
+
224
+ } // namespace node::quic
225
+
226
+ #endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
227
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS