@encharm/cws 4.4.1 → 4.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +1 -1
- package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
- package/dist/bindings/cws_linux_arm64_node115.node +0 -0
- package/dist/bindings/cws_linux_arm64_node127.node +0 -0
- package/dist/bindings/cws_linux_x64_node115.node +0 -0
- package/dist/bindings/cws_linux_x64_node127.node +0 -0
- package/dist/bindings/cws_linux_x64_node137.node +0 -0
- package/dist/bindings/cws_win32_x64_node108.node +0 -0
- package/dist/bindings/cws_win32_x64_node115.node +0 -0
- package/dist/bindings/cws_win32_x64_node127.node +0 -0
- package/dist/bindings/cws_win32_x64_node83.node +0 -0
- package/dist/bindings/cws_win32_x64_node93.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +13 -23
- package/src/Socket.h +0 -1
- package/src/headers/22/acorn_version.h +6 -0
- package/src/headers/22/aliased_buffer-inl.h +243 -0
- package/src/headers/22/aliased_buffer.h +206 -0
- package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
- package/src/headers/{18 → 22}/async_wrap.h +65 -59
- package/src/headers/{18 → 22}/base_object-inl.h +57 -117
- package/src/headers/{18 → 22}/base_object.h +58 -30
- package/src/headers/22/base_object_types.h +74 -0
- package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
- package/src/headers/22/blob_serializer_deserializer.h +132 -0
- package/src/headers/{16 → 22}/callback_queue.h +1 -0
- package/src/headers/{16 → 22}/cares_wrap.h +27 -20
- package/src/headers/22/cjs_module_lexer_version.h +6 -0
- package/src/headers/22/cleanup_queue-inl.h +62 -0
- package/src/headers/22/cleanup_queue.h +85 -0
- package/src/headers/22/compile_cache.h +104 -0
- package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
- package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
- package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
- package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
- package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
- package/src/headers/22/crypto/ncrypto.h +752 -0
- package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
- package/src/headers/{18 → 22}/debug_utils.h +25 -19
- package/src/headers/22/encoding_binding.h +59 -0
- package/src/headers/{14 → 22}/env-inl.h +276 -409
- package/src/headers/22/env.h +1266 -0
- package/src/headers/22/env_properties.h +497 -0
- package/src/headers/{18 → 22}/handle_wrap.h +2 -0
- package/src/headers/{18 → 22}/histogram.h +88 -48
- package/src/headers/{16 → 22}/inspector_agent.h +17 -1
- package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
- package/src/headers/22/js_native_api.h +619 -0
- package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
- package/src/headers/22/js_native_api_v8.h +485 -0
- package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
- package/src/headers/22/json_parser.h +40 -0
- package/src/headers/{16 → 22}/json_utils.h +19 -8
- package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
- package/src/headers/{14 → 22}/memory_tracker.h +13 -8
- package/src/headers/{16 → 22}/module_wrap.h +49 -19
- package/src/headers/22/ncrypto/ncrypto.h +752 -0
- package/src/headers/{18 → 22}/node.h +465 -68
- package/src/headers/{18 → 22}/node_api.h +66 -81
- package/src/headers/{18 → 22}/node_api_internals.h +8 -4
- package/src/headers/{18 → 22}/node_api_types.h +5 -0
- package/src/headers/22/node_binding.h +154 -0
- package/src/headers/{18 → 22}/node_blob.h +46 -78
- package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
- package/src/headers/{18 → 22}/node_bob.h +2 -6
- package/src/headers/{18 → 22}/node_buffer.h +1 -1
- package/src/headers/22/node_builtins.h +220 -0
- package/src/headers/{18 → 22}/node_constants.h +3 -5
- package/src/headers/22/node_context_data.h +168 -0
- package/src/headers/22/node_contextify.h +199 -0
- package/src/headers/{16 → 22}/node_crypto.h +1 -2
- package/src/headers/22/node_dotenv.h +45 -0
- package/src/headers/{18 → 22}/node_errors.h +86 -27
- package/src/headers/22/node_exit_code.h +54 -0
- package/src/headers/22/node_external_reference.h +249 -0
- package/src/headers/{18 → 22}/node_file-inl.h +127 -30
- package/src/headers/{16 → 22}/node_file.h +122 -11
- package/src/headers/{18 → 22}/node_http2.h +28 -11
- package/src/headers/{16 → 22}/node_http2_state.h +34 -25
- package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
- package/src/headers/{18 → 22}/node_http_common.h +56 -55
- package/src/headers/{16 → 22}/node_i18n.h +5 -18
- package/src/headers/{18 → 22}/node_internals.h +121 -59
- package/src/headers/{18 → 22}/node_main_instance.h +4 -31
- package/src/headers/{18 → 22}/node_messaging.h +27 -10
- package/src/headers/{18 → 22}/node_metadata.h +23 -1
- package/src/headers/{18 → 22}/node_options-inl.h +24 -11
- package/src/headers/{18 → 22}/node_options.h +124 -39
- package/src/headers/{18 → 22}/node_perf.h +0 -2
- package/src/headers/{18 → 22}/node_perf_common.h +20 -9
- package/src/headers/{18 → 22}/node_platform.h +11 -5
- package/src/headers/{18 → 22}/node_process.h +26 -14
- package/src/headers/22/node_realm-inl.h +145 -0
- package/src/headers/22/node_realm.h +184 -0
- package/src/headers/{16 → 22}/node_report.h +13 -17
- package/src/headers/{16 → 22}/node_revert.h +3 -3
- package/src/headers/{16 → 22}/node_root_certs.h +902 -461
- package/src/headers/22/node_sea.h +64 -0
- package/src/headers/22/node_shadow_realm.h +46 -0
- package/src/headers/22/node_snapshot_builder.h +57 -0
- package/src/headers/22/node_snapshotable.h +174 -0
- package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
- package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
- package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
- package/src/headers/22/node_threadsafe_cow.h +105 -0
- package/src/headers/22/node_union_bytes.h +81 -0
- package/src/headers/22/node_url.h +96 -0
- package/src/headers/22/node_v8.h +77 -0
- package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
- package/src/headers/{16 → 22}/node_version.h +21 -9
- package/src/headers/22/node_wasi.h +185 -0
- package/src/headers/{14 → 22}/node_watchdog.h +2 -0
- package/src/headers/{18 → 22}/node_worker.h +7 -2
- package/src/headers/22/permission/child_process_permission.h +31 -0
- package/src/headers/22/permission/fs_permission.h +167 -0
- package/src/headers/22/permission/inspector_permission.h +31 -0
- package/src/headers/22/permission/permission.h +99 -0
- package/src/headers/22/permission/permission_base.h +60 -0
- package/src/headers/22/permission/wasi_permission.h +31 -0
- package/src/headers/22/permission/worker_permission.h +31 -0
- package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
- package/src/headers/{14 → 22}/spawn_sync.h +3 -3
- package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
- package/src/headers/{18 → 22}/stream_base.h +35 -16
- package/src/headers/{18 → 22}/stream_pipe.h +3 -4
- package/src/headers/{16 → 22}/stream_wrap.h +2 -1
- package/src/headers/{18 → 22}/string_bytes.h +5 -14
- package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
- package/src/headers/{16 → 22}/string_decoder.h +0 -1
- package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
- package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
- package/src/headers/22/timers.h +76 -0
- package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
- package/src/headers/{16 → 22}/udp_wrap.h +8 -5
- package/src/headers/22/undici_version.h +6 -0
- package/src/headers/{18 → 22}/util-inl.h +97 -127
- package/src/headers/{18 → 22}/util.h +293 -106
- package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
- package/src/headers/24/acorn_version.h +6 -0
- package/src/headers/24/addon_permission.h +31 -0
- package/src/headers/{16/tracing → 24}/agent.h +1 -1
- package/src/headers/24/aliased_buffer-inl.h +244 -0
- package/src/headers/24/aliased_buffer.h +206 -0
- package/src/headers/24/amaro_version.h +6 -0
- package/src/headers/24/application.h +165 -0
- package/src/headers/24/async_context_frame.h +33 -0
- package/src/headers/{14 → 24}/async_wrap-inl.h +8 -6
- package/src/headers/{16 → 24}/async_wrap.h +86 -88
- package/src/headers/{16 → 24}/base_object-inl.h +75 -119
- package/src/headers/{16 → 24}/base_object.h +84 -40
- package/src/headers/24/base_object_types.h +74 -0
- package/src/headers/24/bindingdata.h +272 -0
- package/src/headers/24/blob_serializer_deserializer-inl.h +385 -0
- package/src/headers/24/blob_serializer_deserializer.h +132 -0
- package/src/headers/{18 → 24}/callback_queue.h +1 -0
- package/src/headers/{18 → 24}/cares_wrap.h +68 -144
- package/src/headers/24/child_process_permission.h +31 -0
- package/src/headers/24/cid.h +127 -0
- package/src/headers/24/cjs_module_lexer_version.h +6 -0
- package/src/headers/24/cleanup_queue-inl.h +36 -0
- package/src/headers/24/cleanup_queue.h +79 -0
- package/src/headers/24/compile_cache.h +113 -0
- package/src/headers/24/cppgc_helpers-inl.h +65 -0
- package/src/headers/24/cppgc_helpers.h +162 -0
- package/src/headers/24/crypto/crypto_aes.h +97 -0
- package/src/headers/24/crypto/crypto_argon2.h +86 -0
- package/src/headers/{16 → 24}/crypto/crypto_bio.h +8 -9
- package/src/headers/24/crypto/crypto_chacha20_poly1305.h +64 -0
- package/src/headers/{18 → 24}/crypto/crypto_cipher.h +48 -58
- package/src/headers/{16 → 24}/crypto/crypto_clienthello-inl.h +2 -2
- package/src/headers/{16 → 24}/crypto/crypto_clienthello.h +1 -1
- package/src/headers/24/crypto/crypto_common.h +48 -0
- package/src/headers/{16 → 24}/crypto/crypto_context.h +46 -22
- package/src/headers/{18 → 24}/crypto/crypto_dh.h +27 -57
- package/src/headers/{18 → 24}/crypto/crypto_dsa.h +7 -34
- package/src/headers/{18 → 24}/crypto/crypto_ec.h +42 -49
- package/src/headers/{18 → 24}/crypto/crypto_hash.h +11 -11
- package/src/headers/{18 → 24}/crypto/crypto_hkdf.h +10 -14
- package/src/headers/{18 → 24}/crypto/crypto_hmac.h +11 -13
- package/src/headers/24/crypto/crypto_kem.h +113 -0
- package/src/headers/{18 → 24}/crypto/crypto_keygen.h +59 -74
- package/src/headers/{16 → 24}/crypto/crypto_keys.h +134 -154
- package/src/headers/24/crypto/crypto_ml_dsa.h +21 -0
- package/src/headers/{18 → 24}/crypto/crypto_pbkdf2.h +9 -11
- package/src/headers/{18 → 24}/crypto/crypto_random.h +28 -34
- package/src/headers/{18 → 24}/crypto/crypto_rsa.h +30 -35
- package/src/headers/{18 → 24}/crypto/crypto_scrypt.h +8 -10
- package/src/headers/{18 → 24}/crypto/crypto_sig.h +36 -48
- package/src/headers/{16 → 24}/crypto/crypto_tls.h +35 -18
- package/src/headers/{16 → 24}/crypto/crypto_util.h +183 -321
- package/src/headers/24/crypto/crypto_x509.h +140 -0
- package/src/headers/24/data.h +148 -0
- package/src/headers/{14 → 24}/debug_utils-inl.h +17 -8
- package/src/headers/{16 → 24}/debug_utils.h +31 -22
- package/src/headers/24/defs.h +254 -0
- package/src/headers/24/embedded_data.h +17 -0
- package/src/headers/24/encoding_binding.h +60 -0
- package/src/headers/24/endpoint.h +421 -0
- package/src/headers/{16 → 24}/env-inl.h +198 -540
- package/src/headers/24/env.h +1257 -0
- package/src/headers/24/env_properties.h +561 -0
- package/src/headers/24/fs_permission.h +167 -0
- package/src/headers/{16 → 24}/handle_wrap.h +4 -2
- package/src/headers/{16 → 24}/histogram-inl.h +34 -15
- package/src/headers/24/histogram.h +279 -0
- package/src/headers/24/http3.h +44 -0
- package/src/headers/{18 → 24}/inspector_agent.h +23 -2
- package/src/headers/24/inspector_permission.h +31 -0
- package/src/headers/{18 → 24}/inspector_profiler.h +15 -15
- package/src/headers/24/io_agent.h +30 -0
- package/src/headers/{18 → 24}/js_native_api.h +74 -30
- package/src/headers/{16 → 24}/js_native_api_types.h +61 -10
- package/src/headers/{18 → 24}/js_native_api_v8.h +205 -160
- package/src/headers/{16 → 24}/js_native_api_v8_internals.h +12 -6
- package/src/headers/24/json_parser.h +40 -0
- package/src/headers/{18 → 24}/json_utils.h +19 -8
- package/src/headers/24/logstream.h +81 -0
- package/src/headers/24/main_thread_interface.h +116 -0
- package/src/headers/{16 → 24}/memory_tracker-inl.h +115 -17
- package/src/headers/{16 → 24}/memory_tracker.h +58 -9
- package/src/headers/24/module_wrap.h +229 -0
- package/src/headers/24/ncrypto.h +1625 -0
- package/src/headers/24/network_agent.h +118 -0
- package/src/headers/24/network_inspector.h +45 -0
- package/src/headers/24/network_resource_manager.h +29 -0
- package/src/headers/{16 → 24}/node.h +560 -72
- package/src/headers/24/node_api.h +269 -0
- package/src/headers/24/node_api_internals.h +46 -0
- package/src/headers/{16 → 24}/node_api_types.h +13 -11
- package/src/headers/24/node_binding.h +163 -0
- package/src/headers/{16 → 24}/node_blob.h +46 -78
- package/src/headers/{16 → 24}/node_bob-inl.h +1 -2
- package/src/headers/{16 → 24}/node_bob.h +2 -6
- package/src/headers/{14 → 24}/node_buffer.h +1 -1
- package/src/headers/24/node_builtins.h +223 -0
- package/src/headers/24/node_config_file.h +65 -0
- package/src/headers/{14 → 24}/node_constants.h +3 -5
- package/src/headers/24/node_context_data.h +168 -0
- package/src/headers/24/node_contextify.h +261 -0
- package/src/headers/{18 → 24}/node_crypto.h +7 -2
- package/src/headers/24/node_debug.h +25 -0
- package/src/headers/24/node_dotenv.h +45 -0
- package/src/headers/{16 → 24}/node_errors.h +146 -32
- package/src/headers/24/node_exit_code.h +54 -0
- package/src/headers/{18 → 24}/node_external_reference.h +44 -22
- package/src/headers/{16 → 24}/node_file-inl.h +156 -50
- package/src/headers/{18 → 24}/node_file.h +129 -15
- package/src/headers/{16 → 24}/node_http2.h +53 -18
- package/src/headers/{14 → 24}/node_http2_state.h +35 -25
- package/src/headers/{16 → 24}/node_http_common-inl.h +8 -10
- package/src/headers/{16 → 24}/node_http_common.h +63 -59
- package/src/headers/{18 → 24}/node_i18n.h +5 -18
- package/src/headers/{16 → 24}/node_internals.h +131 -76
- package/src/headers/24/node_json.h +24 -0
- package/src/headers/24/node_large_page.h +34 -0
- package/src/headers/24/node_locks.h +180 -0
- package/src/headers/{14 → 24}/node_main_instance.h +15 -44
- package/src/headers/{16 → 24}/node_mem-inl.h +7 -7
- package/src/headers/{16 → 24}/node_messaging.h +27 -11
- package/src/headers/{16 → 24}/node_metadata.h +44 -2
- package/src/headers/24/node_modules.h +93 -0
- package/src/headers/{16 → 24}/node_options-inl.h +93 -46
- package/src/headers/{16 → 24}/node_options.h +251 -63
- package/src/headers/{16 → 24}/node_perf.h +6 -25
- package/src/headers/{16 → 24}/node_perf_common.h +23 -10
- package/src/headers/24/node_platform.h +286 -0
- package/src/headers/24/node_process.h +111 -0
- package/src/headers/24/node_realm-inl.h +153 -0
- package/src/headers/24/node_realm.h +236 -0
- package/src/headers/{18 → 24}/node_report.h +13 -17
- package/src/headers/{18 → 24}/node_revert.h +3 -3
- package/src/headers/{18 → 24}/node_root_certs.h +1010 -710
- package/src/headers/24/node_sea.h +74 -0
- package/src/headers/24/node_shadow_realm.h +46 -0
- package/src/headers/24/node_snapshot_builder.h +57 -0
- package/src/headers/24/node_snapshotable.h +174 -0
- package/src/headers/{16 → 24}/node_sockaddr-inl.h +11 -20
- package/src/headers/{16 → 24}/node_sockaddr.h +9 -20
- package/src/headers/24/node_sqlite.h +270 -0
- package/src/headers/{18 → 24}/node_stat_watcher.h +2 -1
- package/src/headers/24/node_string.h +101 -0
- package/src/headers/24/node_task_runner.h +92 -0
- package/src/headers/24/node_threadsafe_cow-inl.h +54 -0
- package/src/headers/24/node_threadsafe_cow.h +105 -0
- package/src/headers/24/node_union_bytes.h +81 -0
- package/src/headers/24/node_url.h +101 -0
- package/src/headers/24/node_url_pattern.h +118 -0
- package/src/headers/24/node_v8.h +77 -0
- package/src/headers/{18 → 24}/node_v8_platform-inl.h +22 -31
- package/src/headers/{18 → 24}/node_version.h +18 -6
- package/src/headers/24/node_wasi.h +185 -0
- package/src/headers/24/node_wasm_web_api.h +55 -0
- package/src/headers/{18 → 24}/node_watchdog.h +2 -0
- package/src/headers/24/node_webstorage.h +60 -0
- package/src/headers/{16 → 24}/node_worker.h +24 -10
- package/src/headers/24/packet.h +155 -0
- package/src/headers/24/path.h +33 -0
- package/src/headers/24/permission/addon_permission.h +31 -0
- package/src/headers/24/permission/child_process_permission.h +31 -0
- package/src/headers/24/permission/fs_permission.h +167 -0
- package/src/headers/24/permission/inspector_permission.h +31 -0
- package/src/headers/24/permission/permission.h +100 -0
- package/src/headers/24/permission/permission_base.h +65 -0
- package/src/headers/24/permission/wasi_permission.h +31 -0
- package/src/headers/24/permission/worker_permission.h +31 -0
- package/src/headers/24/permission.h +100 -0
- package/src/headers/24/permission_base.h +65 -0
- package/src/headers/24/preferredaddress.h +72 -0
- package/src/headers/24/protocol_helper.h +27 -0
- package/src/headers/24/queue.h +306 -0
- package/src/headers/{18 → 24}/req_wrap-inl.h +12 -6
- package/src/headers/{16 → 24}/req_wrap.h +3 -1
- package/src/headers/24/runtime_agent.h +41 -0
- package/src/headers/24/session.h +528 -0
- package/src/headers/24/sessionticket.h +108 -0
- package/src/headers/{18 → 24}/spawn_sync.h +9 -8
- package/src/headers/{16 → 24}/stream_base-inl.h +3 -133
- package/src/headers/{16 → 24}/stream_base.h +43 -19
- package/src/headers/{16 → 24}/stream_pipe.h +7 -4
- package/src/headers/{18 → 24}/stream_wrap.h +2 -3
- package/src/headers/24/streams.h +370 -0
- package/src/headers/{16 → 24}/string_bytes.h +8 -21
- package/src/headers/{18 → 24}/string_decoder-inl.h +0 -6
- package/src/headers/{18 → 24}/string_decoder.h +0 -1
- package/src/headers/24/target_agent.h +75 -0
- package/src/headers/{16 → 24}/tcp_wrap.h +3 -1
- package/src/headers/{14 → 24}/threadpoolwork-inl.h +14 -1
- package/src/headers/24/timer_wrap-inl.h +32 -0
- package/src/headers/{16 → 24}/timer_wrap.h +7 -4
- package/src/headers/24/timers.h +75 -0
- package/src/headers/24/tlscontext.h +228 -0
- package/src/headers/24/tokens.h +256 -0
- package/src/headers/{14/tracing → 24}/trace_event.h +7 -5
- package/src/headers/24/traced_value.h +129 -0
- package/src/headers/24/tracing_agent.h +43 -0
- package/src/headers/24/transportparams.h +166 -0
- package/src/headers/{16 → 24}/tty_wrap.h +0 -1
- package/src/headers/{18 → 24}/udp_wrap.h +8 -5
- package/src/headers/24/undici_version.h +6 -0
- package/src/headers/{16 → 24}/util-inl.h +267 -131
- package/src/headers/{16 → 24}/util.h +338 -146
- package/src/headers/24/v8-external-memory-accounter.h +60 -0
- package/src/headers/24/v8-fast-api-calls.h +819 -0
- package/src/headers/24/v8-inspector.h +426 -0
- package/src/headers/24/wasi_permission.h +31 -0
- package/src/headers/24/worker_agent.h +40 -0
- package/src/headers/24/worker_inspector.h +124 -0
- package/src/headers/24/worker_permission.h +31 -0
- package/src/headers/24/zlib_version.h +6 -0
- package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
- package/dist/bindings/cws_darwin_x64_node83.node +0 -0
- package/dist/bindings/cws_darwin_x64_node93.node +0 -0
- package/dist/bindings/cws_linux_arm64_node83.node +0 -0
- package/dist/bindings/cws_linux_arm64_node93.node +0 -0
- package/dist/bindings/cws_linux_x64_node83.node +0 -0
- package/dist/bindings/cws_linux_x64_node93.node +0 -0
- package/src/headers/14/aliased_buffer.h +0 -263
- package/src/headers/14/allocated_buffer-inl.h +0 -110
- package/src/headers/14/allocated_buffer.h +0 -73
- package/src/headers/14/async_wrap.h +0 -230
- package/src/headers/14/base64.h +0 -183
- package/src/headers/14/base_object-inl.h +0 -371
- package/src/headers/14/base_object.h +0 -281
- package/src/headers/14/callback_queue-inl.h +0 -97
- package/src/headers/14/callback_queue.h +0 -78
- package/src/headers/14/debug_utils.h +0 -181
- package/src/headers/14/env.h +0 -1388
- package/src/headers/14/handle_wrap.h +0 -117
- package/src/headers/14/histogram-inl.h +0 -83
- package/src/headers/14/histogram.h +0 -98
- package/src/headers/14/inspector_agent.h +0 -149
- package/src/headers/14/inspector_profiler.h +0 -137
- package/src/headers/14/js_native_api.h +0 -544
- package/src/headers/14/js_native_api_types.h +0 -143
- package/src/headers/14/js_native_api_v8.h +0 -301
- package/src/headers/14/js_native_api_v8_internals.h +0 -38
- package/src/headers/14/json_utils.h +0 -161
- package/src/headers/14/memory_tracker-inl.h +0 -355
- package/src/headers/14/module_wrap.h +0 -99
- package/src/headers/14/node.h +0 -1032
- package/src/headers/14/node_api.h +0 -255
- package/src/headers/14/node_api_types.h +0 -44
- package/src/headers/14/node_binding.h +0 -99
- package/src/headers/14/node_context_data.h +0 -44
- package/src/headers/14/node_contextify.h +0 -161
- package/src/headers/14/node_crypto.h +0 -865
- package/src/headers/14/node_crypto_bio.h +0 -195
- package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
- package/src/headers/14/node_crypto_clienthello.h +0 -132
- package/src/headers/14/node_crypto_common.h +0 -138
- package/src/headers/14/node_crypto_groups.h +0 -415
- package/src/headers/14/node_dtrace.h +0 -86
- package/src/headers/14/node_errors.h +0 -214
- package/src/headers/14/node_file-inl.h +0 -306
- package/src/headers/14/node_file.h +0 -417
- package/src/headers/14/node_http2.h +0 -1191
- package/src/headers/14/node_http_common-inl.h +0 -194
- package/src/headers/14/node_http_common.h +0 -529
- package/src/headers/14/node_i18n.h +0 -144
- package/src/headers/14/node_internals.h +0 -405
- package/src/headers/14/node_mem.h +0 -45
- package/src/headers/14/node_messaging.h +0 -303
- package/src/headers/14/node_metadata.h +0 -109
- package/src/headers/14/node_mutex.h +0 -247
- package/src/headers/14/node_native_module.h +0 -101
- package/src/headers/14/node_native_module_env.h +0 -66
- package/src/headers/14/node_options-inl.h +0 -451
- package/src/headers/14/node_options.h +0 -481
- package/src/headers/14/node_perf.h +0 -181
- package/src/headers/14/node_perf_common.h +0 -97
- package/src/headers/14/node_platform.h +0 -189
- package/src/headers/14/node_process.h +0 -40
- package/src/headers/14/node_report.h +0 -47
- package/src/headers/14/node_revert.h +0 -72
- package/src/headers/14/node_root_certs.h +0 -3458
- package/src/headers/14/node_sockaddr-inl.h +0 -170
- package/src/headers/14/node_sockaddr.h +0 -123
- package/src/headers/14/node_stat_watcher.h +0 -70
- package/src/headers/14/node_union_bytes.h +0 -103
- package/src/headers/14/node_url.h +0 -188
- package/src/headers/14/node_version.h +0 -98
- package/src/headers/14/node_wasi.h +0 -108
- package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/14/node_win32_etw_provider.h +0 -99
- package/src/headers/14/node_worker.h +0 -141
- package/src/headers/14/pipe_wrap.h +0 -78
- package/src/headers/14/req_wrap-inl.h +0 -170
- package/src/headers/14/req_wrap.h +0 -77
- package/src/headers/14/stream_base-inl.h +0 -275
- package/src/headers/14/stream_base.h +0 -434
- package/src/headers/14/stream_pipe.h +0 -73
- package/src/headers/14/stream_wrap.h +0 -130
- package/src/headers/14/string_bytes.h +0 -129
- package/src/headers/14/string_decoder.h +0 -50
- package/src/headers/14/string_search.h +0 -638
- package/src/headers/14/tcp_wrap.h +0 -101
- package/src/headers/14/tls_wrap.h +0 -222
- package/src/headers/14/tracing/agent.h +0 -195
- package/src/headers/14/tracing/traced_value.h +0 -70
- package/src/headers/14/tty_wrap.h +0 -64
- package/src/headers/14/udp_wrap.h +0 -227
- package/src/headers/14/util-inl.h +0 -566
- package/src/headers/14/util.h +0 -804
- package/src/headers/14/v8abbr.h +0 -124
- package/src/headers/16/aliased_buffer.h +0 -315
- package/src/headers/16/allocated_buffer-inl.h +0 -110
- package/src/headers/16/allocated_buffer.h +0 -73
- package/src/headers/16/async_wrap-inl.h +0 -94
- package/src/headers/16/base64-inl.h +0 -189
- package/src/headers/16/base64.h +0 -69
- package/src/headers/16/crypto/crypto_aes.h +0 -89
- package/src/headers/16/crypto/crypto_cipher.h +0 -286
- package/src/headers/16/crypto/crypto_common.h +0 -187
- package/src/headers/16/crypto/crypto_dh.h +0 -157
- package/src/headers/16/crypto/crypto_dsa.h +0 -76
- package/src/headers/16/crypto/crypto_ec.h +0 -169
- package/src/headers/16/crypto/crypto_groups.h +0 -415
- package/src/headers/16/crypto/crypto_hash.h +0 -89
- package/src/headers/16/crypto/crypto_hkdf.h +0 -66
- package/src/headers/16/crypto/crypto_hmac.h +0 -94
- package/src/headers/16/crypto/crypto_keygen.h +0 -301
- package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
- package/src/headers/16/crypto/crypto_random.h +0 -130
- package/src/headers/16/crypto/crypto_rsa.h +0 -141
- package/src/headers/16/crypto/crypto_scrypt.h +0 -87
- package/src/headers/16/crypto/crypto_sig.h +0 -167
- package/src/headers/16/crypto/crypto_spkac.h +0 -20
- package/src/headers/16/crypto/crypto_timing.h +0 -20
- package/src/headers/16/crypto/crypto_x509.h +0 -141
- package/src/headers/16/env.h +0 -1629
- package/src/headers/16/histogram.h +0 -216
- package/src/headers/16/js_native_api.h +0 -561
- package/src/headers/16/js_native_api_v8.h +0 -451
- package/src/headers/16/node.d +0 -315
- package/src/headers/16/node.stp +0 -146
- package/src/headers/16/node_api.h +0 -275
- package/src/headers/16/node_api_internals.h +0 -30
- package/src/headers/16/node_binding.h +0 -99
- package/src/headers/16/node_buffer.h +0 -92
- package/src/headers/16/node_constants.h +0 -84
- package/src/headers/16/node_context_data.h +0 -44
- package/src/headers/16/node_contextify.h +0 -196
- package/src/headers/16/node_dtrace.h +0 -86
- package/src/headers/16/node_external_reference.h +0 -129
- package/src/headers/16/node_main_instance.h +0 -103
- package/src/headers/16/node_native_module.h +0 -101
- package/src/headers/16/node_native_module_env.h +0 -68
- package/src/headers/16/node_platform.h +0 -192
- package/src/headers/16/node_process.h +0 -43
- package/src/headers/16/node_provider.d +0 -80
- package/src/headers/16/node_snapshotable.h +0 -137
- package/src/headers/16/node_union_bytes.h +0 -103
- package/src/headers/16/node_url.h +0 -205
- package/src/headers/16/node_v8.h +0 -41
- package/src/headers/16/node_v8_platform-inl.h +0 -194
- package/src/headers/16/node_wasi.h +0 -108
- package/src/headers/16/node_watchdog.h +0 -152
- package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
- package/src/headers/16/node_win32_etw_provider.h +0 -99
- package/src/headers/16/spawn_sync.h +0 -242
- package/src/headers/16/string_decoder-inl.h +0 -37
- package/src/headers/16/string_search.h +0 -638
- package/src/headers/16/threadpoolwork-inl.h +0 -57
- package/src/headers/16/tracing/node_trace_buffer.h +0 -83
- package/src/headers/16/tracing/node_trace_writer.h +0 -75
- package/src/headers/16/tracing/trace_event.h +0 -720
- package/src/headers/16/tracing/traced_value.h +0 -70
- package/src/headers/16/v8abbr.h +0 -123
- package/src/headers/16/v8ustack.d +0 -695
- package/src/headers/18/aliased_buffer.h +0 -315
- package/src/headers/18/aliased_struct-inl.h +0 -54
- package/src/headers/18/aliased_struct.h +0 -63
- package/src/headers/18/base64-inl.h +0 -189
- package/src/headers/18/base64.h +0 -69
- package/src/headers/18/connect_wrap.h +0 -26
- package/src/headers/18/connection_wrap.h +0 -30
- package/src/headers/18/crypto/crypto_aes.h +0 -89
- package/src/headers/18/crypto/crypto_bio.h +0 -194
- package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
- package/src/headers/18/crypto/crypto_common.h +0 -151
- package/src/headers/18/crypto/crypto_groups.h +0 -415
- package/src/headers/18/crypto/crypto_x509.h +0 -143
- package/src/headers/18/debug_utils-inl.h +0 -223
- package/src/headers/18/diagnosticfilename-inl.h +0 -33
- package/src/headers/18/env-inl.h +0 -1308
- package/src/headers/18/env.h +0 -1667
- package/src/headers/18/inspector_io.h +0 -78
- package/src/headers/18/inspector_socket.h +0 -60
- package/src/headers/18/inspector_socket_server.h +0 -110
- package/src/headers/18/js_stream.h +0 -52
- package/src/headers/18/memory_tracker.h +0 -284
- package/src/headers/18/module_wrap.h +0 -116
- package/src/headers/18/node_binding.h +0 -99
- package/src/headers/18/node_context_data.h +0 -44
- package/src/headers/18/node_contextify.h +0 -196
- package/src/headers/18/node_dir.h +0 -52
- package/src/headers/18/node_dtrace.h +0 -86
- package/src/headers/18/node_http2_state.h +0 -149
- package/src/headers/18/node_mem-inl.h +0 -112
- package/src/headers/18/node_native_module.h +0 -109
- package/src/headers/18/node_native_module_env.h +0 -71
- package/src/headers/18/node_object_wrap.h +0 -132
- package/src/headers/18/node_snapshot_builder.h +0 -43
- package/src/headers/18/node_snapshotable.h +0 -130
- package/src/headers/18/node_union_bytes.h +0 -103
- package/src/headers/18/node_url.h +0 -205
- package/src/headers/18/node_v8.h +0 -41
- package/src/headers/18/node_wasi.h +0 -108
- package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
- package/src/headers/18/node_win32_etw_provider.h +0 -99
- package/src/headers/18/string_search.h +0 -638
- package/src/headers/18/tracing/node_trace_buffer.h +0 -83
- package/src/headers/18/tracing/node_trace_writer.h +0 -75
- package/src/headers/18/tracing/trace_event_common.h +0 -1109
- package/src/headers/18/tracing/traced_value.h +0 -70
- package/src/headers/18/v8abbr.h +0 -123
- /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
- /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
- /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
- /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
- /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
- /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
- /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
- /package/src/headers/{14 → 22}/inspector_io.h +0 -0
- /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
- /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
- /package/src/headers/{14 → 22}/js_stream.h +0 -0
- /package/src/headers/{14 → 22}/node_dir.h +0 -0
- /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
- /package/src/headers/{16 → 22}/node_mem.h +0 -0
- /package/src/headers/{16 → 22}/node_mutex.h +0 -0
- /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
- /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
- /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
- /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
- /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
- /package/src/headers/{18 → 22}/req_wrap.h +0 -0
- /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
- /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
- /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
- /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
- /package/src/headers/{18 → 22}/tty_wrap.h +0 -0
- /package/src/headers/{16 → 24}/aliased_struct-inl.h +0 -0
- /package/src/headers/{16 → 24}/aliased_struct.h +0 -0
- /package/src/headers/{18 → 24}/callback_queue-inl.h +0 -0
- /package/src/headers/{16 → 24}/connect_wrap.h +0 -0
- /package/src/headers/{16 → 24}/connection_wrap.h +0 -0
- /package/src/headers/{18 → 24}/crypto/crypto_spkac.h +0 -0
- /package/src/headers/{18 → 24}/crypto/crypto_timing.h +0 -0
- /package/src/headers/{16 → 24}/diagnosticfilename-inl.h +0 -0
- /package/src/headers/{16 → 24}/inspector_io.h +0 -0
- /package/src/headers/{16 → 24}/inspector_socket.h +0 -0
- /package/src/headers/{16 → 24}/inspector_socket_server.h +0 -0
- /package/src/headers/{16 → 24}/js_stream.h +0 -0
- /package/src/headers/{16 → 24}/node_dir.h +0 -0
- /package/src/headers/{18 → 24}/node_mem.h +0 -0
- /package/src/headers/{18 → 24}/node_mutex.h +0 -0
- /package/src/headers/{16 → 24}/node_object_wrap.h +0 -0
- /package/src/headers/{18 → 24}/node_process-inl.h +0 -0
- /package/src/headers/{14/tracing → 24}/node_trace_buffer.h +0 -0
- /package/src/headers/{14/tracing → 24}/node_trace_writer.h +0 -0
- /package/src/headers/{18 → 24}/pipe_wrap.h +0 -0
- /package/src/headers/{16/tracing → 24}/trace_event_common.h +0 -0
|
@@ -0,0 +1,752 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <openssl/bio.h>
|
|
4
|
+
#include <openssl/bn.h>
|
|
5
|
+
#include <openssl/dh.h>
|
|
6
|
+
#include <openssl/dsa.h>
|
|
7
|
+
#include <openssl/ec.h>
|
|
8
|
+
#include <openssl/err.h>
|
|
9
|
+
#include <openssl/evp.h>
|
|
10
|
+
#include <openssl/hmac.h>
|
|
11
|
+
#include <openssl/kdf.h>
|
|
12
|
+
#include <openssl/rsa.h>
|
|
13
|
+
#include <openssl/ssl.h>
|
|
14
|
+
#include <openssl/x509.h>
|
|
15
|
+
#include <cstddef>
|
|
16
|
+
#include <list>
|
|
17
|
+
#include <memory>
|
|
18
|
+
#include <optional>
|
|
19
|
+
#include <string>
|
|
20
|
+
#include <string_view>
|
|
21
|
+
#ifndef OPENSSL_NO_ENGINE
|
|
22
|
+
#include <openssl/engine.h>
|
|
23
|
+
#endif // !OPENSSL_NO_ENGINE
|
|
24
|
+
// The FIPS-related functions are only available
|
|
25
|
+
// when the OpenSSL itself was compiled with FIPS support.
|
|
26
|
+
#if defined(OPENSSL_FIPS) && OPENSSL_VERSION_MAJOR < 3
|
|
27
|
+
#include <openssl/fips.h>
|
|
28
|
+
#endif // OPENSSL_FIPS
|
|
29
|
+
|
|
30
|
+
#ifdef __GNUC__
|
|
31
|
+
#define NCRYPTO_MUST_USE_RESULT __attribute__((warn_unused_result))
|
|
32
|
+
#else
|
|
33
|
+
#define NCRYPTO_MUST_USE_RESULT
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
namespace ncrypto {
|
|
37
|
+
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Utility macros
|
|
40
|
+
|
|
41
|
+
#if NCRYPTO_DEVELOPMENT_CHECKS
|
|
42
|
+
#define NCRYPTO_STR(x) #x
|
|
43
|
+
#define NCRYPTO_REQUIRE(EXPR) \
|
|
44
|
+
{ \
|
|
45
|
+
if (!(EXPR) { abort(); }) }
|
|
46
|
+
|
|
47
|
+
#define NCRYPTO_FAIL(MESSAGE) \
|
|
48
|
+
do { \
|
|
49
|
+
std::cerr << "FAIL: " << (MESSAGE) << std::endl; \
|
|
50
|
+
abort(); \
|
|
51
|
+
} while (0);
|
|
52
|
+
#define NCRYPTO_ASSERT_EQUAL(LHS, RHS, MESSAGE) \
|
|
53
|
+
do { \
|
|
54
|
+
if (LHS != RHS) { \
|
|
55
|
+
std::cerr << "Mismatch: '" << LHS << "' - '" << RHS << "'" << std::endl; \
|
|
56
|
+
NCRYPTO_FAIL(MESSAGE); \
|
|
57
|
+
} \
|
|
58
|
+
} while (0);
|
|
59
|
+
#define NCRYPTO_ASSERT_TRUE(COND) \
|
|
60
|
+
do { \
|
|
61
|
+
if (!(COND)) { \
|
|
62
|
+
std::cerr << "Assert at line " << __LINE__ << " of file " << __FILE__ \
|
|
63
|
+
<< std::endl; \
|
|
64
|
+
NCRYPTO_FAIL(NCRYPTO_STR(COND)); \
|
|
65
|
+
} \
|
|
66
|
+
} while (0);
|
|
67
|
+
#else
|
|
68
|
+
#define NCRYPTO_FAIL(MESSAGE)
|
|
69
|
+
#define NCRYPTO_ASSERT_EQUAL(LHS, RHS, MESSAGE)
|
|
70
|
+
#define NCRYPTO_ASSERT_TRUE(COND)
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
#define NCRYPTO_DISALLOW_COPY(Name) \
|
|
74
|
+
Name(const Name&) = delete; \
|
|
75
|
+
Name& operator=(const Name&) = delete;
|
|
76
|
+
#define NCRYPTO_DISALLOW_MOVE(Name) \
|
|
77
|
+
Name(Name&&) = delete; \
|
|
78
|
+
Name& operator=(Name&&) = delete;
|
|
79
|
+
#define NCRYPTO_DISALLOW_COPY_AND_MOVE(Name) \
|
|
80
|
+
NCRYPTO_DISALLOW_COPY(Name) \
|
|
81
|
+
NCRYPTO_DISALLOW_MOVE(Name)
|
|
82
|
+
#define NCRYPTO_DISALLOW_NEW_DELETE() \
|
|
83
|
+
void* operator new(size_t) = delete; \
|
|
84
|
+
void operator delete(void*) = delete;
|
|
85
|
+
|
|
86
|
+
[[noreturn]] inline void unreachable() {
|
|
87
|
+
#ifdef __GNUC__
|
|
88
|
+
__builtin_unreachable();
|
|
89
|
+
#elif defined(_MSC_VER)
|
|
90
|
+
__assume(false);
|
|
91
|
+
#else
|
|
92
|
+
#endif
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
static constexpr int kX509NameFlagsMultiline =
|
|
96
|
+
ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_UTF8_CONVERT |
|
|
97
|
+
XN_FLAG_SEP_MULTILINE | XN_FLAG_FN_SN;
|
|
98
|
+
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// Error handling utilities
|
|
101
|
+
|
|
102
|
+
// Capture the current OpenSSL Error Stack. The stack will be ordered such
|
|
103
|
+
// that the error currently at the top of the stack is at the end of the
|
|
104
|
+
// list and the error at the bottom of the stack is at the beginning.
|
|
105
|
+
class CryptoErrorList final {
|
|
106
|
+
public:
|
|
107
|
+
enum class Option { NONE, CAPTURE_ON_CONSTRUCT };
|
|
108
|
+
CryptoErrorList(Option option = Option::CAPTURE_ON_CONSTRUCT);
|
|
109
|
+
|
|
110
|
+
void capture();
|
|
111
|
+
|
|
112
|
+
// Add an error message to the end of the stack.
|
|
113
|
+
void add(std::string message);
|
|
114
|
+
|
|
115
|
+
inline const std::string& peek_back() const { return errors_.back(); }
|
|
116
|
+
inline size_t size() const { return errors_.size(); }
|
|
117
|
+
inline bool empty() const { return errors_.empty(); }
|
|
118
|
+
|
|
119
|
+
inline auto begin() const noexcept { return errors_.begin(); }
|
|
120
|
+
inline auto end() const noexcept { return errors_.end(); }
|
|
121
|
+
inline auto rbegin() const noexcept { return errors_.rbegin(); }
|
|
122
|
+
inline auto rend() const noexcept { return errors_.rend(); }
|
|
123
|
+
|
|
124
|
+
std::optional<std::string> pop_back();
|
|
125
|
+
std::optional<std::string> pop_front();
|
|
126
|
+
|
|
127
|
+
private:
|
|
128
|
+
std::list<std::string> errors_;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// Forcibly clears the error stack on destruction. This stops stale errors
|
|
132
|
+
// from popping up later in the lifecycle of crypto operations where they
|
|
133
|
+
// would cause spurious failures. It is a rather blunt method, though, and
|
|
134
|
+
// ERR_clear_error() isn't necessarily cheap.
|
|
135
|
+
//
|
|
136
|
+
// If created with a pointer to a CryptoErrorList, the current OpenSSL error
|
|
137
|
+
// stack will be captured before clearing the error.
|
|
138
|
+
class ClearErrorOnReturn final {
|
|
139
|
+
public:
|
|
140
|
+
ClearErrorOnReturn(CryptoErrorList* errors = nullptr);
|
|
141
|
+
~ClearErrorOnReturn();
|
|
142
|
+
NCRYPTO_DISALLOW_COPY_AND_MOVE(ClearErrorOnReturn)
|
|
143
|
+
NCRYPTO_DISALLOW_NEW_DELETE()
|
|
144
|
+
|
|
145
|
+
int peekError();
|
|
146
|
+
|
|
147
|
+
private:
|
|
148
|
+
CryptoErrorList* errors_;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
// Pop errors from OpenSSL's error stack that were added between when this
|
|
152
|
+
// was constructed and destructed.
|
|
153
|
+
//
|
|
154
|
+
// If created with a pointer to a CryptoErrorList, the current OpenSSL error
|
|
155
|
+
// stack will be captured before resetting the error to the mark.
|
|
156
|
+
class MarkPopErrorOnReturn final {
|
|
157
|
+
public:
|
|
158
|
+
MarkPopErrorOnReturn(CryptoErrorList* errors = nullptr);
|
|
159
|
+
~MarkPopErrorOnReturn();
|
|
160
|
+
NCRYPTO_DISALLOW_COPY_AND_MOVE(MarkPopErrorOnReturn)
|
|
161
|
+
NCRYPTO_DISALLOW_NEW_DELETE()
|
|
162
|
+
|
|
163
|
+
int peekError();
|
|
164
|
+
|
|
165
|
+
private:
|
|
166
|
+
CryptoErrorList* errors_;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// TODO(@jasnell): Eventually replace with std::expected when we are able to
|
|
170
|
+
// bump up to c++23.
|
|
171
|
+
template <typename T, typename E>
|
|
172
|
+
struct Result final {
|
|
173
|
+
const bool has_value;
|
|
174
|
+
T value;
|
|
175
|
+
std::optional<E> error = std::nullopt;
|
|
176
|
+
std::optional<int> openssl_error = std::nullopt;
|
|
177
|
+
Result(T&& value) : has_value(true), value(std::move(value)) {}
|
|
178
|
+
Result(E&& error, std::optional<int> openssl_error = std::nullopt)
|
|
179
|
+
: has_value(false),
|
|
180
|
+
error(std::move(error)),
|
|
181
|
+
openssl_error(std::move(openssl_error)) {}
|
|
182
|
+
inline operator bool() const { return has_value; }
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
// ============================================================================
|
|
186
|
+
// Various smart pointer aliases for OpenSSL types.
|
|
187
|
+
|
|
188
|
+
template <typename T, void (*function)(T*)>
|
|
189
|
+
struct FunctionDeleter {
|
|
190
|
+
void operator()(T* pointer) const { function(pointer); }
|
|
191
|
+
typedef std::unique_ptr<T, FunctionDeleter> Pointer;
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
template <typename T, void (*function)(T*)>
|
|
195
|
+
using DeleteFnPtr = typename FunctionDeleter<T, function>::Pointer;
|
|
196
|
+
|
|
197
|
+
using BignumCtxPointer = DeleteFnPtr<BN_CTX, BN_CTX_free>;
|
|
198
|
+
using CipherCtxPointer = DeleteFnPtr<EVP_CIPHER_CTX, EVP_CIPHER_CTX_free>;
|
|
199
|
+
using DSAPointer = DeleteFnPtr<DSA, DSA_free>;
|
|
200
|
+
using DSASigPointer = DeleteFnPtr<DSA_SIG, DSA_SIG_free>;
|
|
201
|
+
using ECDSASigPointer = DeleteFnPtr<ECDSA_SIG, ECDSA_SIG_free>;
|
|
202
|
+
using ECPointer = DeleteFnPtr<EC_KEY, EC_KEY_free>;
|
|
203
|
+
using ECGroupPointer = DeleteFnPtr<EC_GROUP, EC_GROUP_free>;
|
|
204
|
+
using ECKeyPointer = DeleteFnPtr<EC_KEY, EC_KEY_free>;
|
|
205
|
+
using ECPointPointer = DeleteFnPtr<EC_POINT, EC_POINT_free>;
|
|
206
|
+
using EVPKeyCtxPointer = DeleteFnPtr<EVP_PKEY_CTX, EVP_PKEY_CTX_free>;
|
|
207
|
+
using EVPMDCtxPointer = DeleteFnPtr<EVP_MD_CTX, EVP_MD_CTX_free>;
|
|
208
|
+
using HMACCtxPointer = DeleteFnPtr<HMAC_CTX, HMAC_CTX_free>;
|
|
209
|
+
using NetscapeSPKIPointer = DeleteFnPtr<NETSCAPE_SPKI, NETSCAPE_SPKI_free>;
|
|
210
|
+
using PKCS8Pointer = DeleteFnPtr<PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free>;
|
|
211
|
+
using RSAPointer = DeleteFnPtr<RSA, RSA_free>;
|
|
212
|
+
using SSLCtxPointer = DeleteFnPtr<SSL_CTX, SSL_CTX_free>;
|
|
213
|
+
using SSLPointer = DeleteFnPtr<SSL, SSL_free>;
|
|
214
|
+
using SSLSessionPointer = DeleteFnPtr<SSL_SESSION, SSL_SESSION_free>;
|
|
215
|
+
|
|
216
|
+
struct StackOfXASN1Deleter {
|
|
217
|
+
void operator()(STACK_OF(ASN1_OBJECT) * p) const {
|
|
218
|
+
sk_ASN1_OBJECT_pop_free(p, ASN1_OBJECT_free);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
using StackOfASN1 = std::unique_ptr<STACK_OF(ASN1_OBJECT), StackOfXASN1Deleter>;
|
|
222
|
+
|
|
223
|
+
// An unowned, unmanaged pointer to a buffer of data.
|
|
224
|
+
template <typename T>
|
|
225
|
+
struct Buffer {
|
|
226
|
+
T* data = nullptr;
|
|
227
|
+
size_t len = 0;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
// A managed pointer to a buffer of data. When destroyed the underlying
|
|
231
|
+
// buffer will be freed.
|
|
232
|
+
class DataPointer final {
|
|
233
|
+
public:
|
|
234
|
+
static DataPointer Alloc(size_t len);
|
|
235
|
+
|
|
236
|
+
DataPointer() = default;
|
|
237
|
+
explicit DataPointer(void* data, size_t len);
|
|
238
|
+
explicit DataPointer(const Buffer<void>& buffer);
|
|
239
|
+
DataPointer(DataPointer&& other) noexcept;
|
|
240
|
+
DataPointer& operator=(DataPointer&& other) noexcept;
|
|
241
|
+
NCRYPTO_DISALLOW_COPY(DataPointer)
|
|
242
|
+
~DataPointer();
|
|
243
|
+
|
|
244
|
+
inline bool operator==(std::nullptr_t) noexcept { return data_ == nullptr; }
|
|
245
|
+
inline operator bool() const { return data_ != nullptr; }
|
|
246
|
+
inline void* get() const noexcept { return data_; }
|
|
247
|
+
inline size_t size() const noexcept { return len_; }
|
|
248
|
+
void reset(void* data = nullptr, size_t len = 0);
|
|
249
|
+
void reset(const Buffer<void>& buffer);
|
|
250
|
+
|
|
251
|
+
// Releases ownership of the underlying data buffer. It is the caller's
|
|
252
|
+
// responsibility to ensure the buffer is appropriately freed.
|
|
253
|
+
Buffer<void> release();
|
|
254
|
+
|
|
255
|
+
// Returns a Buffer struct that is a view of the underlying data.
|
|
256
|
+
template <typename T = void>
|
|
257
|
+
inline operator const Buffer<T>() const {
|
|
258
|
+
return {
|
|
259
|
+
.data = static_cast<T*>(data_),
|
|
260
|
+
.len = len_,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
private:
|
|
265
|
+
void* data_ = nullptr;
|
|
266
|
+
size_t len_ = 0;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
class BIOPointer final {
|
|
270
|
+
public:
|
|
271
|
+
static BIOPointer NewMem();
|
|
272
|
+
static BIOPointer NewSecMem();
|
|
273
|
+
static BIOPointer New(const BIO_METHOD* method);
|
|
274
|
+
static BIOPointer New(const void* data, size_t len);
|
|
275
|
+
static BIOPointer NewFile(std::string_view filename, std::string_view mode);
|
|
276
|
+
static BIOPointer NewFp(FILE* fd, int flags);
|
|
277
|
+
|
|
278
|
+
template <typename T>
|
|
279
|
+
static BIOPointer New(const Buffer<T>& buf) {
|
|
280
|
+
return New(buf.data, buf.len);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
BIOPointer() = default;
|
|
284
|
+
BIOPointer(std::nullptr_t) : bio_(nullptr) {}
|
|
285
|
+
explicit BIOPointer(BIO* bio);
|
|
286
|
+
BIOPointer(BIOPointer&& other) noexcept;
|
|
287
|
+
BIOPointer& operator=(BIOPointer&& other) noexcept;
|
|
288
|
+
NCRYPTO_DISALLOW_COPY(BIOPointer)
|
|
289
|
+
~BIOPointer();
|
|
290
|
+
|
|
291
|
+
inline bool operator==(std::nullptr_t) noexcept { return bio_ == nullptr; }
|
|
292
|
+
inline operator bool() const { return bio_ != nullptr; }
|
|
293
|
+
inline BIO* get() const noexcept { return bio_.get(); }
|
|
294
|
+
|
|
295
|
+
inline operator BUF_MEM*() const {
|
|
296
|
+
BUF_MEM* mem = nullptr;
|
|
297
|
+
if (!bio_) return mem;
|
|
298
|
+
BIO_get_mem_ptr(bio_.get(), &mem);
|
|
299
|
+
return mem;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
inline operator BIO*() const { return bio_.get(); }
|
|
303
|
+
|
|
304
|
+
void reset(BIO* bio = nullptr);
|
|
305
|
+
BIO* release();
|
|
306
|
+
|
|
307
|
+
bool resetBio() const;
|
|
308
|
+
|
|
309
|
+
static int Write(BIOPointer* bio, std::string_view message);
|
|
310
|
+
|
|
311
|
+
template <typename... Args>
|
|
312
|
+
static void Printf(BIOPointer* bio, const char* format, Args... args) {
|
|
313
|
+
if (bio == nullptr || !*bio) return;
|
|
314
|
+
BIO_printf(bio->get(), format, std::forward<Args...>(args...));
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
private:
|
|
318
|
+
mutable DeleteFnPtr<BIO, BIO_free_all> bio_;
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
class BignumPointer final {
|
|
322
|
+
public:
|
|
323
|
+
BignumPointer() = default;
|
|
324
|
+
explicit BignumPointer(BIGNUM* bignum);
|
|
325
|
+
explicit BignumPointer(const unsigned char* data, size_t len);
|
|
326
|
+
BignumPointer(BignumPointer&& other) noexcept;
|
|
327
|
+
BignumPointer& operator=(BignumPointer&& other) noexcept;
|
|
328
|
+
NCRYPTO_DISALLOW_COPY(BignumPointer)
|
|
329
|
+
~BignumPointer();
|
|
330
|
+
|
|
331
|
+
int operator<=>(const BignumPointer& other) const noexcept;
|
|
332
|
+
int operator<=>(const BIGNUM* other) const noexcept;
|
|
333
|
+
inline operator bool() const { return bn_ != nullptr; }
|
|
334
|
+
inline BIGNUM* get() const noexcept { return bn_.get(); }
|
|
335
|
+
void reset(BIGNUM* bn = nullptr);
|
|
336
|
+
void reset(const unsigned char* data, size_t len);
|
|
337
|
+
BIGNUM* release();
|
|
338
|
+
|
|
339
|
+
bool isZero() const;
|
|
340
|
+
bool isOne() const;
|
|
341
|
+
|
|
342
|
+
bool setWord(unsigned long w); // NOLINT(runtime/int)
|
|
343
|
+
unsigned long getWord() const; // NOLINT(runtime/int)
|
|
344
|
+
|
|
345
|
+
size_t byteLength() const;
|
|
346
|
+
|
|
347
|
+
DataPointer toHex() const;
|
|
348
|
+
DataPointer encode() const;
|
|
349
|
+
DataPointer encodePadded(size_t size) const;
|
|
350
|
+
size_t encodeInto(unsigned char* out) const;
|
|
351
|
+
size_t encodePaddedInto(unsigned char* out, size_t size) const;
|
|
352
|
+
|
|
353
|
+
static BignumPointer New();
|
|
354
|
+
static BignumPointer NewSecure();
|
|
355
|
+
static DataPointer Encode(const BIGNUM* bn);
|
|
356
|
+
static DataPointer EncodePadded(const BIGNUM* bn, size_t size);
|
|
357
|
+
static size_t EncodePaddedInto(const BIGNUM* bn,
|
|
358
|
+
unsigned char* out,
|
|
359
|
+
size_t size);
|
|
360
|
+
static int GetBitCount(const BIGNUM* bn);
|
|
361
|
+
static int GetByteCount(const BIGNUM* bn);
|
|
362
|
+
static unsigned long GetWord(const BIGNUM* bn); // NOLINT(runtime/int)
|
|
363
|
+
static const BIGNUM* One();
|
|
364
|
+
|
|
365
|
+
BignumPointer clone();
|
|
366
|
+
|
|
367
|
+
private:
|
|
368
|
+
DeleteFnPtr<BIGNUM, BN_clear_free> bn_;
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
class EVPKeyPointer final {
|
|
372
|
+
public:
|
|
373
|
+
static EVPKeyPointer New();
|
|
374
|
+
static EVPKeyPointer NewRawPublic(int id,
|
|
375
|
+
const Buffer<const unsigned char>& data);
|
|
376
|
+
static EVPKeyPointer NewRawPrivate(int id,
|
|
377
|
+
const Buffer<const unsigned char>& data);
|
|
378
|
+
|
|
379
|
+
enum class PKEncodingType {
|
|
380
|
+
// RSAPublicKey / RSAPrivateKey according to PKCS#1.
|
|
381
|
+
PKCS1,
|
|
382
|
+
// PrivateKeyInfo or EncryptedPrivateKeyInfo according to PKCS#8.
|
|
383
|
+
PKCS8,
|
|
384
|
+
// SubjectPublicKeyInfo according to X.509.
|
|
385
|
+
SPKI,
|
|
386
|
+
// ECPrivateKey according to SEC1.
|
|
387
|
+
SEC1,
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
enum class PKFormatType {
|
|
391
|
+
DER,
|
|
392
|
+
PEM,
|
|
393
|
+
JWK,
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
enum class PKParseError { NOT_RECOGNIZED, NEED_PASSPHRASE, FAILED };
|
|
397
|
+
using ParseKeyResult = Result<EVPKeyPointer, PKParseError>;
|
|
398
|
+
|
|
399
|
+
struct AsymmetricKeyEncodingConfig {
|
|
400
|
+
bool output_key_object = false;
|
|
401
|
+
PKFormatType format = PKFormatType::DER;
|
|
402
|
+
PKEncodingType type = PKEncodingType::PKCS8;
|
|
403
|
+
AsymmetricKeyEncodingConfig() = default;
|
|
404
|
+
AsymmetricKeyEncodingConfig(bool output_key_object,
|
|
405
|
+
PKFormatType format,
|
|
406
|
+
PKEncodingType type);
|
|
407
|
+
AsymmetricKeyEncodingConfig(const AsymmetricKeyEncodingConfig&) = default;
|
|
408
|
+
AsymmetricKeyEncodingConfig& operator=(const AsymmetricKeyEncodingConfig&) =
|
|
409
|
+
default;
|
|
410
|
+
};
|
|
411
|
+
using PublicKeyEncodingConfig = AsymmetricKeyEncodingConfig;
|
|
412
|
+
|
|
413
|
+
struct PrivateKeyEncodingConfig : public AsymmetricKeyEncodingConfig {
|
|
414
|
+
const EVP_CIPHER* cipher = nullptr;
|
|
415
|
+
std::optional<DataPointer> passphrase = std::nullopt;
|
|
416
|
+
PrivateKeyEncodingConfig() = default;
|
|
417
|
+
PrivateKeyEncodingConfig(bool output_key_object,
|
|
418
|
+
PKFormatType format,
|
|
419
|
+
PKEncodingType type)
|
|
420
|
+
: AsymmetricKeyEncodingConfig(output_key_object, format, type) {}
|
|
421
|
+
PrivateKeyEncodingConfig(const PrivateKeyEncodingConfig&);
|
|
422
|
+
PrivateKeyEncodingConfig& operator=(const PrivateKeyEncodingConfig&);
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
static ParseKeyResult TryParsePublicKey(
|
|
426
|
+
const PublicKeyEncodingConfig& config,
|
|
427
|
+
const Buffer<const unsigned char>& buffer);
|
|
428
|
+
|
|
429
|
+
static ParseKeyResult TryParsePublicKeyPEM(
|
|
430
|
+
const Buffer<const unsigned char>& buffer);
|
|
431
|
+
|
|
432
|
+
static ParseKeyResult TryParsePrivateKey(
|
|
433
|
+
const PrivateKeyEncodingConfig& config,
|
|
434
|
+
const Buffer<const unsigned char>& buffer);
|
|
435
|
+
|
|
436
|
+
EVPKeyPointer() = default;
|
|
437
|
+
explicit EVPKeyPointer(EVP_PKEY* pkey);
|
|
438
|
+
EVPKeyPointer(EVPKeyPointer&& other) noexcept;
|
|
439
|
+
EVPKeyPointer& operator=(EVPKeyPointer&& other) noexcept;
|
|
440
|
+
NCRYPTO_DISALLOW_COPY(EVPKeyPointer)
|
|
441
|
+
~EVPKeyPointer();
|
|
442
|
+
|
|
443
|
+
inline bool operator==(std::nullptr_t) const noexcept {
|
|
444
|
+
return pkey_ == nullptr;
|
|
445
|
+
}
|
|
446
|
+
inline operator bool() const { return pkey_ != nullptr; }
|
|
447
|
+
inline EVP_PKEY* get() const { return pkey_.get(); }
|
|
448
|
+
void reset(EVP_PKEY* pkey = nullptr);
|
|
449
|
+
EVP_PKEY* release();
|
|
450
|
+
|
|
451
|
+
static int id(const EVP_PKEY* key);
|
|
452
|
+
static int base_id(const EVP_PKEY* key);
|
|
453
|
+
|
|
454
|
+
int id() const;
|
|
455
|
+
int base_id() const;
|
|
456
|
+
int bits() const;
|
|
457
|
+
size_t size() const;
|
|
458
|
+
|
|
459
|
+
size_t rawPublicKeySize() const;
|
|
460
|
+
size_t rawPrivateKeySize() const;
|
|
461
|
+
DataPointer rawPublicKey() const;
|
|
462
|
+
DataPointer rawPrivateKey() const;
|
|
463
|
+
BIOPointer derPublicKey() const;
|
|
464
|
+
|
|
465
|
+
Result<BIOPointer, bool> writePrivateKey(
|
|
466
|
+
const PrivateKeyEncodingConfig& config) const;
|
|
467
|
+
Result<BIOPointer, bool> writePublicKey(
|
|
468
|
+
const PublicKeyEncodingConfig& config) const;
|
|
469
|
+
|
|
470
|
+
EVPKeyCtxPointer newCtx() const;
|
|
471
|
+
|
|
472
|
+
static bool IsRSAPrivateKey(const Buffer<const unsigned char>& buffer);
|
|
473
|
+
|
|
474
|
+
private:
|
|
475
|
+
DeleteFnPtr<EVP_PKEY, EVP_PKEY_free> pkey_;
|
|
476
|
+
};
|
|
477
|
+
|
|
478
|
+
class DHPointer final {
|
|
479
|
+
public:
|
|
480
|
+
enum class FindGroupOption {
|
|
481
|
+
NONE,
|
|
482
|
+
// There are known and documented security issues with prime groups smaller
|
|
483
|
+
// than 2048 bits. When the NO_SMALL_PRIMES option is set, these small prime
|
|
484
|
+
// groups will not be supported.
|
|
485
|
+
NO_SMALL_PRIMES,
|
|
486
|
+
};
|
|
487
|
+
|
|
488
|
+
static BignumPointer GetStandardGenerator();
|
|
489
|
+
|
|
490
|
+
static BignumPointer FindGroup(
|
|
491
|
+
const std::string_view name,
|
|
492
|
+
FindGroupOption option = FindGroupOption::NONE);
|
|
493
|
+
static DHPointer FromGroup(const std::string_view name,
|
|
494
|
+
FindGroupOption option = FindGroupOption::NONE);
|
|
495
|
+
|
|
496
|
+
static DHPointer New(BignumPointer&& p, BignumPointer&& g);
|
|
497
|
+
static DHPointer New(size_t bits, unsigned int generator);
|
|
498
|
+
|
|
499
|
+
DHPointer() = default;
|
|
500
|
+
explicit DHPointer(DH* dh);
|
|
501
|
+
DHPointer(DHPointer&& other) noexcept;
|
|
502
|
+
DHPointer& operator=(DHPointer&& other) noexcept;
|
|
503
|
+
NCRYPTO_DISALLOW_COPY(DHPointer)
|
|
504
|
+
~DHPointer();
|
|
505
|
+
|
|
506
|
+
inline bool operator==(std::nullptr_t) noexcept { return dh_ == nullptr; }
|
|
507
|
+
inline operator bool() const { return dh_ != nullptr; }
|
|
508
|
+
inline DH* get() const { return dh_.get(); }
|
|
509
|
+
void reset(DH* dh = nullptr);
|
|
510
|
+
DH* release();
|
|
511
|
+
|
|
512
|
+
enum class CheckResult {
|
|
513
|
+
NONE,
|
|
514
|
+
P_NOT_PRIME = DH_CHECK_P_NOT_PRIME,
|
|
515
|
+
P_NOT_SAFE_PRIME = DH_CHECK_P_NOT_SAFE_PRIME,
|
|
516
|
+
UNABLE_TO_CHECK_GENERATOR = DH_UNABLE_TO_CHECK_GENERATOR,
|
|
517
|
+
NOT_SUITABLE_GENERATOR = DH_NOT_SUITABLE_GENERATOR,
|
|
518
|
+
Q_NOT_PRIME = DH_CHECK_Q_NOT_PRIME,
|
|
519
|
+
INVALID_Q = DH_CHECK_INVALID_Q_VALUE,
|
|
520
|
+
INVALID_J = DH_CHECK_INVALID_J_VALUE,
|
|
521
|
+
CHECK_FAILED = 512,
|
|
522
|
+
};
|
|
523
|
+
CheckResult check();
|
|
524
|
+
|
|
525
|
+
enum class CheckPublicKeyResult {
|
|
526
|
+
NONE,
|
|
527
|
+
TOO_SMALL = DH_R_CHECK_PUBKEY_TOO_SMALL,
|
|
528
|
+
TOO_LARGE = DH_R_CHECK_PUBKEY_TOO_LARGE,
|
|
529
|
+
INVALID = DH_R_CHECK_PUBKEY_INVALID,
|
|
530
|
+
CHECK_FAILED = 512,
|
|
531
|
+
};
|
|
532
|
+
// Check to see if the given public key is suitable for this DH instance.
|
|
533
|
+
CheckPublicKeyResult checkPublicKey(const BignumPointer& pub_key);
|
|
534
|
+
|
|
535
|
+
DataPointer getPrime() const;
|
|
536
|
+
DataPointer getGenerator() const;
|
|
537
|
+
DataPointer getPublicKey() const;
|
|
538
|
+
DataPointer getPrivateKey() const;
|
|
539
|
+
DataPointer generateKeys() const;
|
|
540
|
+
DataPointer computeSecret(const BignumPointer& peer) const;
|
|
541
|
+
|
|
542
|
+
bool setPublicKey(BignumPointer&& key);
|
|
543
|
+
bool setPrivateKey(BignumPointer&& key);
|
|
544
|
+
|
|
545
|
+
size_t size() const;
|
|
546
|
+
|
|
547
|
+
static DataPointer stateless(const EVPKeyPointer& ourKey,
|
|
548
|
+
const EVPKeyPointer& theirKey);
|
|
549
|
+
|
|
550
|
+
private:
|
|
551
|
+
DeleteFnPtr<DH, DH_free> dh_;
|
|
552
|
+
};
|
|
553
|
+
|
|
554
|
+
class X509Pointer;
|
|
555
|
+
|
|
556
|
+
class X509View final {
|
|
557
|
+
public:
|
|
558
|
+
static X509View From(const SSLPointer& ssl);
|
|
559
|
+
static X509View From(const SSLCtxPointer& ctx);
|
|
560
|
+
|
|
561
|
+
X509View() = default;
|
|
562
|
+
inline explicit X509View(const X509* cert) : cert_(cert) {}
|
|
563
|
+
X509View(const X509View& other) = default;
|
|
564
|
+
X509View& operator=(const X509View& other) = default;
|
|
565
|
+
NCRYPTO_DISALLOW_MOVE(X509View)
|
|
566
|
+
|
|
567
|
+
inline X509* get() const { return const_cast<X509*>(cert_); }
|
|
568
|
+
|
|
569
|
+
inline bool operator==(std::nullptr_t) noexcept { return cert_ == nullptr; }
|
|
570
|
+
inline operator bool() const { return cert_ != nullptr; }
|
|
571
|
+
|
|
572
|
+
BIOPointer toPEM() const;
|
|
573
|
+
BIOPointer toDER() const;
|
|
574
|
+
|
|
575
|
+
BIOPointer getSubject() const;
|
|
576
|
+
BIOPointer getSubjectAltName() const;
|
|
577
|
+
BIOPointer getIssuer() const;
|
|
578
|
+
BIOPointer getInfoAccess() const;
|
|
579
|
+
BIOPointer getValidFrom() const;
|
|
580
|
+
BIOPointer getValidTo() const;
|
|
581
|
+
int64_t getValidFromTime() const;
|
|
582
|
+
int64_t getValidToTime() const;
|
|
583
|
+
DataPointer getSerialNumber() const;
|
|
584
|
+
Result<EVPKeyPointer, int> getPublicKey() const;
|
|
585
|
+
StackOfASN1 getKeyUsage() const;
|
|
586
|
+
|
|
587
|
+
bool isCA() const;
|
|
588
|
+
bool isIssuedBy(const X509View& other) const;
|
|
589
|
+
bool checkPrivateKey(const EVPKeyPointer& pkey) const;
|
|
590
|
+
bool checkPublicKey(const EVPKeyPointer& pkey) const;
|
|
591
|
+
|
|
592
|
+
X509Pointer clone() const;
|
|
593
|
+
|
|
594
|
+
enum class CheckMatch {
|
|
595
|
+
NO_MATCH,
|
|
596
|
+
MATCH,
|
|
597
|
+
INVALID_NAME,
|
|
598
|
+
OPERATION_FAILED,
|
|
599
|
+
};
|
|
600
|
+
CheckMatch checkHost(const std::string_view host,
|
|
601
|
+
int flags,
|
|
602
|
+
DataPointer* peerName = nullptr) const;
|
|
603
|
+
CheckMatch checkEmail(const std::string_view email, int flags) const;
|
|
604
|
+
CheckMatch checkIp(const std::string_view ip, int flags) const;
|
|
605
|
+
|
|
606
|
+
private:
|
|
607
|
+
const X509* cert_ = nullptr;
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
class X509Pointer final {
|
|
611
|
+
public:
|
|
612
|
+
static Result<X509Pointer, int> Parse(Buffer<const unsigned char> buffer);
|
|
613
|
+
static X509Pointer IssuerFrom(const SSLPointer& ssl, const X509View& view);
|
|
614
|
+
static X509Pointer IssuerFrom(const SSL_CTX* ctx, const X509View& view);
|
|
615
|
+
static X509Pointer PeerFrom(const SSLPointer& ssl);
|
|
616
|
+
|
|
617
|
+
X509Pointer() = default;
|
|
618
|
+
explicit X509Pointer(X509* cert);
|
|
619
|
+
X509Pointer(X509Pointer&& other) noexcept;
|
|
620
|
+
X509Pointer& operator=(X509Pointer&& other) noexcept;
|
|
621
|
+
NCRYPTO_DISALLOW_COPY(X509Pointer)
|
|
622
|
+
~X509Pointer();
|
|
623
|
+
|
|
624
|
+
inline bool operator==(std::nullptr_t) noexcept { return cert_ == nullptr; }
|
|
625
|
+
inline operator bool() const { return cert_ != nullptr; }
|
|
626
|
+
inline X509* get() const { return cert_.get(); }
|
|
627
|
+
void reset(X509* cert = nullptr);
|
|
628
|
+
X509* release();
|
|
629
|
+
|
|
630
|
+
X509View view() const;
|
|
631
|
+
operator X509View() const { return view(); }
|
|
632
|
+
|
|
633
|
+
private:
|
|
634
|
+
DeleteFnPtr<X509, X509_free> cert_;
|
|
635
|
+
};
|
|
636
|
+
|
|
637
|
+
#ifndef OPENSSL_NO_ENGINE
|
|
638
|
+
class EnginePointer final {
|
|
639
|
+
public:
|
|
640
|
+
EnginePointer() = default;
|
|
641
|
+
|
|
642
|
+
explicit EnginePointer(ENGINE* engine_, bool finish_on_exit = false);
|
|
643
|
+
EnginePointer(EnginePointer&& other) noexcept;
|
|
644
|
+
EnginePointer& operator=(EnginePointer&& other) noexcept;
|
|
645
|
+
NCRYPTO_DISALLOW_COPY(EnginePointer)
|
|
646
|
+
~EnginePointer();
|
|
647
|
+
|
|
648
|
+
inline operator bool() const { return engine != nullptr; }
|
|
649
|
+
inline ENGINE* get() { return engine; }
|
|
650
|
+
inline void setFinishOnExit() { finish_on_exit = true; }
|
|
651
|
+
|
|
652
|
+
void reset(ENGINE* engine_ = nullptr, bool finish_on_exit_ = false);
|
|
653
|
+
|
|
654
|
+
bool setAsDefault(uint32_t flags, CryptoErrorList* errors = nullptr);
|
|
655
|
+
bool init(bool finish_on_exit = false);
|
|
656
|
+
EVPKeyPointer loadPrivateKey(const std::string_view key_name);
|
|
657
|
+
|
|
658
|
+
// Release ownership of the ENGINE* pointer.
|
|
659
|
+
ENGINE* release();
|
|
660
|
+
|
|
661
|
+
// Retrieve an OpenSSL Engine instance by name. If the name does not
|
|
662
|
+
// identify a valid named engine, the returned EnginePointer will be
|
|
663
|
+
// empty.
|
|
664
|
+
static EnginePointer getEngineByName(const std::string_view name,
|
|
665
|
+
CryptoErrorList* errors = nullptr);
|
|
666
|
+
|
|
667
|
+
// Call once when initializing OpenSSL at startup for the process.
|
|
668
|
+
static void initEnginesOnce();
|
|
669
|
+
|
|
670
|
+
private:
|
|
671
|
+
ENGINE* engine = nullptr;
|
|
672
|
+
bool finish_on_exit = false;
|
|
673
|
+
};
|
|
674
|
+
#endif // !OPENSSL_NO_ENGINE
|
|
675
|
+
|
|
676
|
+
// ============================================================================
|
|
677
|
+
// FIPS
|
|
678
|
+
bool isFipsEnabled();
|
|
679
|
+
|
|
680
|
+
bool setFipsEnabled(bool enabled, CryptoErrorList* errors);
|
|
681
|
+
|
|
682
|
+
bool testFipsEnabled();
|
|
683
|
+
|
|
684
|
+
// ============================================================================
|
|
685
|
+
// Various utilities
|
|
686
|
+
|
|
687
|
+
bool CSPRNG(void* buffer, size_t length) NCRYPTO_MUST_USE_RESULT;
|
|
688
|
+
|
|
689
|
+
// This callback is used to avoid the default passphrase callback in OpenSSL
|
|
690
|
+
// which will typically prompt for the passphrase. The prompting is designed
|
|
691
|
+
// for the OpenSSL CLI, but works poorly for some environments like Node.js
|
|
692
|
+
// because it involves synchronous interaction with the controlling terminal,
|
|
693
|
+
// something we never want, and use this function to avoid it.
|
|
694
|
+
int NoPasswordCallback(char* buf, int size, int rwflag, void* u);
|
|
695
|
+
|
|
696
|
+
int PasswordCallback(char* buf, int size, int rwflag, void* u);
|
|
697
|
+
|
|
698
|
+
bool SafeX509SubjectAltNamePrint(const BIOPointer& out, X509_EXTENSION* ext);
|
|
699
|
+
bool SafeX509InfoAccessPrint(const BIOPointer& out, X509_EXTENSION* ext);
|
|
700
|
+
|
|
701
|
+
// ============================================================================
|
|
702
|
+
// SPKAC
|
|
703
|
+
|
|
704
|
+
bool VerifySpkac(const char* input, size_t length);
|
|
705
|
+
BIOPointer ExportPublicKey(const char* input, size_t length);
|
|
706
|
+
|
|
707
|
+
// The caller takes ownership of the returned Buffer<char>
|
|
708
|
+
Buffer<char> ExportChallenge(const char* input, size_t length);
|
|
709
|
+
|
|
710
|
+
// ============================================================================
|
|
711
|
+
// KDF
|
|
712
|
+
|
|
713
|
+
const EVP_MD* getDigestByName(const std::string_view name);
|
|
714
|
+
|
|
715
|
+
// Verify that the specified HKDF output length is valid for the given digest.
|
|
716
|
+
// The maximum length for HKDF output for a given digest is 255 times the
|
|
717
|
+
// hash size for the given digest algorithm.
|
|
718
|
+
bool checkHkdfLength(const EVP_MD* md, size_t length);
|
|
719
|
+
|
|
720
|
+
DataPointer hkdf(const EVP_MD* md,
|
|
721
|
+
const Buffer<const unsigned char>& key,
|
|
722
|
+
const Buffer<const unsigned char>& info,
|
|
723
|
+
const Buffer<const unsigned char>& salt,
|
|
724
|
+
size_t length);
|
|
725
|
+
|
|
726
|
+
bool checkScryptParams(uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem);
|
|
727
|
+
|
|
728
|
+
DataPointer scrypt(const Buffer<const char>& pass,
|
|
729
|
+
const Buffer<const unsigned char>& salt,
|
|
730
|
+
uint64_t N,
|
|
731
|
+
uint64_t r,
|
|
732
|
+
uint64_t p,
|
|
733
|
+
uint64_t maxmem,
|
|
734
|
+
size_t length);
|
|
735
|
+
|
|
736
|
+
DataPointer pbkdf2(const EVP_MD* md,
|
|
737
|
+
const Buffer<const char>& pass,
|
|
738
|
+
const Buffer<const unsigned char>& salt,
|
|
739
|
+
uint32_t iterations,
|
|
740
|
+
size_t length);
|
|
741
|
+
|
|
742
|
+
// ============================================================================
|
|
743
|
+
// Version metadata
|
|
744
|
+
#define NCRYPTO_VERSION "0.0.1"
|
|
745
|
+
|
|
746
|
+
enum {
|
|
747
|
+
NCRYPTO_VERSION_MAJOR = 0,
|
|
748
|
+
NCRYPTO_VERSION_MINOR = 0,
|
|
749
|
+
NCRYPTO_VERSION_REVISION = 1,
|
|
750
|
+
};
|
|
751
|
+
|
|
752
|
+
} // namespace ncrypto
|