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