@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,140 @@
1
+ #ifndef SRC_CRYPTO_CRYPTO_X509_H_
2
+ #define SRC_CRYPTO_CRYPTO_X509_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include "base_object.h"
7
+ #include "crypto/crypto_util.h"
8
+ #include "env.h"
9
+ #include "memory_tracker.h"
10
+ #include "ncrypto.h"
11
+ #include "node_worker.h"
12
+ #include "v8.h"
13
+
14
+ namespace node {
15
+ namespace crypto {
16
+
17
+ // The ManagedX509 class is essentially a smart pointer for
18
+ // X509 objects that allows an X509Certificate instance to
19
+ // be cloned at the JS level while pointing at the same
20
+ // underlying X509 instance.
21
+ class ManagedX509 final : public MemoryRetainer {
22
+ public:
23
+ ManagedX509() = default;
24
+ explicit ManagedX509(ncrypto::X509Pointer&& cert);
25
+ ManagedX509(const ManagedX509& that);
26
+ ManagedX509& operator=(const ManagedX509& that);
27
+
28
+ operator bool() const { return !!cert_; }
29
+ X509* get() const { return cert_.get(); }
30
+ ncrypto::X509View view() const { return cert_; }
31
+ operator ncrypto::X509View() const { return cert_; }
32
+
33
+ void MemoryInfo(MemoryTracker* tracker) const override;
34
+ SET_MEMORY_INFO_NAME(ManagedX509)
35
+ SET_SELF_SIZE(ManagedX509)
36
+
37
+ private:
38
+ ncrypto::X509Pointer cert_;
39
+ };
40
+
41
+ class X509Certificate final : public BaseObject {
42
+ public:
43
+ enum class GetPeerCertificateFlag {
44
+ NONE,
45
+ SERVER
46
+ };
47
+
48
+ static void Initialize(Environment* env, v8::Local<v8::Object> target);
49
+ static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
50
+ static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
51
+ Environment* env);
52
+ static bool HasInstance(Environment* env, v8::Local<v8::Object> object);
53
+
54
+ static v8::MaybeLocal<v8::Object> New(
55
+ Environment* env,
56
+ ncrypto::X509Pointer cert,
57
+ STACK_OF(X509) * issuer_chain = nullptr);
58
+
59
+ static v8::MaybeLocal<v8::Object> New(
60
+ Environment* env,
61
+ std::shared_ptr<ManagedX509> cert,
62
+ STACK_OF(X509)* issuer_chain = nullptr);
63
+
64
+ static v8::MaybeLocal<v8::Object> GetCert(Environment* env,
65
+ const ncrypto::SSLPointer& ssl);
66
+
67
+ static v8::MaybeLocal<v8::Object> GetPeerCert(Environment* env,
68
+ const ncrypto::SSLPointer& ssl,
69
+ GetPeerCertificateFlag flag);
70
+
71
+ static v8::Local<v8::Object> Wrap(Environment* env,
72
+ v8::Local<v8::Object> object,
73
+ ncrypto::X509Pointer cert);
74
+
75
+ inline BaseObjectPtr<X509Certificate> getIssuerCert() const {
76
+ return issuer_cert_;
77
+ }
78
+
79
+ inline ncrypto::X509View view() const { return *cert_; }
80
+ X509* get() { return cert_->get(); }
81
+
82
+ v8::MaybeLocal<v8::Value> toObject(Environment* env);
83
+ static v8::MaybeLocal<v8::Value> toObject(Environment* env,
84
+ const ncrypto::X509View& cert);
85
+
86
+ void MemoryInfo(MemoryTracker* tracker) const override;
87
+ SET_MEMORY_INFO_NAME(X509Certificate)
88
+ SET_SELF_SIZE(X509Certificate)
89
+
90
+ class X509CertificateTransferData : public worker::TransferData {
91
+ public:
92
+ explicit X509CertificateTransferData(
93
+ const std::shared_ptr<ManagedX509>& data)
94
+ : data_(data) {}
95
+
96
+ BaseObjectPtr<BaseObject> Deserialize(
97
+ Environment* env,
98
+ v8::Local<v8::Context> context,
99
+ std::unique_ptr<worker::TransferData> self) override;
100
+
101
+ SET_MEMORY_INFO_NAME(X509CertificateTransferData)
102
+ SET_SELF_SIZE(X509CertificateTransferData)
103
+ SET_NO_MEMORY_INFO()
104
+
105
+ private:
106
+ std::shared_ptr<ManagedX509> data_;
107
+ };
108
+
109
+ BaseObject::TransferMode GetTransferMode() const override;
110
+ std::unique_ptr<worker::TransferData> CloneForMessaging() const override;
111
+
112
+ private:
113
+ X509Certificate(Environment* env,
114
+ v8::Local<v8::Object> object,
115
+ std::shared_ptr<ManagedX509> cert,
116
+ v8::Local<v8::Object> issuer_chain = v8::Local<v8::Object>());
117
+
118
+ std::shared_ptr<ManagedX509> cert_;
119
+ BaseObjectPtr<X509Certificate> issuer_cert_;
120
+ };
121
+
122
+ inline X509Certificate::GetPeerCertificateFlag operator|(
123
+ X509Certificate::GetPeerCertificateFlag lhs,
124
+ X509Certificate::GetPeerCertificateFlag rhs) {
125
+ return static_cast<X509Certificate::GetPeerCertificateFlag>(
126
+ static_cast<int>(lhs) | static_cast<int>(rhs));
127
+ }
128
+
129
+ inline X509Certificate::GetPeerCertificateFlag operator&(
130
+ X509Certificate::GetPeerCertificateFlag lhs,
131
+ X509Certificate::GetPeerCertificateFlag rhs) {
132
+ return static_cast<X509Certificate::GetPeerCertificateFlag>(
133
+ static_cast<int>(lhs) & static_cast<int>(rhs));
134
+ }
135
+
136
+ } // namespace crypto
137
+ } // namespace node
138
+
139
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
140
+ #endif // SRC_CRYPTO_CRYPTO_X509_H_
@@ -0,0 +1,306 @@
1
+ #pragma once
2
+
3
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
4
+
5
+ #include <base_object.h>
6
+ #include <memory_tracker.h>
7
+ #include <node.h>
8
+ #include <node_bob.h>
9
+ #include <node_file.h>
10
+ #include <stream_base.h>
11
+ #include <uv.h>
12
+ #include <v8.h>
13
+
14
+ #include <memory>
15
+ #include <optional>
16
+ #include <vector>
17
+
18
+ namespace node {
19
+
20
+ // Represents a sequenced collection of data sources that can be
21
+ // consumed as a single logical stream of data. Sources can be
22
+ // memory-resident or streaming.
23
+ //
24
+ // There are two essential kinds of DataQueue:
25
+ //
26
+ // * Idempotent - Multiple reads always produce the same result.
27
+ // This is even the case if individual sources
28
+ // are not memory-resident. Reads never change
29
+ // the state of the DataQueue. Every entry in
30
+ // an Idempotent DataQueue must also be idempotent.
31
+ //
32
+ // * Non-idempotent - Reads are destructive of the internal state.
33
+ // A non-idempotent DataQueue can be read at
34
+ // most once and only by a single reader.
35
+ // Entries in a non-idempotent DataQueue can
36
+ // be a mix of idempotent and non-idempotent
37
+ // entries.
38
+ //
39
+ // The DataQueue is essentially a collection of DataQueue::Entry
40
+ // instances. A DataQueue::Entry is a single logical source of
41
+ // data. The data may be memory-resident or streaming. The entry
42
+ // can be idempotent or non-idempotent. An entry cannot be read
43
+ // by itself, it must be part of a DataQueue to be consumed.
44
+ //
45
+ // Example of creating an idempotent DataQueue:
46
+ //
47
+ // std::shared_ptr<v8::BackingStore> store1 = getBackingStoreSomehow();
48
+ // std::shared_ptr<v8::BackingStore> store2 = getBackingStoreSomehow();
49
+ //
50
+ // std::vector<std::unique_ptr<DataQueue::Entry>> list;
51
+ // list.push_back(DataQueue::CreateInMemoryEntryFromBackingStore(
52
+ // store1, 0, len1));
53
+ // list.push_back(DataQueue::CreateInMemoryEntryFromBackingStore(
54
+ // store2, 0, len2));
55
+ //
56
+ // std::shared_ptr<DataQueue> data_queue =
57
+ // DataQueue::CreateIdempotent(std::move(list));
58
+ //
59
+ // Importantly, idempotent DataQueue's are immutable and all entries
60
+ // must be provided when the DataQueue is constructed. Every entry
61
+ // must be idempotent with known sizes. The entries may be memory
62
+ // resident or streaming. Streaming entries must be capable of
63
+ // being read multiple times.
64
+ //
65
+ // Because idempotent DataQueue's will always produce the same results
66
+ // when read, they can be sliced. Slices yield a new DataQueue instance
67
+ // that is a subset view over the original:
68
+ //
69
+ // std::shared_ptr<DataQueue> slice = data_queue.slice(
70
+ // 5, v8::Just(10UL));
71
+ //
72
+ // Example of creating a non-idempotent DataQueue:
73
+ //
74
+ // std::shared_ptr<v8::BackingStore> store1 = getBackingStoreSomehow();
75
+ // std::shared_ptr<v8::BackingStore> store2 = getBackingStoreSomehow();
76
+ //
77
+ // std::shared_ptr<DataQueue> data_queue = DataQueue::Create();
78
+ //
79
+ // data_queue->append(DataQueue::CreateInMemoryEntryFromBackingStore(
80
+ // store1, 0, len1));
81
+ //
82
+ // data_queue->append(DataQueue::CreateInMemoryEntryFromBackingStore(
83
+ // store2, 0, len2));
84
+ //
85
+ // These data-queues can have new entries appended to them. Entries can
86
+ // be memory-resident or streaming. Streaming entries might not have
87
+ // a known size. Entries may not be capable of being read multiple
88
+ // times.
89
+ //
90
+ // A non-idempotent data queue will, by default, allow any amount of
91
+ // entries to be appended to it. To limit the size of the DataQueue,
92
+ // or the close the DataQueue (preventing new entries from being
93
+ // appending), use the cap() method. The DataQueue can be capped
94
+ // at a specific size or whatever size it currently it.
95
+ //
96
+ // It might not be possible for a non-idempotent DataQueue to provide
97
+ // a size because it might not know how much data a streaming entry
98
+ // will ultimately provide.
99
+ //
100
+ // Non-idempotent DataQueues cannot be sliced.
101
+ //
102
+ // To read from a DataQueue, we use the node::bob::Source API
103
+ // (see src/node_bob.h).
104
+ //
105
+ // std::shared_ptr<DataQueue::Reader> reader = data_queue->get_reader();
106
+ //
107
+ // reader->Pull(
108
+ // [](int status, const DataQueue::Vec* vecs,
109
+ // uint64_t count, Done done) {
110
+ // // status is one of node::bob::Status
111
+ // // vecs is zero or more data buffers containing the read data
112
+ // // count is the number of vecs
113
+ // // done is a callback to be invoked when done processing the data
114
+ // }, options, nullptr, 0, 16);
115
+ //
116
+ // Keep calling Pull() until status is equal to node::bob::Status::STATUS_EOS.
117
+ //
118
+ // For idempotent DataQueues, any number of readers can be created and
119
+ // pull concurrently from the same DataQueue. The DataQueue can be read
120
+ // multiple times. Successful reads should always produce the same result.
121
+ // If, for whatever reason, the implementation cannot ensure that the
122
+ // data read will remain the same, the read must fail with an error status.
123
+ //
124
+ // For non-idempotent DataQueues, only a single reader is ever allowed for
125
+ // the DataQueue, and the data can only ever be read once.
126
+
127
+ class DataQueue : public MemoryRetainer {
128
+ public:
129
+ struct Vec {
130
+ uint8_t* base;
131
+ uint64_t len;
132
+ };
133
+
134
+ // A DataQueue::Reader consumes the DataQueue. If the data queue is
135
+ // idempotent, multiple Readers can be attached to the DataQueue at
136
+ // any given time, all guaranteed to yield the same result when the
137
+ // data is read. Otherwise, only a single Reader can be attached.
138
+ class Reader : public MemoryRetainer, public bob::Source<Vec> {
139
+ public:
140
+ using Next = bob::Next<Vec>;
141
+ using Done = bob::Done;
142
+ };
143
+
144
+ // A BackpressureListener can be used to receive notifications
145
+ // when a non-idempotent DataQueue releases entries as they
146
+ // are consumed.
147
+ class BackpressureListener {
148
+ public:
149
+ virtual void EntryRead(size_t amount) = 0;
150
+ };
151
+
152
+ // A DataQueue::Entry represents a logical chunk of data in the queue.
153
+ // The entry may or may not represent memory-resident data. It may
154
+ // or may not be consumable more than once.
155
+ class Entry : public MemoryRetainer {
156
+ public:
157
+ // Returns a new Entry that is a view over this entries data
158
+ // from the start offset to the ending offset. If the end
159
+ // offset is omitted, the slice extends to the end of the
160
+ // data.
161
+ //
162
+ // Creating a slice is only possible if is_idempotent() returns
163
+ // true. This is because consuming either the original entry or
164
+ // the new entry would change the state of the other in non-
165
+ // deterministic ways. When is_idempotent() returns false, slice()
166
+ // must return a nulled unique_ptr.
167
+ //
168
+ // Creating a slice is also only possible if the size of the
169
+ // entry is known. If size() returns std::nullopt, slice()
170
+ // must return a nulled unique_ptr.
171
+ virtual std::unique_ptr<Entry> slice(
172
+ uint64_t start, std::optional<uint64_t> end = std::nullopt) = 0;
173
+
174
+ // Returns the number of bytes represented by this Entry if it is
175
+ // known. Certain types of entries, such as those backed by streams
176
+ // might not know the size in advance and therefore cannot provide
177
+ // a value. In such cases, size() must return v8::Nothing<uint64_t>.
178
+ //
179
+ // If the entry is idempotent, a size should always be available.
180
+ virtual std::optional<uint64_t> size() const = 0;
181
+
182
+ // When true, multiple reads on the object must produce the exact
183
+ // same data or the reads will fail. Some sources of entry data,
184
+ // such as streams, may not be capable of preserving idempotency
185
+ // and therefore must not claim to be. If an entry claims to be
186
+ // idempotent and cannot preserve that quality, subsequent reads
187
+ // must fail with an error when a variance is detected.
188
+ virtual bool is_idempotent() const = 0;
189
+ };
190
+
191
+ // Creates an idempotent DataQueue with a pre-established collection
192
+ // of entries. All of the entries must also be idempotent otherwise
193
+ // an empty std::unique_ptr will be returned.
194
+ static std::shared_ptr<DataQueue> CreateIdempotent(
195
+ std::vector<std::unique_ptr<Entry>> list);
196
+
197
+ // Creates a non-idempotent DataQueue. This kind of queue can be
198
+ // mutated and updated such that multiple reads are not guaranteed
199
+ // to produce the same result. The entries added can be of any type.
200
+ static std::shared_ptr<DataQueue> Create(
201
+ std::optional<uint64_t> capped = std::nullopt);
202
+
203
+ // Creates an idempotent Entry from a v8::ArrayBufferView. To help
204
+ // ensure idempotency, the underlying ArrayBuffer is detached from
205
+ // the BackingStore. It is the callers responsibility to ensure that
206
+ // the BackingStore is not otherwise modified through any other
207
+ // means. If the ArrayBuffer is not detachable, nullptr will be
208
+ // returned.
209
+ static std::unique_ptr<Entry> CreateInMemoryEntryFromView(
210
+ v8::Local<v8::ArrayBufferView> view);
211
+
212
+ // Creates an idempotent Entry from a v8::BackingStore. It is the
213
+ // callers responsibility to ensure that the BackingStore is not
214
+ // otherwise modified through any other means. If the ArrayBuffer
215
+ // is not detachable, nullptr will be returned.
216
+ static std::unique_ptr<Entry> CreateInMemoryEntryFromBackingStore(
217
+ std::shared_ptr<v8::BackingStore> store,
218
+ uint64_t offset,
219
+ uint64_t length);
220
+
221
+ static std::unique_ptr<Entry> CreateDataQueueEntry(
222
+ std::shared_ptr<DataQueue> data_queue);
223
+
224
+ static std::unique_ptr<Entry> CreateFdEntry(Environment* env,
225
+ v8::Local<v8::Value> path);
226
+
227
+ // Creates a Reader for the given queue. If the queue is idempotent,
228
+ // any number of readers can be created, all of which are guaranteed
229
+ // to provide the same data. Otherwise, only a single reader is
230
+ // permitted.
231
+ virtual std::shared_ptr<Reader> get_reader() = 0;
232
+
233
+ // Append a single new entry to the queue. Appending is only allowed
234
+ // when is_idempotent() is false. std::nullopt will be returned
235
+ // if is_idempotent() is true. std::optional(false) will be returned if the
236
+ // data queue is not idempotent but the entry otherwise cannot be added.
237
+ virtual std::optional<bool> append(std::unique_ptr<Entry> entry) = 0;
238
+
239
+ // Caps the size of this DataQueue preventing additional entries to
240
+ // be added if those cause the size to extend beyond the specified
241
+ // limit.
242
+ //
243
+ // If limit is zero, or is less than the known current size of the
244
+ // data queue, the limit is set to the current known size, meaning
245
+ // that no additional entries can be added at all.
246
+ //
247
+ // If the size of the data queue is not known, the limit will be
248
+ // ignored and no additional entries will be allowed at all.
249
+ //
250
+ // If is_idempotent is true capping is unnecessary because the data
251
+ // queue cannot be appended to. In that case, cap() is a non-op.
252
+ //
253
+ // If the data queue has already been capped, cap can be called
254
+ // again with a smaller size.
255
+ virtual void cap(uint64_t limit = 0) = 0;
256
+
257
+ // Returns a new DataQueue that is a view over this queues data
258
+ // from the start offset to the ending offset. If the end offset
259
+ // is omitted, the slice extends to the end of the data.
260
+ //
261
+ // The slice will coverage a range from start up to, but excluding, end.
262
+ //
263
+ // Creating a slice is only possible if is_idempotent() returns
264
+ // true. This is because consuming either the original DataQueue or
265
+ // the new queue would change the state of the other in non-
266
+ // deterministic ways. When is_idempotent() returns false, slice()
267
+ // must return a nulled unique_ptr.
268
+ //
269
+ // Creating a slice is also only possible if the size of the
270
+ // DataQueue is known. If size() returns std::nullopt, slice()
271
+ // must return a null unique_ptr.
272
+ virtual std::shared_ptr<DataQueue> slice(
273
+ uint64_t start, std::optional<uint64_t> end = std::nullopt) = 0;
274
+
275
+ // The size of DataQueue is the total size of all of its member entries.
276
+ // If any of the entries is not able to specify a size, the DataQueue
277
+ // will also be incapable of doing so, in which case size() must return
278
+ // std::nullopt.
279
+ virtual std::optional<uint64_t> size() const = 0;
280
+
281
+ // A DataQueue is idempotent only if all of its member entries are
282
+ // idempotent.
283
+ virtual bool is_idempotent() const = 0;
284
+
285
+ // True only if cap is called or the data queue is a limited to a
286
+ // fixed size.
287
+ virtual bool is_capped() const = 0;
288
+
289
+ // If the data queue has been capped, and the size of the data queue
290
+ // is known, maybeCapRemaining will return the number of additional
291
+ // bytes the data queue can receive before reaching the cap limit.
292
+ // If the size of the queue cannot be known, or the cap has not
293
+ // been set, maybeCapRemaining() will return std::nullopt.
294
+ virtual std::optional<uint64_t> maybeCapRemaining() const = 0;
295
+
296
+ // BackpressureListeners only work on non-idempotent DataQueues.
297
+ virtual void addBackpressureListener(BackpressureListener* listener) = 0;
298
+ virtual void removeBackpressureListener(BackpressureListener* listener) = 0;
299
+
300
+ static void Initialize(Environment* env, v8::Local<v8::Object> target);
301
+ static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
302
+ };
303
+
304
+ } // namespace node
305
+
306
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS