@encharm/cws 4.4.0 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node127.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_node108.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_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 +20 -24
- package/src/Socket.h +0 -1
- package/src/headers/20/acorn_version.h +1 -1
- package/src/headers/20/connection_wrap.h +1 -0
- package/src/headers/20/crypto/crypto_keys.h +3 -0
- package/src/headers/20/crypto/crypto_tls.h +12 -3
- package/src/headers/20/crypto/crypto_util.h +3 -2
- package/src/headers/20/env_properties.h +3 -1
- package/src/headers/20/js_native_api.h +11 -1
- package/src/headers/20/js_native_api_v8.h +40 -3
- package/src/headers/20/js_native_api_v8_internals.h +6 -0
- package/src/headers/20/module_wrap.h +1 -1
- package/src/headers/20/node.h +2 -0
- package/src/headers/20/node_api.h +8 -7
- package/src/headers/20/node_constants.h +3 -0
- package/src/headers/20/node_contextify.h +24 -0
- package/src/headers/20/node_file-inl.h +32 -0
- package/src/headers/20/node_file.h +25 -12
- package/src/headers/20/node_options.h +9 -9
- package/src/headers/20/node_version.h +1 -1
- package/src/headers/20/permission/child_process_permission.h +2 -1
- package/src/headers/20/permission/fs_permission.h +11 -9
- package/src/headers/20/permission/inspector_permission.h +29 -0
- package/src/headers/20/permission/permission.h +4 -1
- package/src/headers/20/permission/permission_base.h +6 -2
- package/src/headers/20/permission/worker_permission.h +2 -1
- package/src/headers/20/undici_version.h +2 -2
- 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/{16 → 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/{18 → 22}/js_native_api.h +78 -30
- package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
- package/src/headers/{18 → 22}/js_native_api_v8.h +206 -161
- 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/{18 → 22}/node_version.h +20 -8
- 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/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-inl.h +0 -94
- 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-inl.h +0 -223
- 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_buffer.h +0 -92
- package/src/headers/14/node_constants.h +0 -84
- 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_http2_state.h +0 -149
- 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_main_instance.h +0 -96
- 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/threadpoolwork-inl.h +0 -57
- package/src/headers/14/tls_wrap.h +0 -222
- package/src/headers/14/tracing/agent.h +0 -195
- package/src/headers/14/tracing/trace_event.h +0 -720
- 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/aliased_struct-inl.h +0 -54
- package/src/headers/16/aliased_struct.h +0 -63
- 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/async_wrap.h +0 -246
- package/src/headers/16/base64-inl.h +0 -189
- package/src/headers/16/base64.h +0 -69
- package/src/headers/16/base_object.h +0 -294
- package/src/headers/16/connect_wrap.h +0 -26
- package/src/headers/16/connection_wrap.h +0 -30
- package/src/headers/16/crypto/crypto_aes.h +0 -89
- package/src/headers/16/crypto/crypto_bio.h +0 -194
- package/src/headers/16/crypto/crypto_cipher.h +0 -286
- package/src/headers/16/crypto/crypto_clienthello-inl.h +0 -90
- package/src/headers/16/crypto/crypto_clienthello.h +0 -131
- package/src/headers/16/crypto/crypto_common.h +0 -187
- package/src/headers/16/crypto/crypto_context.h +0 -147
- 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_keys.h +0 -412
- 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_tls.h +0 -292
- package/src/headers/16/crypto/crypto_util.h +0 -736
- package/src/headers/16/crypto/crypto_x509.h +0 -141
- package/src/headers/16/debug_utils.h +0 -184
- package/src/headers/16/diagnosticfilename-inl.h +0 -33
- package/src/headers/16/env-inl.h +0 -1277
- package/src/headers/16/env.h +0 -1629
- package/src/headers/16/handle_wrap.h +0 -121
- package/src/headers/16/histogram-inl.h +0 -88
- package/src/headers/16/histogram.h +0 -216
- package/src/headers/16/inspector_io.h +0 -78
- package/src/headers/16/inspector_socket.h +0 -60
- package/src/headers/16/inspector_socket_server.h +0 -110
- package/src/headers/16/js_native_api.h +0 -561
- package/src/headers/16/js_native_api_types.h +0 -160
- package/src/headers/16/js_native_api_v8.h +0 -451
- package/src/headers/16/js_native_api_v8_internals.h +0 -39
- package/src/headers/16/js_stream.h +0 -52
- package/src/headers/16/memory_tracker-inl.h +0 -356
- package/src/headers/16/memory_tracker.h +0 -284
- package/src/headers/16/node.d +0 -315
- package/src/headers/16/node.h +0 -1132
- 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_api_types.h +0 -50
- package/src/headers/16/node_binding.h +0 -99
- package/src/headers/16/node_blob.h +0 -191
- package/src/headers/16/node_bob-inl.h +0 -37
- package/src/headers/16/node_bob.h +0 -111
- 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_dir.h +0 -52
- package/src/headers/16/node_dtrace.h +0 -86
- package/src/headers/16/node_errors.h +0 -277
- package/src/headers/16/node_external_reference.h +0 -129
- package/src/headers/16/node_file-inl.h +0 -306
- package/src/headers/16/node_http2.h +0 -1140
- package/src/headers/16/node_http_common-inl.h +0 -200
- package/src/headers/16/node_http_common.h +0 -531
- package/src/headers/16/node_internals.h +0 -421
- package/src/headers/16/node_main_instance.h +0 -103
- package/src/headers/16/node_mem-inl.h +0 -112
- package/src/headers/16/node_messaging.h +0 -373
- package/src/headers/16/node_metadata.h +0 -122
- 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_object_wrap.h +0 -132
- package/src/headers/16/node_options-inl.h +0 -477
- package/src/headers/16/node_options.h +0 -494
- package/src/headers/16/node_perf.h +0 -185
- package/src/headers/16/node_perf_common.h +0 -89
- 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_sockaddr-inl.h +0 -266
- package/src/headers/16/node_sockaddr.h +0 -405
- 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_version.h +0 -98
- 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/node_worker.h +0 -145
- package/src/headers/16/req_wrap.h +0 -77
- package/src/headers/16/spawn_sync.h +0 -242
- package/src/headers/16/stream_base-inl.h +0 -303
- package/src/headers/16/stream_base.h +0 -454
- package/src/headers/16/stream_pipe.h +0 -73
- package/src/headers/16/string_bytes.h +0 -122
- package/src/headers/16/string_decoder-inl.h +0 -37
- package/src/headers/16/string_search.h +0 -638
- package/src/headers/16/tcp_wrap.h +0 -103
- package/src/headers/16/threadpoolwork-inl.h +0 -57
- package/src/headers/16/timer_wrap.h +0 -84
- package/src/headers/16/tracing/agent.h +0 -195
- 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/trace_event_common.h +0 -1109
- package/src/headers/16/tracing/traced_value.h +0 -70
- package/src/headers/16/tty_wrap.h +0 -66
- package/src/headers/16/util-inl.h +0 -575
- package/src/headers/16/util.h +0 -824
- 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/base_object-inl.h +0 -374
- package/src/headers/18/callback_queue-inl.h +0 -97
- package/src/headers/18/callback_queue.h +0 -78
- package/src/headers/18/cares_wrap.h +0 -523
- 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_cipher.h +0 -291
- 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_dh.h +0 -156
- package/src/headers/18/crypto/crypto_dsa.h +0 -77
- package/src/headers/18/crypto/crypto_ec.h +0 -170
- package/src/headers/18/crypto/crypto_groups.h +0 -415
- package/src/headers/18/crypto/crypto_hash.h +0 -89
- package/src/headers/18/crypto/crypto_hkdf.h +0 -65
- package/src/headers/18/crypto/crypto_hmac.h +0 -94
- package/src/headers/18/crypto/crypto_keygen.h +0 -305
- package/src/headers/18/crypto/crypto_pbkdf2.h +0 -76
- package/src/headers/18/crypto/crypto_random.h +0 -130
- package/src/headers/18/crypto/crypto_rsa.h +0 -141
- package/src/headers/18/crypto/crypto_scrypt.h +0 -87
- package/src/headers/18/crypto/crypto_sig.h +0 -168
- package/src/headers/18/crypto/crypto_spkac.h +0 -21
- package/src/headers/18/crypto/crypto_timing.h +0 -20
- 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_agent.h +0 -144
- package/src/headers/18/inspector_io.h +0 -78
- package/src/headers/18/inspector_profiler.h +0 -149
- 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/json_utils.h +0 -161
- 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_crypto.h +0 -57
- package/src/headers/18/node_dir.h +0 -52
- package/src/headers/18/node_dtrace.h +0 -86
- package/src/headers/18/node_external_reference.h +0 -145
- package/src/headers/18/node_file.h +0 -426
- package/src/headers/18/node_http2_state.h +0 -149
- package/src/headers/18/node_i18n.h +0 -145
- package/src/headers/18/node_mem-inl.h +0 -112
- package/src/headers/18/node_mem.h +0 -45
- package/src/headers/18/node_mutex.h +0 -323
- 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_process-inl.h +0 -26
- package/src/headers/18/node_report.h +0 -47
- package/src/headers/18/node_revert.h +0 -82
- package/src/headers/18/node_root_certs.h +0 -3246
- package/src/headers/18/node_snapshot_builder.h +0 -43
- package/src/headers/18/node_snapshotable.h +0 -130
- package/src/headers/18/node_stat_watcher.h +0 -72
- 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_v8_platform-inl.h +0 -194
- package/src/headers/18/node_wasi.h +0 -108
- package/src/headers/18/node_watchdog.h +0 -152
- 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/pipe_wrap.h +0 -80
- package/src/headers/18/req_wrap-inl.h +0 -170
- package/src/headers/18/spawn_sync.h +0 -242
- package/src/headers/18/stream_wrap.h +0 -133
- package/src/headers/18/string_decoder-inl.h +0 -37
- package/src/headers/18/string_decoder.h +0 -50
- 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/udp_wrap.h +0 -227
- package/src/headers/18/v8abbr.h +0 -123
- /package/src/headers/{14 → 20}/tracing/node_trace_buffer.h +0 -0
- /package/src/headers/{14 → 20}/tracing/node_trace_writer.h +0 -0
- /package/src/headers/{14 → 20}/tracing/traced_value.h +0 -0
- /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
|
@@ -12,16 +12,17 @@
|
|
|
12
12
|
#include "util.h"
|
|
13
13
|
#include "v8.h"
|
|
14
14
|
|
|
15
|
+
#include "ncrypto.h"
|
|
16
|
+
|
|
17
|
+
#include <openssl/dsa.h>
|
|
18
|
+
#include <openssl/ec.h>
|
|
15
19
|
#include <openssl/err.h>
|
|
16
20
|
#include <openssl/evp.h>
|
|
17
|
-
#include <openssl/
|
|
21
|
+
#include <openssl/hmac.h>
|
|
18
22
|
#include <openssl/kdf.h>
|
|
19
23
|
#include <openssl/rsa.h>
|
|
20
|
-
#include <openssl/dsa.h>
|
|
21
24
|
#include <openssl/ssl.h>
|
|
22
|
-
|
|
23
|
-
# include <openssl/engine.h>
|
|
24
|
-
#endif // !OPENSSL_NO_ENGINE
|
|
25
|
+
|
|
25
26
|
// The FIPS-related functions are only available
|
|
26
27
|
// when the OpenSSL itself was compiled with FIPS support.
|
|
27
28
|
#if defined(OPENSSL_FIPS) && OPENSSL_VERSION_MAJOR < 3
|
|
@@ -29,11 +30,12 @@
|
|
|
29
30
|
#endif // OPENSSL_FIPS
|
|
30
31
|
|
|
31
32
|
#include <algorithm>
|
|
33
|
+
#include <climits>
|
|
34
|
+
#include <cstdio>
|
|
32
35
|
#include <memory>
|
|
36
|
+
#include <optional>
|
|
33
37
|
#include <string>
|
|
34
38
|
#include <vector>
|
|
35
|
-
#include <climits>
|
|
36
|
-
#include <cstdio>
|
|
37
39
|
|
|
38
40
|
namespace node {
|
|
39
41
|
namespace crypto {
|
|
@@ -52,39 +54,32 @@ constexpr size_t kSizeOf_EVP_PKEY_CTX = 80;
|
|
|
52
54
|
constexpr size_t kSizeOf_HMAC_CTX = 32;
|
|
53
55
|
|
|
54
56
|
// Define smart pointers for the most commonly used OpenSSL types:
|
|
55
|
-
using X509Pointer =
|
|
56
|
-
using BIOPointer =
|
|
57
|
-
using SSLCtxPointer =
|
|
58
|
-
using SSLSessionPointer =
|
|
59
|
-
using SSLPointer =
|
|
60
|
-
using PKCS8Pointer =
|
|
61
|
-
using EVPKeyPointer =
|
|
62
|
-
using EVPKeyCtxPointer =
|
|
63
|
-
using
|
|
64
|
-
using RSAPointer =
|
|
65
|
-
using ECPointer =
|
|
66
|
-
using BignumPointer =
|
|
67
|
-
using BignumCtxPointer =
|
|
68
|
-
using NetscapeSPKIPointer =
|
|
69
|
-
using ECGroupPointer =
|
|
70
|
-
using ECPointPointer =
|
|
71
|
-
using ECKeyPointer =
|
|
72
|
-
using DHPointer =
|
|
73
|
-
using ECDSASigPointer =
|
|
74
|
-
using HMACCtxPointer =
|
|
75
|
-
using CipherCtxPointer =
|
|
76
|
-
using
|
|
77
|
-
using
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// used when establishing a TLS handshake. Because we cannot perform
|
|
82
|
-
// I/O quickly enough with X509_STORE_CTX_ APIs in this callback,
|
|
83
|
-
// we ignore preverify_ok errors here and let the handshake continue.
|
|
84
|
-
// In other words, this VerifyCallback is a non-op. It is imperative
|
|
85
|
-
// that the user user Connection::VerifyError after the `secure`
|
|
86
|
-
// callback has been made.
|
|
87
|
-
extern int VerifyCallback(int preverify_ok, X509_STORE_CTX* ctx);
|
|
57
|
+
using X509Pointer = ncrypto::X509Pointer;
|
|
58
|
+
using BIOPointer = ncrypto::BIOPointer;
|
|
59
|
+
using SSLCtxPointer = ncrypto::SSLCtxPointer;
|
|
60
|
+
using SSLSessionPointer = ncrypto::SSLSessionPointer;
|
|
61
|
+
using SSLPointer = ncrypto::SSLPointer;
|
|
62
|
+
using PKCS8Pointer = ncrypto::PKCS8Pointer;
|
|
63
|
+
using EVPKeyPointer = ncrypto::EVPKeyPointer;
|
|
64
|
+
using EVPKeyCtxPointer = ncrypto::EVPKeyCtxPointer;
|
|
65
|
+
using EVPMDCtxPointer = ncrypto::EVPMDCtxPointer;
|
|
66
|
+
using RSAPointer = ncrypto::RSAPointer;
|
|
67
|
+
using ECPointer = ncrypto::ECPointer;
|
|
68
|
+
using BignumPointer = ncrypto::BignumPointer;
|
|
69
|
+
using BignumCtxPointer = ncrypto::BignumCtxPointer;
|
|
70
|
+
using NetscapeSPKIPointer = ncrypto::NetscapeSPKIPointer;
|
|
71
|
+
using ECGroupPointer = ncrypto::ECGroupPointer;
|
|
72
|
+
using ECPointPointer = ncrypto::ECPointPointer;
|
|
73
|
+
using ECKeyPointer = ncrypto::ECKeyPointer;
|
|
74
|
+
using DHPointer = ncrypto::DHPointer;
|
|
75
|
+
using ECDSASigPointer = ncrypto::ECDSASigPointer;
|
|
76
|
+
using HMACCtxPointer = ncrypto::HMACCtxPointer;
|
|
77
|
+
using CipherCtxPointer = ncrypto::CipherCtxPointer;
|
|
78
|
+
using DsaPointer = ncrypto::DSAPointer;
|
|
79
|
+
using DsaSigPointer = ncrypto::DSASigPointer;
|
|
80
|
+
|
|
81
|
+
using ClearErrorOnReturn = ncrypto::ClearErrorOnReturn;
|
|
82
|
+
using MarkPopErrorOnReturn = ncrypto::MarkPopErrorOnReturn;
|
|
88
83
|
|
|
89
84
|
bool ProcessFipsOptions();
|
|
90
85
|
|
|
@@ -95,47 +90,6 @@ void InitCrypto(v8::Local<v8::Object> target);
|
|
|
95
90
|
|
|
96
91
|
extern void UseExtraCaCerts(const std::string& file);
|
|
97
92
|
|
|
98
|
-
// Forcibly clear OpenSSL's error stack on return. This stops stale errors
|
|
99
|
-
// from popping up later in the lifecycle of crypto operations where they
|
|
100
|
-
// would cause spurious failures. It's a rather blunt method, though.
|
|
101
|
-
// ERR_clear_error() isn't necessarily cheap either.
|
|
102
|
-
struct ClearErrorOnReturn {
|
|
103
|
-
~ClearErrorOnReturn() { ERR_clear_error(); }
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
// Pop errors from OpenSSL's error stack that were added
|
|
107
|
-
// between when this was constructed and destructed.
|
|
108
|
-
struct MarkPopErrorOnReturn {
|
|
109
|
-
MarkPopErrorOnReturn() { ERR_set_mark(); }
|
|
110
|
-
~MarkPopErrorOnReturn() { ERR_pop_to_mark(); }
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
// Ensure that OpenSSL has enough entropy (at least 256 bits) for its PRNG.
|
|
114
|
-
// The entropy pool starts out empty and needs to fill up before the PRNG
|
|
115
|
-
// can be used securely. Once the pool is filled, it never dries up again;
|
|
116
|
-
// its contents is stirred and reused when necessary.
|
|
117
|
-
//
|
|
118
|
-
// OpenSSL normally fills the pool automatically but not when someone starts
|
|
119
|
-
// generating random numbers before the pool is full: in that case OpenSSL
|
|
120
|
-
// keeps lowering the entropy estimate to thwart attackers trying to guess
|
|
121
|
-
// the initial state of the PRNG.
|
|
122
|
-
//
|
|
123
|
-
// When that happens, we will have to wait until enough entropy is available.
|
|
124
|
-
// That should normally never take longer than a few milliseconds.
|
|
125
|
-
//
|
|
126
|
-
// OpenSSL draws from /dev/random and /dev/urandom. While /dev/random may
|
|
127
|
-
// block pending "true" randomness, /dev/urandom is a CSPRNG that doesn't
|
|
128
|
-
// block under normal circumstances.
|
|
129
|
-
//
|
|
130
|
-
// The only time when /dev/urandom may conceivably block is right after boot,
|
|
131
|
-
// when the whole system is still low on entropy. That's not something we can
|
|
132
|
-
// do anything about.
|
|
133
|
-
void CheckEntropy();
|
|
134
|
-
|
|
135
|
-
// Generate length bytes of random data. If this returns false, the data
|
|
136
|
-
// may not be truly random but it's still generally good enough.
|
|
137
|
-
bool EntropySource(unsigned char* buffer, size_t length);
|
|
138
|
-
|
|
139
93
|
int PasswordCallback(char* buf, int size, int rwflag, void* u);
|
|
140
94
|
|
|
141
95
|
int NoPasswordCallback(char* buf, int size, int rwflag, void* u);
|
|
@@ -147,7 +101,7 @@ void Decode(const v8::FunctionCallbackInfo<v8::Value>& args,
|
|
|
147
101
|
void (*callback)(T*, const v8::FunctionCallbackInfo<v8::Value>&,
|
|
148
102
|
const char*, size_t)) {
|
|
149
103
|
T* ctx;
|
|
150
|
-
ASSIGN_OR_RETURN_UNWRAP(&ctx, args.
|
|
104
|
+
ASSIGN_OR_RETURN_UNWRAP(&ctx, args.This());
|
|
151
105
|
|
|
152
106
|
if (args[0]->IsString()) {
|
|
153
107
|
StringBytes::InlineDecoder decoder;
|
|
@@ -176,6 +130,21 @@ enum class NodeCryptoError {
|
|
|
176
130
|
#undef V
|
|
177
131
|
};
|
|
178
132
|
|
|
133
|
+
template <typename... Args>
|
|
134
|
+
std::string getNodeCryptoErrorString(const NodeCryptoError error,
|
|
135
|
+
Args&&... args) {
|
|
136
|
+
const char* error_string = nullptr;
|
|
137
|
+
switch (error) {
|
|
138
|
+
#define V(CODE, DESCRIPTION) \
|
|
139
|
+
case NodeCryptoError::CODE: \
|
|
140
|
+
error_string = DESCRIPTION; \
|
|
141
|
+
break;
|
|
142
|
+
NODE_CRYPTO_ERROR_CODES_MAP(V)
|
|
143
|
+
#undef V
|
|
144
|
+
}
|
|
145
|
+
return SPrintF(error_string, std::forward<Args>(args)...);
|
|
146
|
+
}
|
|
147
|
+
|
|
179
148
|
// Utility struct used to harvest error information from openssl's error stack
|
|
180
149
|
struct CryptoErrorStore final : public MemoryRetainer {
|
|
181
150
|
public:
|
|
@@ -211,6 +180,9 @@ void CryptoErrorStore::Insert(const NodeCryptoError error, Args&&... args) {
|
|
|
211
180
|
std::forward<Args>(args)...));
|
|
212
181
|
}
|
|
213
182
|
|
|
183
|
+
v8::MaybeLocal<v8::Value> cryptoErrorListToException(
|
|
184
|
+
Environment* env, const ncrypto::CryptoErrorList& errors);
|
|
185
|
+
|
|
214
186
|
template <typename T>
|
|
215
187
|
T* MallocOpenSSL(size_t count) {
|
|
216
188
|
void* mem = OPENSSL_malloc(MultiplyWithOverflowCheck(count, sizeof(T)));
|
|
@@ -218,37 +190,79 @@ T* MallocOpenSSL(size_t count) {
|
|
|
218
190
|
return static_cast<T*>(mem);
|
|
219
191
|
}
|
|
220
192
|
|
|
221
|
-
template <typename T>
|
|
222
|
-
T* ReallocOpenSSL(T* buf, size_t count) {
|
|
223
|
-
void* mem = OPENSSL_realloc(buf, MultiplyWithOverflowCheck(count, sizeof(T)));
|
|
224
|
-
CHECK_IMPLIES(mem == nullptr, count == 0);
|
|
225
|
-
return static_cast<T*>(mem);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
193
|
// A helper class representing a read-only byte array. When deallocated, its
|
|
229
194
|
// contents are zeroed.
|
|
230
195
|
class ByteSource {
|
|
231
196
|
public:
|
|
197
|
+
class Builder {
|
|
198
|
+
public:
|
|
199
|
+
// Allocates memory using OpenSSL's memory allocator.
|
|
200
|
+
explicit Builder(size_t size)
|
|
201
|
+
: data_(MallocOpenSSL<char>(size)), size_(size) {}
|
|
202
|
+
|
|
203
|
+
Builder(Builder&& other) = delete;
|
|
204
|
+
Builder& operator=(Builder&& other) = delete;
|
|
205
|
+
Builder(const Builder&) = delete;
|
|
206
|
+
Builder& operator=(const Builder&) = delete;
|
|
207
|
+
|
|
208
|
+
~Builder() { OPENSSL_clear_free(data_, size_); }
|
|
209
|
+
|
|
210
|
+
// Returns the underlying non-const pointer.
|
|
211
|
+
template <typename T>
|
|
212
|
+
T* data() {
|
|
213
|
+
return reinterpret_cast<T*>(data_);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Returns the (allocated) size in bytes.
|
|
217
|
+
size_t size() const { return size_; }
|
|
218
|
+
|
|
219
|
+
// Returns if (allocated) size is zero.
|
|
220
|
+
bool empty() const { return size_ == 0; }
|
|
221
|
+
|
|
222
|
+
// Finalizes the Builder and returns a read-only view that is optionally
|
|
223
|
+
// truncated.
|
|
224
|
+
ByteSource release(std::optional<size_t> resize = std::nullopt) && {
|
|
225
|
+
if (resize) {
|
|
226
|
+
CHECK_LE(*resize, size_);
|
|
227
|
+
if (*resize == 0) {
|
|
228
|
+
OPENSSL_clear_free(data_, size_);
|
|
229
|
+
data_ = nullptr;
|
|
230
|
+
}
|
|
231
|
+
size_ = *resize;
|
|
232
|
+
}
|
|
233
|
+
ByteSource out = ByteSource::Allocated(data_, size_);
|
|
234
|
+
data_ = nullptr;
|
|
235
|
+
size_ = 0;
|
|
236
|
+
return out;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
private:
|
|
240
|
+
void* data_;
|
|
241
|
+
size_t size_;
|
|
242
|
+
};
|
|
243
|
+
|
|
232
244
|
ByteSource() = default;
|
|
233
245
|
ByteSource(ByteSource&& other) noexcept;
|
|
234
246
|
~ByteSource();
|
|
235
247
|
|
|
236
248
|
ByteSource& operator=(ByteSource&& other) noexcept;
|
|
237
249
|
|
|
238
|
-
const
|
|
250
|
+
ByteSource(const ByteSource&) = delete;
|
|
251
|
+
ByteSource& operator=(const ByteSource&) = delete;
|
|
252
|
+
|
|
253
|
+
template <typename T = void>
|
|
254
|
+
const T* data() const {
|
|
255
|
+
return reinterpret_cast<const T*>(data_);
|
|
256
|
+
}
|
|
239
257
|
|
|
240
|
-
|
|
241
|
-
const T* data() const { return reinterpret_cast<const T*>(get()); }
|
|
258
|
+
size_t size() const { return size_; }
|
|
242
259
|
|
|
243
|
-
|
|
260
|
+
bool empty() const { return size_ == 0; }
|
|
244
261
|
|
|
245
262
|
operator bool() const { return data_ != nullptr; }
|
|
246
263
|
|
|
247
264
|
BignumPointer ToBN() const {
|
|
248
|
-
return BignumPointer(
|
|
249
|
-
reinterpret_cast<const unsigned char*>(get()),
|
|
250
|
-
size(),
|
|
251
|
-
nullptr));
|
|
265
|
+
return BignumPointer(data<unsigned char>(), size());
|
|
252
266
|
}
|
|
253
267
|
|
|
254
268
|
// Creates a v8::BackingStore that takes over responsibility for
|
|
@@ -260,19 +274,14 @@ class ByteSource {
|
|
|
260
274
|
|
|
261
275
|
v8::MaybeLocal<v8::Uint8Array> ToBuffer(Environment* env);
|
|
262
276
|
|
|
263
|
-
void
|
|
277
|
+
static ByteSource Allocated(void* data, size_t size);
|
|
264
278
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
CHECK_NOT_NULL(allocated_data_);
|
|
269
|
-
char* new_data_ = ReallocOpenSSL<char>(allocated_data_, newsize);
|
|
270
|
-
data_ = allocated_data_ = new_data_;
|
|
271
|
-
size_ = newsize;
|
|
279
|
+
template <typename T>
|
|
280
|
+
static ByteSource Allocated(const ncrypto::Buffer<T>& buffer) {
|
|
281
|
+
return Allocated(buffer.data, buffer.len);
|
|
272
282
|
}
|
|
273
283
|
|
|
274
|
-
static ByteSource
|
|
275
|
-
static ByteSource Foreign(const char* data, size_t size);
|
|
284
|
+
static ByteSource Foreign(const void* data, size_t size);
|
|
276
285
|
|
|
277
286
|
static ByteSource FromEncodedString(Environment* env,
|
|
278
287
|
v8::Local<v8::String> value,
|
|
@@ -295,18 +304,16 @@ class ByteSource {
|
|
|
295
304
|
|
|
296
305
|
static ByteSource FromSymmetricKeyObjectHandle(v8::Local<v8::Value> handle);
|
|
297
306
|
|
|
298
|
-
ByteSource(const ByteSource&) = delete;
|
|
299
|
-
ByteSource& operator=(const ByteSource&) = delete;
|
|
300
|
-
|
|
301
307
|
static ByteSource FromSecretKeyBytes(
|
|
302
308
|
Environment* env, v8::Local<v8::Value> value);
|
|
303
309
|
|
|
304
310
|
private:
|
|
305
|
-
const
|
|
306
|
-
|
|
311
|
+
const void* data_ = nullptr;
|
|
312
|
+
void* allocated_data_ = nullptr;
|
|
307
313
|
size_t size_ = 0;
|
|
308
314
|
|
|
309
|
-
ByteSource(const
|
|
315
|
+
ByteSource(const void* data, void* allocated_data, size_t size)
|
|
316
|
+
: data_(data), allocated_data_(allocated_data), size_(size) {}
|
|
310
317
|
};
|
|
311
318
|
|
|
312
319
|
enum CryptoJobMode {
|
|
@@ -321,14 +328,13 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
|
|
|
321
328
|
public:
|
|
322
329
|
using AdditionalParams = typename CryptoJobTraits::AdditionalParameters;
|
|
323
330
|
|
|
324
|
-
explicit CryptoJob(
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
AdditionalParams&& params)
|
|
331
|
+
explicit CryptoJob(Environment* env,
|
|
332
|
+
v8::Local<v8::Object> object,
|
|
333
|
+
AsyncWrap::ProviderType type,
|
|
334
|
+
CryptoJobMode mode,
|
|
335
|
+
AdditionalParams&& params)
|
|
330
336
|
: AsyncWrap(env, object, type),
|
|
331
|
-
ThreadPoolWork(env),
|
|
337
|
+
ThreadPoolWork(env, "crypto"),
|
|
332
338
|
mode_(mode),
|
|
333
339
|
params_(std::move(params)) {
|
|
334
340
|
// If the CryptoJob is async, then the instance will be
|
|
@@ -355,31 +361,31 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
|
|
|
355
361
|
v8::HandleScope handle_scope(env->isolate());
|
|
356
362
|
v8::Context::Scope context_scope(env->context());
|
|
357
363
|
|
|
358
|
-
// TODO(tniessen): Remove the exception handling logic here as soon as we
|
|
359
|
-
// can verify that no code path in ToResult will ever throw an exception.
|
|
360
364
|
v8::Local<v8::Value> exception;
|
|
361
365
|
v8::Local<v8::Value> args[2];
|
|
362
366
|
{
|
|
363
367
|
node::errors::TryCatchScope try_catch(env);
|
|
364
|
-
|
|
365
|
-
|
|
368
|
+
// If ToResult returns Nothing, then an exception should have been
|
|
369
|
+
// thrown and we should have caught it. Otherwise, args[0] and args[1]
|
|
370
|
+
// both should have been set to a value, even if the value is undefined.
|
|
371
|
+
if (ptr->ToResult(&args[0], &args[1]).IsNothing()) {
|
|
366
372
|
CHECK(try_catch.HasCaught());
|
|
373
|
+
CHECK(try_catch.CanContinue());
|
|
367
374
|
exception = try_catch.Exception();
|
|
368
|
-
} else if (!ret.FromJust()) {
|
|
369
|
-
return;
|
|
370
375
|
}
|
|
371
376
|
}
|
|
372
377
|
|
|
373
|
-
if (exception.IsEmpty()) {
|
|
374
|
-
ptr->MakeCallback(env->ondone_string(), arraysize(args), args);
|
|
375
|
-
} else {
|
|
378
|
+
if (!exception.IsEmpty()) {
|
|
376
379
|
ptr->MakeCallback(env->ondone_string(), 1, &exception);
|
|
380
|
+
} else {
|
|
381
|
+
CHECK(!args[0].IsEmpty());
|
|
382
|
+
CHECK(!args[1].IsEmpty());
|
|
383
|
+
ptr->MakeCallback(env->ondone_string(), arraysize(args), args);
|
|
377
384
|
}
|
|
378
385
|
}
|
|
379
386
|
|
|
380
|
-
virtual v8::Maybe<
|
|
381
|
-
|
|
382
|
-
v8::Local<v8::Value>* result) = 0;
|
|
387
|
+
virtual v8::Maybe<void> ToResult(v8::Local<v8::Value>* err,
|
|
388
|
+
v8::Local<v8::Value>* result) = 0;
|
|
383
389
|
|
|
384
390
|
CryptoJobMode mode() const { return mode_; }
|
|
385
391
|
|
|
@@ -387,7 +393,7 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
|
|
|
387
393
|
|
|
388
394
|
AdditionalParams* params() { return ¶ms_; }
|
|
389
395
|
|
|
390
|
-
|
|
396
|
+
const char* MemoryInfoName() const override {
|
|
391
397
|
return CryptoJobTraits::JobName;
|
|
392
398
|
}
|
|
393
399
|
|
|
@@ -400,15 +406,16 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
|
|
|
400
406
|
Environment* env = Environment::GetCurrent(args);
|
|
401
407
|
|
|
402
408
|
CryptoJob<CryptoJobTraits>* job;
|
|
403
|
-
ASSIGN_OR_RETURN_UNWRAP(&job, args.
|
|
409
|
+
ASSIGN_OR_RETURN_UNWRAP(&job, args.This());
|
|
404
410
|
if (job->mode() == kCryptoJobAsync)
|
|
405
411
|
return job->ScheduleWork();
|
|
406
412
|
|
|
407
413
|
v8::Local<v8::Value> ret[2];
|
|
408
414
|
env->PrintSyncTrace();
|
|
409
415
|
job->DoThreadPoolWork();
|
|
410
|
-
|
|
411
|
-
|
|
416
|
+
if (job->ToResult(&ret[0], &ret[1]).IsJust()) {
|
|
417
|
+
CHECK(!ret[0].IsEmpty());
|
|
418
|
+
CHECK(!ret[1].IsEmpty());
|
|
412
419
|
args.GetReturnValue().Set(
|
|
413
420
|
v8::Array::New(env->isolate(), ret, arraysize(ret)));
|
|
414
421
|
}
|
|
@@ -418,12 +425,15 @@ class CryptoJob : public AsyncWrap, public ThreadPoolWork {
|
|
|
418
425
|
v8::FunctionCallback new_fn,
|
|
419
426
|
Environment* env,
|
|
420
427
|
v8::Local<v8::Object> target) {
|
|
421
|
-
v8::
|
|
428
|
+
v8::Isolate* isolate = env->isolate();
|
|
429
|
+
v8::HandleScope scope(isolate);
|
|
430
|
+
v8::Local<v8::Context> context = env->context();
|
|
431
|
+
v8::Local<v8::FunctionTemplate> job = NewFunctionTemplate(isolate, new_fn);
|
|
422
432
|
job->Inherit(AsyncWrap::GetConstructorTemplate(env));
|
|
423
433
|
job->InstanceTemplate()->SetInternalFieldCount(
|
|
424
434
|
AsyncWrap::kInternalFieldCount);
|
|
425
|
-
|
|
426
|
-
|
|
435
|
+
SetProtoMethod(isolate, job, "run", Run);
|
|
436
|
+
SetConstructorFunction(context, target, CryptoJobTraits::JobName, job);
|
|
427
437
|
}
|
|
428
438
|
|
|
429
439
|
static void RegisterExternalReferences(v8::FunctionCallback new_fn,
|
|
@@ -495,26 +505,29 @@ class DeriveBitsJob final : public CryptoJob<DeriveBitsTraits> {
|
|
|
495
505
|
success_ = true;
|
|
496
506
|
}
|
|
497
507
|
|
|
498
|
-
v8::Maybe<
|
|
499
|
-
|
|
500
|
-
v8::Local<v8::Value>* result) override {
|
|
508
|
+
v8::Maybe<void> ToResult(v8::Local<v8::Value>* err,
|
|
509
|
+
v8::Local<v8::Value>* result) override {
|
|
501
510
|
Environment* env = AsyncWrap::env();
|
|
502
511
|
CryptoErrorStore* errors = CryptoJob<DeriveBitsTraits>::errors();
|
|
503
512
|
if (success_) {
|
|
504
513
|
CHECK(errors->Empty());
|
|
505
514
|
*err = v8::Undefined(env->isolate());
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
515
|
+
if (!DeriveBitsTraits::EncodeOutput(
|
|
516
|
+
env, *CryptoJob<DeriveBitsTraits>::params(), &out_)
|
|
517
|
+
.ToLocal(result)) {
|
|
518
|
+
return v8::Nothing<void>();
|
|
519
|
+
}
|
|
520
|
+
} else {
|
|
521
|
+
if (errors->Empty()) errors->Capture();
|
|
522
|
+
CHECK(!errors->Empty());
|
|
523
|
+
*result = v8::Undefined(env->isolate());
|
|
524
|
+
if (!errors->ToException(env).ToLocal(err)) {
|
|
525
|
+
return v8::Nothing<void>();
|
|
526
|
+
}
|
|
511
527
|
}
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
CHECK(!errors->Empty());
|
|
516
|
-
*result = v8::Undefined(env->isolate());
|
|
517
|
-
return v8::Just(errors->ToException(env).ToLocal(err));
|
|
528
|
+
CHECK(!result->IsEmpty());
|
|
529
|
+
CHECK(!err->IsEmpty());
|
|
530
|
+
return v8::JustVoid();
|
|
518
531
|
}
|
|
519
532
|
|
|
520
533
|
SET_SELF_SIZE(DeriveBitsJob)
|
|
@@ -532,72 +545,6 @@ void ThrowCryptoError(Environment* env,
|
|
|
532
545
|
unsigned long err, // NOLINT(runtime/int)
|
|
533
546
|
const char* message = nullptr);
|
|
534
547
|
|
|
535
|
-
#ifndef OPENSSL_NO_ENGINE
|
|
536
|
-
struct EnginePointer {
|
|
537
|
-
ENGINE* engine = nullptr;
|
|
538
|
-
bool finish_on_exit = false;
|
|
539
|
-
|
|
540
|
-
inline EnginePointer() = default;
|
|
541
|
-
|
|
542
|
-
inline explicit EnginePointer(ENGINE* engine_, bool finish_on_exit_ = false)
|
|
543
|
-
: engine(engine_),
|
|
544
|
-
finish_on_exit(finish_on_exit_) {}
|
|
545
|
-
|
|
546
|
-
inline EnginePointer(EnginePointer&& other) noexcept
|
|
547
|
-
: engine(other.engine),
|
|
548
|
-
finish_on_exit(other.finish_on_exit) {
|
|
549
|
-
other.release();
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
inline ~EnginePointer() { reset(); }
|
|
553
|
-
|
|
554
|
-
inline EnginePointer& operator=(EnginePointer&& other) noexcept {
|
|
555
|
-
if (this == &other) return *this;
|
|
556
|
-
this->~EnginePointer();
|
|
557
|
-
return *new (this) EnginePointer(std::move(other));
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
inline operator bool() const { return engine != nullptr; }
|
|
561
|
-
|
|
562
|
-
inline ENGINE* get() { return engine; }
|
|
563
|
-
|
|
564
|
-
inline void reset(ENGINE* engine_ = nullptr, bool finish_on_exit_ = false) {
|
|
565
|
-
if (engine != nullptr) {
|
|
566
|
-
if (finish_on_exit) {
|
|
567
|
-
// This also does the equivalent of ENGINE_free.
|
|
568
|
-
CHECK_EQ(ENGINE_finish(engine), 1);
|
|
569
|
-
} else {
|
|
570
|
-
CHECK_EQ(ENGINE_free(engine), 1);
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
engine = engine_;
|
|
574
|
-
finish_on_exit = finish_on_exit_;
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
inline ENGINE* release() {
|
|
578
|
-
ENGINE* ret = engine;
|
|
579
|
-
engine = nullptr;
|
|
580
|
-
finish_on_exit = false;
|
|
581
|
-
return ret;
|
|
582
|
-
}
|
|
583
|
-
};
|
|
584
|
-
|
|
585
|
-
EnginePointer LoadEngineById(const char* id, CryptoErrorStore* errors);
|
|
586
|
-
|
|
587
|
-
bool SetEngine(
|
|
588
|
-
const char* id,
|
|
589
|
-
uint32_t flags,
|
|
590
|
-
CryptoErrorStore* errors = nullptr);
|
|
591
|
-
|
|
592
|
-
void SetEngine(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
593
|
-
#endif // !OPENSSL_NO_ENGINE
|
|
594
|
-
|
|
595
|
-
void GetFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
596
|
-
|
|
597
|
-
void SetFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
598
|
-
|
|
599
|
-
void TestFipsCrypto(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
600
|
-
|
|
601
548
|
class CipherPushContext {
|
|
602
549
|
public:
|
|
603
550
|
inline explicit CipherPushContext(Environment* env) : env_(env) {}
|
|
@@ -661,7 +608,8 @@ void array_push_back(const TypeName* evp_ref,
|
|
|
661
608
|
}
|
|
662
609
|
#endif
|
|
663
610
|
|
|
664
|
-
|
|
611
|
+
// WebIDL AllowSharedBufferSource.
|
|
612
|
+
inline bool IsAnyBufferSource(v8::Local<v8::Value> arg) {
|
|
665
613
|
return arg->IsArrayBufferView() ||
|
|
666
614
|
arg->IsArrayBuffer() ||
|
|
667
615
|
arg->IsSharedArrayBuffer();
|
|
@@ -671,24 +619,30 @@ template <typename T>
|
|
|
671
619
|
class ArrayBufferOrViewContents {
|
|
672
620
|
public:
|
|
673
621
|
ArrayBufferOrViewContents() = default;
|
|
622
|
+
ArrayBufferOrViewContents(const ArrayBufferOrViewContents&) = delete;
|
|
623
|
+
void operator=(const ArrayBufferOrViewContents&) = delete;
|
|
674
624
|
|
|
675
625
|
inline explicit ArrayBufferOrViewContents(v8::Local<v8::Value> buf) {
|
|
676
|
-
|
|
626
|
+
if (buf.IsEmpty()) {
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
CHECK(IsAnyBufferSource(buf));
|
|
677
631
|
if (buf->IsArrayBufferView()) {
|
|
678
632
|
auto view = buf.As<v8::ArrayBufferView>();
|
|
679
633
|
offset_ = view->ByteOffset();
|
|
680
634
|
length_ = view->ByteLength();
|
|
681
|
-
|
|
635
|
+
data_ = view->Buffer()->Data();
|
|
682
636
|
} else if (buf->IsArrayBuffer()) {
|
|
683
637
|
auto ab = buf.As<v8::ArrayBuffer>();
|
|
684
638
|
offset_ = 0;
|
|
685
639
|
length_ = ab->ByteLength();
|
|
686
|
-
|
|
640
|
+
data_ = ab->Data();
|
|
687
641
|
} else {
|
|
688
642
|
auto sab = buf.As<v8::SharedArrayBuffer>();
|
|
689
643
|
offset_ = 0;
|
|
690
644
|
length_ = sab->ByteLength();
|
|
691
|
-
|
|
645
|
+
data_ = sab->Data();
|
|
692
646
|
}
|
|
693
647
|
}
|
|
694
648
|
|
|
@@ -696,22 +650,22 @@ class ArrayBufferOrViewContents {
|
|
|
696
650
|
// Ideally, these would return nullptr if IsEmpty() or length_ is zero,
|
|
697
651
|
// but some of the openssl API react badly if given a nullptr even when
|
|
698
652
|
// length is zero, so we have to return something.
|
|
699
|
-
if (
|
|
700
|
-
|
|
701
|
-
return reinterpret_cast<T*>(store_->Data()) + offset_;
|
|
653
|
+
if (empty()) return &buf;
|
|
654
|
+
return reinterpret_cast<T*>(data_) + offset_;
|
|
702
655
|
}
|
|
703
656
|
|
|
704
657
|
inline T* data() {
|
|
705
658
|
// Ideally, these would return nullptr if IsEmpty() or length_ is zero,
|
|
706
659
|
// but some of the openssl API react badly if given a nullptr even when
|
|
707
660
|
// length is zero, so we have to return something.
|
|
708
|
-
if (
|
|
709
|
-
|
|
710
|
-
return reinterpret_cast<T*>(store_->Data()) + offset_;
|
|
661
|
+
if (empty()) return &buf;
|
|
662
|
+
return reinterpret_cast<T*>(data_) + offset_;
|
|
711
663
|
}
|
|
712
664
|
|
|
713
665
|
inline size_t size() const { return length_; }
|
|
714
666
|
|
|
667
|
+
inline bool empty() const { return length_ == 0; }
|
|
668
|
+
|
|
715
669
|
// In most cases, input buffer sizes passed in to openssl need to
|
|
716
670
|
// be limited to <= INT_MAX. This utility method helps us check.
|
|
717
671
|
inline bool CheckSizeInt32() { return size() <= INT_MAX; }
|
|
@@ -721,63 +675,65 @@ class ArrayBufferOrViewContents {
|
|
|
721
675
|
}
|
|
722
676
|
|
|
723
677
|
inline ByteSource ToCopy() const {
|
|
724
|
-
if (
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
return ByteSource::Allocated(buf, size());
|
|
678
|
+
if (empty()) return ByteSource();
|
|
679
|
+
ByteSource::Builder buf(size());
|
|
680
|
+
memcpy(buf.data<void>(), data(), size());
|
|
681
|
+
return std::move(buf).release();
|
|
729
682
|
}
|
|
730
683
|
|
|
731
684
|
inline ByteSource ToNullTerminatedCopy() const {
|
|
732
|
-
if (
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
buf[size()] = 0;
|
|
736
|
-
|
|
737
|
-
|
|
685
|
+
if (empty()) return ByteSource();
|
|
686
|
+
ByteSource::Builder buf(size() + 1);
|
|
687
|
+
memcpy(buf.data<void>(), data(), size());
|
|
688
|
+
buf.data<char>()[size()] = 0;
|
|
689
|
+
return std::move(buf).release(size());
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
inline ncrypto::DataPointer ToDataPointer() const {
|
|
693
|
+
if (empty()) return {};
|
|
694
|
+
if (auto dp = ncrypto::DataPointer::Alloc(size())) {
|
|
695
|
+
memcpy(dp.get(), data(), size());
|
|
696
|
+
return dp;
|
|
697
|
+
}
|
|
698
|
+
return {};
|
|
738
699
|
}
|
|
739
700
|
|
|
740
701
|
template <typename M>
|
|
741
702
|
void CopyTo(M* dest, size_t len) const {
|
|
742
703
|
static_assert(sizeof(M) == 1, "sizeof(M) must equal 1");
|
|
743
704
|
len = std::min(len, size());
|
|
744
|
-
if (len > 0 && data() != nullptr)
|
|
705
|
+
if (len > 0 && data() != nullptr) {
|
|
745
706
|
memcpy(dest, data(), len);
|
|
707
|
+
}
|
|
746
708
|
}
|
|
747
709
|
|
|
748
710
|
private:
|
|
749
711
|
T buf = 0;
|
|
750
712
|
size_t offset_ = 0;
|
|
751
713
|
size_t length_ = 0;
|
|
752
|
-
|
|
714
|
+
void* data_ = nullptr;
|
|
715
|
+
|
|
716
|
+
// Declaring operator new and delete as deleted is not spec compliant.
|
|
717
|
+
// Therefore declare them private instead to disable dynamic alloc
|
|
718
|
+
void* operator new(size_t);
|
|
719
|
+
void* operator new[](size_t);
|
|
720
|
+
void operator delete(void*);
|
|
721
|
+
void operator delete[](void*);
|
|
753
722
|
};
|
|
754
723
|
|
|
755
|
-
template <typename T>
|
|
756
|
-
std::vector<T> CopyBuffer(const ArrayBufferOrViewContents<T>& buf) {
|
|
757
|
-
std::vector<T> vec;
|
|
758
|
-
vec->resize(buf.size());
|
|
759
|
-
if (vec->size() > 0 && buf.data() != nullptr)
|
|
760
|
-
memcpy(vec->data(), buf.data(), vec->size());
|
|
761
|
-
return vec;
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
template <typename T>
|
|
765
|
-
std::vector<T> CopyBuffer(v8::Local<v8::Value> buf) {
|
|
766
|
-
return CopyBuffer(ArrayBufferOrViewContents<T>(buf));
|
|
767
|
-
}
|
|
768
|
-
|
|
769
724
|
v8::MaybeLocal<v8::Value> EncodeBignum(
|
|
770
725
|
Environment* env,
|
|
771
726
|
const BIGNUM* bn,
|
|
772
727
|
int size,
|
|
773
728
|
v8::Local<v8::Value>* error);
|
|
774
729
|
|
|
775
|
-
v8::Maybe<
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
730
|
+
v8::Maybe<void> SetEncodedValue(Environment* env,
|
|
731
|
+
v8::Local<v8::Object> target,
|
|
732
|
+
v8::Local<v8::String> name,
|
|
733
|
+
const BIGNUM* bn,
|
|
734
|
+
int size = 0);
|
|
735
|
+
|
|
736
|
+
bool SetRsaOaepLabel(const EVPKeyCtxPointer& rsa, const ByteSource& label);
|
|
781
737
|
|
|
782
738
|
namespace Util {
|
|
783
739
|
void Initialize(Environment* env, v8::Local<v8::Object> target);
|