@encharm/cws 4.1.0 → 4.2.0
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_linux_108.node +0 -0
- package/dist/bindings/cws_linux_64.node +0 -0
- package/dist/bindings/cws_linux_72.node +0 -0
- package/dist/bindings/cws_linux_79.node +0 -0
- package/dist/bindings/cws_linux_83.node +0 -0
- package/dist/bindings/cws_linux_93.node +0 -0
- package/dist/bindings/cws_win32_64.node +0 -0
- package/dist/bindings/cws_win32_72.node +0 -0
- package/dist/bindings/cws_win32_79.node +0 -0
- package/dist/bindings/cws_win32_83.node +0 -0
- package/dist/bindings/cws_win32_93.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +24 -2
- package/src/HTTPSocket.cpp +1 -1
- package/src/headers/{13 → 18}/aliased_buffer.h +61 -9
- package/src/headers/18/aliased_struct-inl.h +54 -0
- package/src/headers/18/aliased_struct.h +63 -0
- package/src/headers/{12 → 18}/async_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/async_wrap.h +26 -2
- package/src/headers/{12/base64.h → 18/base64-inl.h} +78 -86
- package/src/headers/18/base64.h +69 -0
- package/src/headers/{12 → 18}/base_object-inl.h +46 -25
- package/src/headers/{12 → 18}/base_object.h +82 -17
- package/src/headers/{12 → 18}/callback_queue-inl.h +9 -9
- package/src/headers/{12 → 18}/callback_queue.h +13 -5
- package/src/headers/18/cares_wrap.h +523 -0
- package/src/headers/{12 → 18}/connect_wrap.h +0 -0
- package/src/headers/{12 → 18}/connection_wrap.h +0 -0
- package/src/headers/18/crypto/crypto_aes.h +89 -0
- package/src/headers/{13/node_crypto_bio.h → 18/crypto/crypto_bio.h} +3 -4
- package/src/headers/18/crypto/crypto_cipher.h +291 -0
- package/src/headers/{13/node_crypto_clienthello-inl.h → 18/crypto/crypto_clienthello-inl.h} +4 -5
- package/src/headers/{13/node_crypto_clienthello.h → 18/crypto/crypto_clienthello.h} +3 -4
- package/src/headers/{12/node_crypto_common.h → 18/crypto/crypto_common.h} +49 -36
- package/src/headers/18/crypto/crypto_context.h +147 -0
- package/src/headers/18/crypto/crypto_dh.h +156 -0
- package/src/headers/18/crypto/crypto_dsa.h +77 -0
- package/src/headers/18/crypto/crypto_ec.h +170 -0
- package/src/headers/{12/node_crypto_groups.h → 18/crypto/crypto_groups.h} +3 -3
- package/src/headers/18/crypto/crypto_hash.h +89 -0
- package/src/headers/18/crypto/crypto_hkdf.h +65 -0
- package/src/headers/18/crypto/crypto_hmac.h +94 -0
- package/src/headers/18/crypto/crypto_keygen.h +305 -0
- package/src/headers/18/crypto/crypto_keys.h +420 -0
- package/src/headers/18/crypto/crypto_pbkdf2.h +76 -0
- package/src/headers/18/crypto/crypto_random.h +130 -0
- package/src/headers/18/crypto/crypto_rsa.h +141 -0
- package/src/headers/18/crypto/crypto_scrypt.h +87 -0
- package/src/headers/18/crypto/crypto_sig.h +168 -0
- package/src/headers/18/crypto/crypto_spkac.h +21 -0
- package/src/headers/18/crypto/crypto_timing.h +20 -0
- package/src/headers/{13/tls_wrap.h → 18/crypto/crypto_tls.h} +137 -66
- package/src/headers/18/crypto/crypto_util.h +791 -0
- package/src/headers/18/crypto/crypto_x509.h +143 -0
- package/src/headers/{12 → 18}/debug_utils-inl.h +0 -0
- package/src/headers/{13 → 18}/debug_utils.h +7 -4
- package/src/headers/{12 → 18}/diagnosticfilename-inl.h +0 -0
- package/src/headers/{12 → 18}/env-inl.h +397 -304
- package/src/headers/{12 → 18}/env.h +397 -172
- package/src/headers/{12 → 18}/handle_wrap.h +7 -3
- package/src/headers/18/histogram-inl.h +107 -0
- package/src/headers/18/histogram.h +239 -0
- package/src/headers/{13 → 18}/inspector_agent.h +4 -7
- package/src/headers/{12 → 18}/inspector_io.h +0 -0
- package/src/headers/{13 → 18}/inspector_profiler.h +17 -5
- package/src/headers/{12 → 18}/inspector_socket.h +0 -0
- package/src/headers/{12 → 18}/inspector_socket_server.h +0 -0
- package/src/headers/18/js_native_api.h +571 -0
- package/src/headers/{13 → 18}/js_native_api_types.h +30 -7
- package/src/headers/{12 → 18}/js_native_api_v8.h +220 -83
- package/src/headers/{12 → 18}/js_native_api_v8_internals.h +6 -5
- package/src/headers/{12 → 18}/js_stream.h +0 -0
- package/src/headers/{12 → 18}/json_utils.h +0 -0
- package/src/headers/{13 → 18}/memory_tracker-inl.h +6 -5
- package/src/headers/{13 → 18}/memory_tracker.h +0 -7
- package/src/headers/{13 → 18}/module_wrap.h +24 -7
- package/src/headers/{13 → 18}/node.h +329 -68
- package/src/headers/18/node_api.h +288 -0
- package/src/headers/18/node_api_internals.h +38 -0
- package/src/headers/{12 → 18}/node_api_types.h +12 -9
- package/src/headers/{12 → 18}/node_binding.h +0 -0
- package/src/headers/18/node_blob.h +191 -0
- package/src/headers/18/node_bob-inl.h +37 -0
- package/src/headers/18/node_bob.h +111 -0
- package/src/headers/{13 → 18}/node_buffer.h +0 -0
- package/src/headers/{13 → 18}/node_constants.h +5 -1
- package/src/headers/{12 → 18}/node_context_data.h +5 -0
- package/src/headers/{12 → 18}/node_contextify.h +37 -2
- package/src/headers/{10/node_win32_perfctr_provider.h → 18/node_crypto.h} +30 -31
- package/src/headers/{12 → 18}/node_dir.h +0 -0
- package/src/headers/{12 → 18}/node_dtrace.h +0 -0
- package/src/headers/{12 → 18}/node_errors.h +90 -24
- package/src/headers/18/node_external_reference.h +145 -0
- package/src/headers/{13 → 18}/node_file-inl.h +38 -21
- package/src/headers/{12 → 18}/node_file.h +74 -13
- package/src/headers/{13 → 18}/node_http2.h +365 -269
- package/src/headers/{12 → 18}/node_http2_state.h +40 -50
- package/src/headers/{13 → 18}/node_http_common-inl.h +25 -5
- package/src/headers/{13 → 18}/node_http_common.h +24 -20
- package/src/headers/{13 → 18}/node_i18n.h +2 -1
- package/src/headers/{12 → 18}/node_internals.h +39 -41
- package/src/headers/{13 → 18}/node_main_instance.h +15 -18
- package/src/headers/{12 → 18}/node_mem-inl.h +0 -0
- package/src/headers/{12 → 18}/node_mem.h +1 -1
- package/src/headers/{13 → 18}/node_messaging.h +170 -23
- package/src/headers/{12 → 18}/node_metadata.h +17 -4
- package/src/headers/{12 → 18}/node_mutex.h +77 -1
- package/src/headers/{12 → 18}/node_native_module.h +11 -1
- package/src/headers/{13 → 18}/node_native_module_env.h +14 -8
- package/src/headers/{12 → 18}/node_object_wrap.h +0 -0
- package/src/headers/{13 → 18}/node_options-inl.h +51 -21
- package/src/headers/{13 → 18}/node_options.h +46 -14
- package/src/headers/18/node_perf.h +168 -0
- package/src/headers/{12 → 18}/node_perf_common.h +16 -22
- package/src/headers/{12 → 18}/node_platform.h +21 -16
- package/src/headers/18/node_process-inl.h +26 -0
- package/src/headers/18/node_process.h +97 -0
- package/src/headers/{13 → 18}/node_report.h +2 -2
- package/src/headers/{13 → 18}/node_revert.h +10 -0
- package/src/headers/{12 → 18}/node_root_certs.h +439 -651
- package/src/headers/18/node_snapshot_builder.h +43 -0
- package/src/headers/18/node_snapshotable.h +130 -0
- package/src/headers/{12 → 18}/node_sockaddr-inl.h +100 -4
- package/src/headers/18/node_sockaddr.h +405 -0
- package/src/headers/{12 → 18}/node_stat_watcher.h +7 -1
- package/src/headers/{12 → 18}/node_union_bytes.h +0 -0
- package/src/headers/{13 → 18}/node_url.h +18 -1
- package/src/headers/18/node_v8.h +41 -0
- package/src/headers/{12 → 18}/node_v8_platform-inl.h +10 -0
- package/src/headers/{13 → 18}/node_version.h +7 -7
- package/src/headers/{12 → 18}/node_wasi.h +0 -0
- package/src/headers/18/node_wasm_web_api.h +55 -0
- package/src/headers/{13 → 18}/node_watchdog.h +0 -0
- package/src/headers/{10 → 18}/node_win32_etw_provider-inl.h +7 -6
- package/src/headers/{10 → 18}/node_win32_etw_provider.h +0 -0
- package/src/headers/{13 → 18}/node_worker.h +24 -17
- package/src/headers/{12 → 18}/pipe_wrap.h +2 -0
- package/src/headers/{12 → 18}/req_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/req_wrap.h +1 -1
- package/src/headers/{12 → 18}/spawn_sync.h +0 -0
- package/src/headers/{13 → 18}/stream_base-inl.h +58 -22
- package/src/headers/{13 → 18}/stream_base.h +29 -3
- package/src/headers/{13 → 18}/stream_pipe.h +8 -3
- package/src/headers/{12 → 18}/stream_wrap.h +4 -1
- package/src/headers/{13 → 18}/string_bytes.h +0 -7
- package/src/headers/{12 → 18}/string_decoder-inl.h +0 -0
- package/src/headers/{10 → 18}/string_decoder.h +0 -0
- package/src/headers/{13 → 18}/string_search.h +2 -2
- package/src/headers/{12 → 18}/tcp_wrap.h +4 -0
- package/src/headers/{12 → 18}/threadpoolwork-inl.h +0 -0
- package/src/headers/18/timer_wrap-inl.h +32 -0
- package/src/headers/18/timer_wrap.h +85 -0
- package/src/headers/{13 → 18}/tracing/agent.h +1 -1
- package/src/headers/{12 → 18}/tracing/node_trace_buffer.h +0 -0
- package/src/headers/{12 → 18}/tracing/node_trace_writer.h +0 -0
- package/src/headers/{13 → 18}/tracing/trace_event.h +23 -13
- package/src/headers/{12 → 18}/tracing/trace_event_common.h +0 -0
- package/src/headers/{12 → 18}/tracing/traced_value.h +0 -0
- package/src/headers/{13 → 18}/tty_wrap.h +2 -1
- package/src/headers/{13 → 18}/udp_wrap.h +5 -0
- package/src/headers/{13 → 18}/util-inl.h +69 -15
- package/src/headers/{13 → 18}/util.h +93 -31
- package/src/headers/18/v8-fast-api-calls.h +939 -0
- package/src/headers/{12 → 18}/v8abbr.h +2 -2
- package/src/headers/10/aliased_buffer.h +0 -241
- package/src/headers/10/async_wrap-inl.h +0 -106
- package/src/headers/10/async_wrap.h +0 -218
- package/src/headers/10/base64.h +0 -197
- package/src/headers/10/base_object-inl.h +0 -132
- package/src/headers/10/base_object.h +0 -115
- package/src/headers/10/connect_wrap.h +0 -28
- package/src/headers/10/connection_wrap.h +0 -30
- package/src/headers/10/debug_utils.h +0 -128
- package/src/headers/10/env-inl.h +0 -906
- package/src/headers/10/env.h +0 -1046
- package/src/headers/10/handle_wrap.h +0 -114
- package/src/headers/10/inspector_agent.h +0 -137
- package/src/headers/10/inspector_io.h +0 -97
- package/src/headers/10/inspector_socket.h +0 -59
- package/src/headers/10/inspector_socket_server.h +0 -104
- package/src/headers/10/js_stream.h +0 -57
- package/src/headers/10/memory_tracker-inl.h +0 -318
- package/src/headers/10/memory_tracker.h +0 -246
- package/src/headers/10/module_wrap.h +0 -100
- package/src/headers/10/node.h +0 -863
- package/src/headers/10/node_api.h +0 -752
- package/src/headers/10/node_api_types.h +0 -171
- package/src/headers/10/node_buffer.h +0 -90
- package/src/headers/10/node_code_cache.h +0 -17
- package/src/headers/10/node_constants.h +0 -74
- package/src/headers/10/node_context_data.h +0 -39
- package/src/headers/10/node_contextify.h +0 -141
- package/src/headers/10/node_counters.h +0 -59
- package/src/headers/10/node_crypto.h +0 -699
- package/src/headers/10/node_crypto_bio.h +0 -177
- package/src/headers/10/node_crypto_clienthello-inl.h +0 -92
- package/src/headers/10/node_crypto_clienthello.h +0 -131
- package/src/headers/10/node_crypto_groups.h +0 -416
- package/src/headers/10/node_dtrace.h +0 -84
- package/src/headers/10/node_errors.h +0 -118
- package/src/headers/10/node_file.h +0 -373
- package/src/headers/10/node_http2.h +0 -1304
- package/src/headers/10/node_http2_state.h +0 -158
- package/src/headers/10/node_i18n.h +0 -69
- package/src/headers/10/node_internals.h +0 -952
- package/src/headers/10/node_javascript.h +0 -41
- package/src/headers/10/node_messaging.h +0 -219
- package/src/headers/10/node_mutex.h +0 -191
- package/src/headers/10/node_object_wrap.h +0 -130
- package/src/headers/10/node_options-inl.h +0 -444
- package/src/headers/10/node_options.h +0 -397
- package/src/headers/10/node_perf.h +0 -134
- package/src/headers/10/node_perf_common.h +0 -96
- package/src/headers/10/node_persistent.h +0 -30
- package/src/headers/10/node_platform.h +0 -170
- package/src/headers/10/node_revert.h +0 -75
- package/src/headers/10/node_root_certs.h +0 -3393
- package/src/headers/10/node_stat_watcher.h +0 -65
- package/src/headers/10/node_url.h +0 -193
- package/src/headers/10/node_version.h +0 -120
- package/src/headers/10/node_watchdog.h +0 -114
- package/src/headers/10/node_worker.h +0 -94
- package/src/headers/10/pipe_wrap.h +0 -76
- package/src/headers/10/req_wrap-inl.h +0 -166
- package/src/headers/10/req_wrap.h +0 -61
- package/src/headers/10/sharedarraybuffer_metadata.h +0 -67
- package/src/headers/10/spawn_sync.h +0 -240
- package/src/headers/10/stream_base-inl.h +0 -458
- package/src/headers/10/stream_base.h +0 -378
- package/src/headers/10/stream_pipe.h +0 -72
- package/src/headers/10/stream_wrap.h +0 -130
- package/src/headers/10/string_bytes.h +0 -126
- package/src/headers/10/string_decoder-inl.h +0 -38
- package/src/headers/10/string_search.h +0 -620
- package/src/headers/10/tcp_wrap.h +0 -99
- package/src/headers/10/tls_wrap.h +0 -195
- package/src/headers/10/tracing/agent.h +0 -178
- package/src/headers/10/tracing/node_trace_buffer.h +0 -83
- package/src/headers/10/tracing/node_trace_writer.h +0 -75
- package/src/headers/10/tracing/trace_event.h +0 -706
- package/src/headers/10/tracing/trace_event_common.h +0 -1102
- package/src/headers/10/tracing/traced_value.h +0 -68
- package/src/headers/10/tty_wrap.h +0 -63
- package/src/headers/10/udp_wrap.h +0 -102
- package/src/headers/10/util-inl.h +0 -459
- package/src/headers/10/util.h +0 -508
- package/src/headers/10/v8abbr.h +0 -121
- package/src/headers/12/aliased_buffer.h +0 -263
- package/src/headers/12/debug_utils.h +0 -181
- package/src/headers/12/histogram-inl.h +0 -83
- package/src/headers/12/histogram.h +0 -98
- package/src/headers/12/http_parser_adaptor.h +0 -24
- package/src/headers/12/inspector_agent.h +0 -147
- package/src/headers/12/inspector_profiler.h +0 -137
- package/src/headers/12/js_native_api.h +0 -541
- package/src/headers/12/js_native_api_types.h +0 -139
- package/src/headers/12/memory_tracker-inl.h +0 -339
- package/src/headers/12/memory_tracker.h +0 -283
- package/src/headers/12/module_wrap.h +0 -99
- package/src/headers/12/node.h +0 -887
- package/src/headers/12/node_api.h +0 -239
- package/src/headers/12/node_buffer.h +0 -92
- package/src/headers/12/node_constants.h +0 -80
- package/src/headers/12/node_crypto.h +0 -800
- package/src/headers/12/node_crypto_bio.h +0 -195
- package/src/headers/12/node_crypto_clienthello-inl.h +0 -91
- package/src/headers/12/node_crypto_clienthello.h +0 -132
- package/src/headers/12/node_file-inl.h +0 -289
- package/src/headers/12/node_http2.h +0 -1311
- package/src/headers/12/node_http_parser_impl.h +0 -994
- package/src/headers/12/node_i18n.h +0 -144
- package/src/headers/12/node_main_instance.h +0 -97
- package/src/headers/12/node_messaging.h +0 -227
- package/src/headers/12/node_native_module_env.h +0 -65
- package/src/headers/12/node_options-inl.h +0 -447
- package/src/headers/12/node_options.h +0 -479
- package/src/headers/12/node_perf.h +0 -181
- package/src/headers/12/node_process.h +0 -41
- package/src/headers/12/node_report.h +0 -47
- package/src/headers/12/node_revert.h +0 -78
- package/src/headers/12/node_sockaddr.h +0 -123
- package/src/headers/12/node_url.h +0 -188
- package/src/headers/12/node_version.h +0 -98
- package/src/headers/12/node_watchdog.h +0 -152
- package/src/headers/12/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/12/node_win32_etw_provider.h +0 -99
- package/src/headers/12/node_worker.h +0 -142
- package/src/headers/12/sharedarraybuffer_metadata.h +0 -72
- package/src/headers/12/stream_base-inl.h +0 -323
- package/src/headers/12/stream_base.h +0 -431
- package/src/headers/12/stream_pipe.h +0 -72
- package/src/headers/12/string_bytes.h +0 -142
- package/src/headers/12/string_decoder.h +0 -50
- package/src/headers/12/string_search.h +0 -638
- package/src/headers/12/tls_wrap.h +0 -221
- package/src/headers/12/tracing/agent.h +0 -195
- package/src/headers/12/tracing/trace_event.h +0 -710
- package/src/headers/12/tty_wrap.h +0 -64
- package/src/headers/12/udp_wrap.h +0 -222
- package/src/headers/12/util-inl.h +0 -529
- package/src/headers/12/util.h +0 -765
- package/src/headers/13/async_wrap-inl.h +0 -94
- package/src/headers/13/async_wrap.h +0 -224
- package/src/headers/13/base64.h +0 -197
- package/src/headers/13/base_object-inl.h +0 -353
- package/src/headers/13/base_object.h +0 -229
- package/src/headers/13/connect_wrap.h +0 -26
- package/src/headers/13/connection_wrap.h +0 -30
- package/src/headers/13/debug_utils-inl.h +0 -223
- package/src/headers/13/diagnosticfilename-inl.h +0 -33
- package/src/headers/13/env-inl.h +0 -1293
- package/src/headers/13/env.h +0 -1469
- package/src/headers/13/handle_wrap.h +0 -117
- package/src/headers/13/histogram-inl.h +0 -83
- package/src/headers/13/histogram.h +0 -98
- package/src/headers/13/inspector_io.h +0 -78
- package/src/headers/13/inspector_socket.h +0 -60
- package/src/headers/13/inspector_socket_server.h +0 -110
- package/src/headers/13/js_native_api.h +0 -541
- package/src/headers/13/js_native_api_v8.h +0 -303
- package/src/headers/13/js_native_api_v8_internals.h +0 -38
- package/src/headers/13/js_stream.h +0 -52
- package/src/headers/13/json_utils.h +0 -160
- package/src/headers/13/node_api.h +0 -239
- package/src/headers/13/node_api_types.h +0 -44
- package/src/headers/13/node_binding.h +0 -99
- package/src/headers/13/node_context_data.h +0 -39
- package/src/headers/13/node_contextify.h +0 -161
- package/src/headers/13/node_crypto.h +0 -800
- package/src/headers/13/node_crypto_common.h +0 -138
- package/src/headers/13/node_crypto_groups.h +0 -415
- package/src/headers/13/node_dir.h +0 -52
- package/src/headers/13/node_dtrace.h +0 -86
- package/src/headers/13/node_errors.h +0 -210
- package/src/headers/13/node_file.h +0 -364
- package/src/headers/13/node_http2_state.h +0 -144
- package/src/headers/13/node_internals.h +0 -405
- package/src/headers/13/node_mem-inl.h +0 -112
- package/src/headers/13/node_mem.h +0 -41
- package/src/headers/13/node_metadata.h +0 -109
- package/src/headers/13/node_mutex.h +0 -247
- package/src/headers/13/node_native_module.h +0 -99
- package/src/headers/13/node_object_wrap.h +0 -132
- package/src/headers/13/node_perf.h +0 -181
- package/src/headers/13/node_perf_common.h +0 -97
- package/src/headers/13/node_platform.h +0 -190
- package/src/headers/13/node_process.h +0 -41
- package/src/headers/13/node_root_certs.h +0 -3424
- package/src/headers/13/node_sockaddr-inl.h +0 -170
- package/src/headers/13/node_sockaddr.h +0 -123
- package/src/headers/13/node_stat_watcher.h +0 -66
- package/src/headers/13/node_union_bytes.h +0 -103
- package/src/headers/13/node_v8_platform-inl.h +0 -184
- package/src/headers/13/node_wasi.h +0 -108
- package/src/headers/13/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/13/node_win32_etw_provider.h +0 -99
- package/src/headers/13/pipe_wrap.h +0 -78
- package/src/headers/13/req_wrap-inl.h +0 -170
- package/src/headers/13/req_wrap.h +0 -77
- package/src/headers/13/spawn_sync.h +0 -242
- package/src/headers/13/stream_wrap.h +0 -130
- package/src/headers/13/string_decoder-inl.h +0 -37
- package/src/headers/13/string_decoder.h +0 -50
- package/src/headers/13/tcp_wrap.h +0 -101
- package/src/headers/13/threadpoolwork-inl.h +0 -57
- package/src/headers/13/tracing/node_trace_buffer.h +0 -83
- package/src/headers/13/tracing/node_trace_writer.h +0 -75
- package/src/headers/13/tracing/trace_event_common.h +0 -1109
- package/src/headers/13/tracing/traced_value.h +0 -70
- package/src/headers/13/v8abbr.h +0 -124
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
#ifndef SRC_CRYPTO_CRYPTO_CIPHER_H_
|
|
2
|
+
#define SRC_CRYPTO_CRYPTO_CIPHER_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "crypto/crypto_keys.h"
|
|
7
|
+
#include "crypto/crypto_util.h"
|
|
8
|
+
#include "base_object.h"
|
|
9
|
+
#include "env.h"
|
|
10
|
+
#include "memory_tracker.h"
|
|
11
|
+
#include "v8.h"
|
|
12
|
+
|
|
13
|
+
#include <string>
|
|
14
|
+
|
|
15
|
+
namespace node {
|
|
16
|
+
namespace crypto {
|
|
17
|
+
class CipherBase : public BaseObject {
|
|
18
|
+
public:
|
|
19
|
+
static void GetSSLCiphers(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
20
|
+
static void GetCiphers(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
21
|
+
|
|
22
|
+
static void Initialize(Environment* env, v8::Local<v8::Object> target);
|
|
23
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
24
|
+
|
|
25
|
+
void MemoryInfo(MemoryTracker* tracker) const override;
|
|
26
|
+
SET_MEMORY_INFO_NAME(CipherBase)
|
|
27
|
+
SET_SELF_SIZE(CipherBase)
|
|
28
|
+
|
|
29
|
+
protected:
|
|
30
|
+
enum CipherKind {
|
|
31
|
+
kCipher,
|
|
32
|
+
kDecipher
|
|
33
|
+
};
|
|
34
|
+
enum UpdateResult {
|
|
35
|
+
kSuccess,
|
|
36
|
+
kErrorMessageSize,
|
|
37
|
+
kErrorState
|
|
38
|
+
};
|
|
39
|
+
enum AuthTagState {
|
|
40
|
+
kAuthTagUnknown,
|
|
41
|
+
kAuthTagKnown,
|
|
42
|
+
kAuthTagPassedToOpenSSL
|
|
43
|
+
};
|
|
44
|
+
static const unsigned kNoAuthTagLength = static_cast<unsigned>(-1);
|
|
45
|
+
|
|
46
|
+
void CommonInit(const char* cipher_type,
|
|
47
|
+
const EVP_CIPHER* cipher,
|
|
48
|
+
const unsigned char* key,
|
|
49
|
+
int key_len,
|
|
50
|
+
const unsigned char* iv,
|
|
51
|
+
int iv_len,
|
|
52
|
+
unsigned int auth_tag_len);
|
|
53
|
+
void Init(const char* cipher_type,
|
|
54
|
+
const ArrayBufferOrViewContents<unsigned char>& key_buf,
|
|
55
|
+
unsigned int auth_tag_len);
|
|
56
|
+
void InitIv(const char* cipher_type,
|
|
57
|
+
const ByteSource& key_buf,
|
|
58
|
+
const ArrayBufferOrViewContents<unsigned char>& iv_buf,
|
|
59
|
+
unsigned int auth_tag_len);
|
|
60
|
+
bool InitAuthenticated(const char* cipher_type, int iv_len,
|
|
61
|
+
unsigned int auth_tag_len);
|
|
62
|
+
bool CheckCCMMessageLength(int message_len);
|
|
63
|
+
UpdateResult Update(const char* data, size_t len,
|
|
64
|
+
std::unique_ptr<v8::BackingStore>* out);
|
|
65
|
+
bool Final(std::unique_ptr<v8::BackingStore>* out);
|
|
66
|
+
bool SetAutoPadding(bool auto_padding);
|
|
67
|
+
|
|
68
|
+
bool IsAuthenticatedMode() const;
|
|
69
|
+
bool SetAAD(
|
|
70
|
+
const ArrayBufferOrViewContents<unsigned char>& data,
|
|
71
|
+
int plaintext_len);
|
|
72
|
+
bool MaybePassAuthTagToOpenSSL();
|
|
73
|
+
|
|
74
|
+
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
75
|
+
static void Init(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
76
|
+
static void InitIv(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
77
|
+
static void Update(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
78
|
+
static void Final(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
79
|
+
static void SetAutoPadding(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
80
|
+
|
|
81
|
+
static void GetAuthTag(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
82
|
+
static void SetAuthTag(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
83
|
+
static void SetAAD(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
84
|
+
|
|
85
|
+
CipherBase(Environment* env, v8::Local<v8::Object> wrap, CipherKind kind);
|
|
86
|
+
|
|
87
|
+
private:
|
|
88
|
+
DeleteFnPtr<EVP_CIPHER_CTX, EVP_CIPHER_CTX_free> ctx_;
|
|
89
|
+
const CipherKind kind_;
|
|
90
|
+
AuthTagState auth_tag_state_;
|
|
91
|
+
unsigned int auth_tag_len_;
|
|
92
|
+
char auth_tag_[EVP_GCM_TLS_TAG_LEN];
|
|
93
|
+
bool pending_auth_failed_;
|
|
94
|
+
int max_message_size_;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
class PublicKeyCipher {
|
|
98
|
+
public:
|
|
99
|
+
typedef int (*EVP_PKEY_cipher_init_t)(EVP_PKEY_CTX* ctx);
|
|
100
|
+
typedef int (*EVP_PKEY_cipher_t)(EVP_PKEY_CTX* ctx,
|
|
101
|
+
unsigned char* out, size_t* outlen,
|
|
102
|
+
const unsigned char* in, size_t inlen);
|
|
103
|
+
|
|
104
|
+
enum Operation {
|
|
105
|
+
kPublic,
|
|
106
|
+
kPrivate
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
template <Operation operation,
|
|
110
|
+
EVP_PKEY_cipher_init_t EVP_PKEY_cipher_init,
|
|
111
|
+
EVP_PKEY_cipher_t EVP_PKEY_cipher>
|
|
112
|
+
static bool Cipher(Environment* env,
|
|
113
|
+
const ManagedEVPPKey& pkey,
|
|
114
|
+
int padding,
|
|
115
|
+
const EVP_MD* digest,
|
|
116
|
+
const ArrayBufferOrViewContents<unsigned char>& oaep_label,
|
|
117
|
+
const ArrayBufferOrViewContents<unsigned char>& data,
|
|
118
|
+
std::unique_ptr<v8::BackingStore>* out);
|
|
119
|
+
|
|
120
|
+
template <Operation operation,
|
|
121
|
+
EVP_PKEY_cipher_init_t EVP_PKEY_cipher_init,
|
|
122
|
+
EVP_PKEY_cipher_t EVP_PKEY_cipher>
|
|
123
|
+
static void Cipher(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
enum WebCryptoCipherMode {
|
|
127
|
+
kWebCryptoCipherEncrypt,
|
|
128
|
+
kWebCryptoCipherDecrypt
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
enum class WebCryptoCipherStatus {
|
|
132
|
+
OK,
|
|
133
|
+
INVALID_KEY_TYPE,
|
|
134
|
+
FAILED
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
// CipherJob is a base implementation class for implementations of
|
|
138
|
+
// one-shot sync and async ciphers. It has been added primarily to
|
|
139
|
+
// support the AES and RSA ciphers underlying the WebCrypt API.
|
|
140
|
+
//
|
|
141
|
+
// See the crypto_aes and crypto_rsa headers for examples of how to
|
|
142
|
+
// use CipherJob.
|
|
143
|
+
template <typename CipherTraits>
|
|
144
|
+
class CipherJob final : public CryptoJob<CipherTraits> {
|
|
145
|
+
public:
|
|
146
|
+
using AdditionalParams = typename CipherTraits::AdditionalParameters;
|
|
147
|
+
|
|
148
|
+
static void New(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
|
149
|
+
Environment* env = Environment::GetCurrent(args);
|
|
150
|
+
CHECK(args.IsConstructCall());
|
|
151
|
+
|
|
152
|
+
CryptoJobMode mode = GetCryptoJobMode(args[0]);
|
|
153
|
+
|
|
154
|
+
CHECK(args[1]->IsUint32()); // Cipher Mode
|
|
155
|
+
|
|
156
|
+
uint32_t cmode = args[1].As<v8::Uint32>()->Value();
|
|
157
|
+
CHECK_LE(cmode, WebCryptoCipherMode::kWebCryptoCipherDecrypt);
|
|
158
|
+
WebCryptoCipherMode cipher_mode = static_cast<WebCryptoCipherMode>(cmode);
|
|
159
|
+
|
|
160
|
+
CHECK(args[2]->IsObject()); // KeyObject
|
|
161
|
+
KeyObjectHandle* key;
|
|
162
|
+
ASSIGN_OR_RETURN_UNWRAP(&key, args[2]);
|
|
163
|
+
CHECK_NOT_NULL(key);
|
|
164
|
+
|
|
165
|
+
ArrayBufferOrViewContents<char> data(args[3]); // data to operate on
|
|
166
|
+
if (!data.CheckSizeInt32())
|
|
167
|
+
return THROW_ERR_OUT_OF_RANGE(env, "data is too large");
|
|
168
|
+
|
|
169
|
+
AdditionalParams params;
|
|
170
|
+
if (CipherTraits::AdditionalConfig(mode, args, 4, cipher_mode, ¶ms)
|
|
171
|
+
.IsNothing()) {
|
|
172
|
+
// The CipherTraits::AdditionalConfig is responsible for
|
|
173
|
+
// calling an appropriate THROW_CRYPTO_* variant reporting
|
|
174
|
+
// whatever error caused initialization to fail.
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
new CipherJob<CipherTraits>(
|
|
179
|
+
env,
|
|
180
|
+
args.This(),
|
|
181
|
+
mode,
|
|
182
|
+
key,
|
|
183
|
+
cipher_mode,
|
|
184
|
+
data,
|
|
185
|
+
std::move(params));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
static void Initialize(
|
|
189
|
+
Environment* env,
|
|
190
|
+
v8::Local<v8::Object> target) {
|
|
191
|
+
CryptoJob<CipherTraits>::Initialize(New, env, target);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
|
|
195
|
+
CryptoJob<CipherTraits>::RegisterExternalReferences(New, registry);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
CipherJob(
|
|
199
|
+
Environment* env,
|
|
200
|
+
v8::Local<v8::Object> object,
|
|
201
|
+
CryptoJobMode mode,
|
|
202
|
+
KeyObjectHandle* key,
|
|
203
|
+
WebCryptoCipherMode cipher_mode,
|
|
204
|
+
const ArrayBufferOrViewContents<char>& data,
|
|
205
|
+
AdditionalParams&& params)
|
|
206
|
+
: CryptoJob<CipherTraits>(
|
|
207
|
+
env,
|
|
208
|
+
object,
|
|
209
|
+
AsyncWrap::PROVIDER_CIPHERREQUEST,
|
|
210
|
+
mode,
|
|
211
|
+
std::move(params)),
|
|
212
|
+
key_(key->Data()),
|
|
213
|
+
cipher_mode_(cipher_mode),
|
|
214
|
+
in_(mode == kCryptoJobAsync
|
|
215
|
+
? data.ToCopy()
|
|
216
|
+
: data.ToByteSource()) {}
|
|
217
|
+
|
|
218
|
+
std::shared_ptr<KeyObjectData> key() const { return key_; }
|
|
219
|
+
|
|
220
|
+
WebCryptoCipherMode cipher_mode() const { return cipher_mode_; }
|
|
221
|
+
|
|
222
|
+
void DoThreadPoolWork() override {
|
|
223
|
+
const WebCryptoCipherStatus status =
|
|
224
|
+
CipherTraits::DoCipher(
|
|
225
|
+
AsyncWrap::env(),
|
|
226
|
+
key(),
|
|
227
|
+
cipher_mode_,
|
|
228
|
+
*CryptoJob<CipherTraits>::params(),
|
|
229
|
+
in_,
|
|
230
|
+
&out_);
|
|
231
|
+
if (status == WebCryptoCipherStatus::OK) {
|
|
232
|
+
// Success!
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
CryptoErrorStore* errors = CryptoJob<CipherTraits>::errors();
|
|
236
|
+
errors->Capture();
|
|
237
|
+
if (errors->Empty()) {
|
|
238
|
+
switch (status) {
|
|
239
|
+
case WebCryptoCipherStatus::OK:
|
|
240
|
+
UNREACHABLE();
|
|
241
|
+
break;
|
|
242
|
+
case WebCryptoCipherStatus::INVALID_KEY_TYPE:
|
|
243
|
+
errors->Insert(NodeCryptoError::INVALID_KEY_TYPE);
|
|
244
|
+
break;
|
|
245
|
+
case WebCryptoCipherStatus::FAILED:
|
|
246
|
+
errors->Insert(NodeCryptoError::CIPHER_JOB_FAILED);
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
v8::Maybe<bool> ToResult(
|
|
253
|
+
v8::Local<v8::Value>* err,
|
|
254
|
+
v8::Local<v8::Value>* result) override {
|
|
255
|
+
Environment* env = AsyncWrap::env();
|
|
256
|
+
CryptoErrorStore* errors = CryptoJob<CipherTraits>::errors();
|
|
257
|
+
|
|
258
|
+
if (errors->Empty())
|
|
259
|
+
errors->Capture();
|
|
260
|
+
|
|
261
|
+
if (out_.size() > 0 || errors->Empty()) {
|
|
262
|
+
CHECK(errors->Empty());
|
|
263
|
+
*err = v8::Undefined(env->isolate());
|
|
264
|
+
*result = out_.ToArrayBuffer(env);
|
|
265
|
+
return v8::Just(!result->IsEmpty());
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
*result = v8::Undefined(env->isolate());
|
|
269
|
+
return v8::Just(errors->ToException(env).ToLocal(err));
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
SET_SELF_SIZE(CipherJob)
|
|
273
|
+
void MemoryInfo(MemoryTracker* tracker) const override {
|
|
274
|
+
if (CryptoJob<CipherTraits>::mode() == kCryptoJobAsync)
|
|
275
|
+
tracker->TrackFieldWithSize("in", in_.size());
|
|
276
|
+
tracker->TrackFieldWithSize("out", out_.size());
|
|
277
|
+
CryptoJob<CipherTraits>::MemoryInfo(tracker);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
private:
|
|
281
|
+
std::shared_ptr<KeyObjectData> key_;
|
|
282
|
+
WebCryptoCipherMode cipher_mode_;
|
|
283
|
+
ByteSource in_;
|
|
284
|
+
ByteSource out_;
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
} // namespace crypto
|
|
288
|
+
} // namespace node
|
|
289
|
+
|
|
290
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
291
|
+
#endif // SRC_CRYPTO_CRYPTO_CIPHER_H_
|
|
@@ -19,17 +19,16 @@
|
|
|
19
19
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
20
20
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
21
|
|
|
22
|
-
#ifndef
|
|
23
|
-
#define
|
|
22
|
+
#ifndef SRC_CRYPTO_CRYPTO_CLIENTHELLO_INL_H_
|
|
23
|
+
#define SRC_CRYPTO_CRYPTO_CLIENTHELLO_INL_H_
|
|
24
24
|
|
|
25
25
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
26
26
|
|
|
27
|
-
#include "
|
|
27
|
+
#include "crypto/crypto_clienthello.h"
|
|
28
28
|
#include "util.h"
|
|
29
29
|
|
|
30
30
|
namespace node {
|
|
31
31
|
namespace crypto {
|
|
32
|
-
|
|
33
32
|
inline ClientHelloParser::ClientHelloParser()
|
|
34
33
|
: state_(kEnded),
|
|
35
34
|
onhello_cb_(nullptr),
|
|
@@ -88,4 +87,4 @@ inline bool ClientHelloParser::IsPaused() const {
|
|
|
88
87
|
|
|
89
88
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
90
89
|
|
|
91
|
-
#endif //
|
|
90
|
+
#endif // SRC_CRYPTO_CRYPTO_CLIENTHELLO_INL_H_
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
20
20
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
21
|
|
|
22
|
-
#ifndef
|
|
23
|
-
#define
|
|
22
|
+
#ifndef SRC_CRYPTO_CRYPTO_CLIENTHELLO_H_
|
|
23
|
+
#define SRC_CRYPTO_CRYPTO_CLIENTHELLO_H_
|
|
24
24
|
|
|
25
25
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
26
26
|
|
|
@@ -29,7 +29,6 @@
|
|
|
29
29
|
|
|
30
30
|
namespace node {
|
|
31
31
|
namespace crypto {
|
|
32
|
-
|
|
33
32
|
// Parse the client hello so we can do async session resumption. OpenSSL's
|
|
34
33
|
// session resumption uses synchronous callbacks, see SSL_CTX_sess_set_get_cb
|
|
35
34
|
// and get_session_cb.
|
|
@@ -129,4 +128,4 @@ class ClientHelloParser {
|
|
|
129
128
|
|
|
130
129
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
131
130
|
|
|
132
|
-
#endif //
|
|
131
|
+
#endif // SRC_CRYPTO_CRYPTO_CLIENTHELLO_H_
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
#ifndef
|
|
2
|
-
#define
|
|
1
|
+
#ifndef SRC_CRYPTO_CRYPTO_COMMON_H_
|
|
2
|
+
#define SRC_CRYPTO_CRYPTO_COMMON_H_
|
|
3
3
|
|
|
4
4
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
5
|
|
|
@@ -9,17 +9,10 @@
|
|
|
9
9
|
#include <openssl/x509v3.h>
|
|
10
10
|
|
|
11
11
|
#include <string>
|
|
12
|
-
#include <unordered_map>
|
|
13
12
|
|
|
14
13
|
namespace node {
|
|
15
14
|
namespace crypto {
|
|
16
15
|
|
|
17
|
-
// OPENSSL_free is a macro, so we need a wrapper function.
|
|
18
|
-
struct OpenSSLBufferDeleter {
|
|
19
|
-
void operator()(char* pointer) const { OPENSSL_free(pointer); }
|
|
20
|
-
};
|
|
21
|
-
using OpenSSLBuffer = std::unique_ptr<char[], OpenSSLBufferDeleter>;
|
|
22
|
-
|
|
23
16
|
struct StackOfX509Deleter {
|
|
24
17
|
void operator()(STACK_OF(X509)* p) const { sk_X509_pop_free(p, X509_free); }
|
|
25
18
|
};
|
|
@@ -32,7 +25,7 @@ struct StackOfXASN1Deleter {
|
|
|
32
25
|
};
|
|
33
26
|
using StackOfASN1 = std::unique_ptr<STACK_OF(ASN1_OBJECT), StackOfXASN1Deleter>;
|
|
34
27
|
|
|
35
|
-
|
|
28
|
+
X509Pointer SSL_CTX_get_issuer(SSL_CTX* ctx, X509* cert);
|
|
36
29
|
|
|
37
30
|
void LogSecret(
|
|
38
31
|
const SSLPointer& ssl,
|
|
@@ -49,29 +42,17 @@ v8::MaybeLocal<v8::Value> GetSSLOCSPResponse(
|
|
|
49
42
|
SSL* ssl,
|
|
50
43
|
v8::Local<v8::Value> default_value);
|
|
51
44
|
|
|
52
|
-
bool SetTLSSession(
|
|
53
|
-
const SSLPointer& ssl,
|
|
54
|
-
const unsigned char* buf,
|
|
55
|
-
size_t length);
|
|
56
|
-
|
|
57
45
|
bool SetTLSSession(
|
|
58
46
|
const SSLPointer& ssl,
|
|
59
47
|
const SSLSessionPointer& session);
|
|
60
48
|
|
|
61
|
-
SSLSessionPointer GetTLSSession(v8::Local<v8::Value> val);
|
|
62
|
-
|
|
63
49
|
SSLSessionPointer GetTLSSession(const unsigned char* buf, size_t length);
|
|
64
50
|
|
|
65
|
-
std::unordered_multimap<std::string, std::string>
|
|
66
|
-
GetCertificateAltNames(X509* cert);
|
|
67
|
-
|
|
68
|
-
std::string GetCertificateCN(X509* cert);
|
|
69
|
-
|
|
70
51
|
long VerifyPeerCertificate( // NOLINT(runtime/int)
|
|
71
52
|
const SSLPointer& ssl,
|
|
72
53
|
long def = X509_V_ERR_UNSPECIFIED); // NOLINT(runtime/int)
|
|
73
54
|
|
|
74
|
-
|
|
55
|
+
bool UseSNIContext(const SSLPointer& ssl, BaseObjectPtr<SecureContext> context);
|
|
75
56
|
|
|
76
57
|
const char* GetClientHelloALPN(const SSLPointer& ssl);
|
|
77
58
|
|
|
@@ -93,18 +74,6 @@ v8::MaybeLocal<v8::Value> GetValidationErrorCode(Environment* env, int err);
|
|
|
93
74
|
|
|
94
75
|
v8::MaybeLocal<v8::Value> GetCert(Environment* env, const SSLPointer& ssl);
|
|
95
76
|
|
|
96
|
-
v8::MaybeLocal<v8::Value> GetCipherName(
|
|
97
|
-
Environment* env,
|
|
98
|
-
const SSLPointer& ssl);
|
|
99
|
-
|
|
100
|
-
v8::MaybeLocal<v8::Value> GetCipherStandardName(
|
|
101
|
-
Environment* env,
|
|
102
|
-
const SSLPointer& ssl);
|
|
103
|
-
|
|
104
|
-
v8::MaybeLocal<v8::Value> GetCipherVersion(
|
|
105
|
-
Environment* env,
|
|
106
|
-
const SSLPointer& ssl);
|
|
107
|
-
|
|
108
77
|
v8::MaybeLocal<v8::Object> GetCipherInfo(
|
|
109
78
|
Environment* env,
|
|
110
79
|
const SSLPointer& ssl);
|
|
@@ -130,9 +99,53 @@ v8::MaybeLocal<v8::Object> X509ToObject(
|
|
|
130
99
|
Environment* env,
|
|
131
100
|
X509* cert);
|
|
132
101
|
|
|
102
|
+
v8::MaybeLocal<v8::Value> GetValidTo(
|
|
103
|
+
Environment* env,
|
|
104
|
+
X509* cert,
|
|
105
|
+
const BIOPointer& bio);
|
|
106
|
+
|
|
107
|
+
v8::MaybeLocal<v8::Value> GetValidFrom(
|
|
108
|
+
Environment* env,
|
|
109
|
+
X509* cert,
|
|
110
|
+
const BIOPointer& bio);
|
|
111
|
+
|
|
112
|
+
v8::MaybeLocal<v8::Value> GetFingerprintDigest(
|
|
113
|
+
Environment* env,
|
|
114
|
+
const EVP_MD* method,
|
|
115
|
+
X509* cert);
|
|
116
|
+
|
|
117
|
+
v8::MaybeLocal<v8::Value> GetKeyUsage(Environment* env, X509* cert);
|
|
118
|
+
|
|
119
|
+
v8::MaybeLocal<v8::Value> GetSerialNumber(Environment* env, X509* cert);
|
|
120
|
+
|
|
121
|
+
v8::MaybeLocal<v8::Object> GetRawDERCertificate(Environment* env, X509* cert);
|
|
122
|
+
|
|
123
|
+
v8::Local<v8::Value> ToV8Value(Environment* env, const BIOPointer& bio);
|
|
124
|
+
bool SafeX509SubjectAltNamePrint(const BIOPointer& out, X509_EXTENSION* ext);
|
|
125
|
+
|
|
126
|
+
v8::MaybeLocal<v8::Value> GetSubject(
|
|
127
|
+
Environment* env,
|
|
128
|
+
const BIOPointer& bio,
|
|
129
|
+
X509* cert);
|
|
130
|
+
|
|
131
|
+
v8::MaybeLocal<v8::Value> GetIssuerString(
|
|
132
|
+
Environment* env,
|
|
133
|
+
const BIOPointer& bio,
|
|
134
|
+
X509* cert);
|
|
135
|
+
|
|
136
|
+
v8::MaybeLocal<v8::Value> GetSubjectAltNameString(
|
|
137
|
+
Environment* env,
|
|
138
|
+
const BIOPointer& bio,
|
|
139
|
+
X509* cert);
|
|
140
|
+
|
|
141
|
+
v8::MaybeLocal<v8::Value> GetInfoAccessString(
|
|
142
|
+
Environment* env,
|
|
143
|
+
const BIOPointer& bio,
|
|
144
|
+
X509* cert);
|
|
145
|
+
|
|
133
146
|
} // namespace crypto
|
|
134
147
|
} // namespace node
|
|
135
148
|
|
|
136
149
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
137
150
|
|
|
138
|
-
#endif //
|
|
151
|
+
#endif // SRC_CRYPTO_CRYPTO_COMMON_H_
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
#ifndef SRC_CRYPTO_CRYPTO_CONTEXT_H_
|
|
2
|
+
#define SRC_CRYPTO_CRYPTO_CONTEXT_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "crypto/crypto_util.h"
|
|
7
|
+
#include "base_object.h"
|
|
8
|
+
#include "env.h"
|
|
9
|
+
#include "memory_tracker.h"
|
|
10
|
+
#include "v8.h"
|
|
11
|
+
|
|
12
|
+
namespace node {
|
|
13
|
+
namespace crypto {
|
|
14
|
+
// A maxVersion of 0 means "any", but OpenSSL may support TLS versions that
|
|
15
|
+
// Node.js doesn't, so pin the max to what we do support.
|
|
16
|
+
constexpr int kMaxSupportedVersion = TLS1_3_VERSION;
|
|
17
|
+
|
|
18
|
+
void GetRootCertificates(
|
|
19
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
20
|
+
|
|
21
|
+
void IsExtraRootCertsFileLoaded(
|
|
22
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
23
|
+
|
|
24
|
+
X509_STORE* NewRootCertStore();
|
|
25
|
+
|
|
26
|
+
BIOPointer LoadBIO(Environment* env, v8::Local<v8::Value> v);
|
|
27
|
+
|
|
28
|
+
class SecureContext final : public BaseObject {
|
|
29
|
+
public:
|
|
30
|
+
using GetSessionCb = SSL_SESSION* (*)(SSL*, const unsigned char*, int, int*);
|
|
31
|
+
using KeylogCb = void (*)(const SSL*, const char*);
|
|
32
|
+
using NewSessionCb = int (*)(SSL*, SSL_SESSION*);
|
|
33
|
+
using SelectSNIContextCb = int (*)(SSL*, int*, void*);
|
|
34
|
+
|
|
35
|
+
~SecureContext() override;
|
|
36
|
+
|
|
37
|
+
static bool HasInstance(Environment* env, const v8::Local<v8::Value>& value);
|
|
38
|
+
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
|
|
39
|
+
Environment* env);
|
|
40
|
+
static void Initialize(Environment* env, v8::Local<v8::Object> target);
|
|
41
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
42
|
+
static SecureContext* Create(Environment* env);
|
|
43
|
+
|
|
44
|
+
const SSLCtxPointer& ctx() const { return ctx_; }
|
|
45
|
+
|
|
46
|
+
SSLPointer CreateSSL();
|
|
47
|
+
|
|
48
|
+
void SetGetSessionCallback(GetSessionCb cb);
|
|
49
|
+
void SetKeylogCallback(KeylogCb cb);
|
|
50
|
+
void SetNewSessionCallback(NewSessionCb cb);
|
|
51
|
+
void SetSelectSNIContextCallback(SelectSNIContextCb cb);
|
|
52
|
+
|
|
53
|
+
// TODO(joyeecheung): track the memory used by OpenSSL types
|
|
54
|
+
SET_NO_MEMORY_INFO()
|
|
55
|
+
SET_MEMORY_INFO_NAME(SecureContext)
|
|
56
|
+
SET_SELF_SIZE(SecureContext)
|
|
57
|
+
|
|
58
|
+
static const int kMaxSessionSize = 10 * 1024;
|
|
59
|
+
|
|
60
|
+
// See TicketKeyCallback
|
|
61
|
+
static const int kTicketKeyReturnIndex = 0;
|
|
62
|
+
static const int kTicketKeyHMACIndex = 1;
|
|
63
|
+
static const int kTicketKeyAESIndex = 2;
|
|
64
|
+
static const int kTicketKeyNameIndex = 3;
|
|
65
|
+
static const int kTicketKeyIVIndex = 4;
|
|
66
|
+
|
|
67
|
+
protected:
|
|
68
|
+
// OpenSSL structures are opaque. This is sizeof(SSL_CTX) for OpenSSL 1.1.1b:
|
|
69
|
+
static const int64_t kExternalSize = 1024;
|
|
70
|
+
|
|
71
|
+
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
72
|
+
static void Init(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
73
|
+
static void SetKey(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
74
|
+
#ifndef OPENSSL_NO_ENGINE
|
|
75
|
+
static void SetEngineKey(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
76
|
+
#endif // !OPENSSL_NO_ENGINE
|
|
77
|
+
static void SetCert(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
78
|
+
static void AddCACert(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
79
|
+
static void AddCRL(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
80
|
+
static void AddRootCerts(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
81
|
+
static void SetCipherSuites(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
82
|
+
static void SetCiphers(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
83
|
+
static void SetSigalgs(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
84
|
+
static void SetECDHCurve(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
85
|
+
static void SetDHParam(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
86
|
+
static void SetOptions(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
87
|
+
static void SetSessionIdContext(
|
|
88
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
89
|
+
static void SetSessionTimeout(
|
|
90
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
91
|
+
static void SetMinProto(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
92
|
+
static void SetMaxProto(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
93
|
+
static void GetMinProto(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
94
|
+
static void GetMaxProto(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
95
|
+
static void Close(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
96
|
+
static void LoadPKCS12(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
97
|
+
#ifndef OPENSSL_NO_ENGINE
|
|
98
|
+
static void SetClientCertEngine(
|
|
99
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
100
|
+
#endif // !OPENSSL_NO_ENGINE
|
|
101
|
+
static void GetTicketKeys(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
102
|
+
static void SetTicketKeys(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
103
|
+
static void SetFreeListLength(
|
|
104
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
105
|
+
static void EnableTicketKeyCallback(
|
|
106
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
107
|
+
static void CtxGetter(const v8::FunctionCallbackInfo<v8::Value>& info);
|
|
108
|
+
|
|
109
|
+
template <bool primary>
|
|
110
|
+
static void GetCertificate(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
111
|
+
|
|
112
|
+
static int TicketKeyCallback(SSL* ssl,
|
|
113
|
+
unsigned char* name,
|
|
114
|
+
unsigned char* iv,
|
|
115
|
+
EVP_CIPHER_CTX* ectx,
|
|
116
|
+
HMAC_CTX* hctx,
|
|
117
|
+
int enc);
|
|
118
|
+
|
|
119
|
+
static int TicketCompatibilityCallback(SSL* ssl,
|
|
120
|
+
unsigned char* name,
|
|
121
|
+
unsigned char* iv,
|
|
122
|
+
EVP_CIPHER_CTX* ectx,
|
|
123
|
+
HMAC_CTX* hctx,
|
|
124
|
+
int enc);
|
|
125
|
+
|
|
126
|
+
SecureContext(Environment* env, v8::Local<v8::Object> wrap);
|
|
127
|
+
void Reset();
|
|
128
|
+
|
|
129
|
+
private:
|
|
130
|
+
SSLCtxPointer ctx_;
|
|
131
|
+
X509Pointer cert_;
|
|
132
|
+
X509Pointer issuer_;
|
|
133
|
+
#ifndef OPENSSL_NO_ENGINE
|
|
134
|
+
bool client_cert_engine_provided_ = false;
|
|
135
|
+
EnginePointer private_key_engine_;
|
|
136
|
+
#endif // !OPENSSL_NO_ENGINE
|
|
137
|
+
|
|
138
|
+
unsigned char ticket_key_name_[16];
|
|
139
|
+
unsigned char ticket_key_aes_[16];
|
|
140
|
+
unsigned char ticket_key_hmac_[16];
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
} // namespace crypto
|
|
144
|
+
} // namespace node
|
|
145
|
+
|
|
146
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
147
|
+
#endif // SRC_CRYPTO_CRYPTO_CONTEXT_H_
|