grpc 1.55.3 → 1.56.0.pre3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +100 -70
- data/include/grpc/event_engine/event_engine.h +4 -3
- data/include/grpc/grpc_audit_logging.h +96 -0
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/json.h +218 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +82 -98
- data/src/core/ext/filters/client_channel/client_channel.h +4 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
- data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
- data/src/core/ext/filters/client_channel/config_selector.h +9 -24
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
- data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
- data/src/core/ext/filters/client_channel/subchannel.h +3 -43
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +543 -567
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
- data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -9
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
- data/src/core/ext/xds/xds_api.cc +9 -6
- data/src/core/ext/xds/xds_api.h +3 -2
- data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
- data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
- data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
- data/src/core/ext/xds/xds_client.cc +5 -4
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_cluster.cc +20 -19
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
- data/src/core/ext/xds/xds_common_types.cc +3 -1
- data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
- data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
- data/src/core/ext/xds/xds_http_filters.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
- data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
- data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
- data/src/core/ext/xds/xds_listener.cc +1 -0
- data/src/core/ext/xds/xds_route_config.cc +40 -3
- data/src/core/ext/xds/xds_routing.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
- data/src/core/lib/avl/avl.h +5 -0
- data/src/core/lib/backoff/random_early_detection.h +0 -5
- data/src/core/lib/channel/channel_args.cc +80 -22
- data/src/core/lib/channel/channel_args.h +34 -1
- data/src/core/lib/channel/channel_trace.cc +16 -12
- data/src/core/lib/channel/channelz.cc +159 -132
- data/src/core/lib/channel/channelz.h +42 -35
- data/src/core/lib/channel/channelz_registry.cc +23 -20
- data/src/core/lib/channel/connected_channel.cc +17 -6
- data/src/core/lib/channel/promise_based_filter.cc +0 -4
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression_internal.cc +2 -5
- data/src/core/lib/config/config_vars.cc +20 -18
- data/src/core/lib/config/config_vars.h +4 -4
- data/src/core/lib/config/load_config.cc +13 -0
- data/src/core/lib/config/load_config.h +6 -0
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/stats_data.h +1 -1
- data/src/core/lib/debug/trace.cc +24 -55
- data/src/core/lib/debug/trace.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
- data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
- data/src/core/lib/event_engine/default_event_engine.cc +13 -1
- data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
- data/src/core/lib/event_engine/poller.h +2 -2
- data/src/core/lib/event_engine/posix.h +4 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/shim.cc +7 -1
- data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
- data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
- data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
- data/src/core/lib/event_engine/windows/iocp.cc +4 -3
- data/src/core/lib/event_engine/windows/iocp.h +3 -3
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/win_socket.h +4 -4
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
- data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
- data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
- data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
- data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
- data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
- data/src/core/lib/experiments/config.cc +38 -7
- data/src/core/lib/experiments/config.h +16 -0
- data/src/core/lib/experiments/experiments.cc +67 -20
- data/src/core/lib/experiments/experiments.h +27 -21
- data/src/core/lib/gpr/log_internal.h +55 -0
- data/src/core/lib/gprpp/crash.cc +10 -0
- data/src/core/lib/gprpp/crash.h +3 -0
- data/src/core/lib/gprpp/per_cpu.cc +33 -0
- data/src/core/lib/gprpp/per_cpu.h +29 -6
- data/src/core/lib/gprpp/time.cc +1 -0
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
- data/src/core/lib/iomgr/ev_apple.cc +12 -12
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
- data/src/core/lib/iomgr/iocp_windows.cc +24 -3
- data/src/core/lib/iomgr/iocp_windows.h +11 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
- data/src/core/lib/iomgr/socket_windows.cc +61 -7
- data/src/core/lib/iomgr/socket_windows.h +9 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
- data/src/core/lib/iomgr/tcp_server_posix.cc +156 -140
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
- data/src/core/lib/json/json.h +2 -166
- data/src/core/lib/json/json_object_loader.cc +8 -9
- data/src/core/lib/json/json_object_loader.h +25 -18
- data/src/core/lib/json/json_reader.cc +13 -6
- data/src/core/lib/json/json_util.cc +6 -11
- data/src/core/lib/json/json_writer.cc +7 -8
- data/src/core/lib/load_balancing/lb_policy.h +13 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/matchers/matchers.h +2 -1
- data/src/core/lib/promise/activity.cc +5 -0
- data/src/core/lib/promise/activity.h +10 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/party.cc +31 -13
- data/src/core/lib/promise/party.h +11 -2
- data/src/core/lib/promise/pipe.h +9 -2
- data/src/core/lib/promise/prioritized_race.h +95 -0
- data/src/core/lib/promise/sleep.cc +2 -1
- data/src/core/lib/resolver/server_address.cc +0 -8
- data/src/core/lib/resolver/server_address.h +0 -6
- data/src/core/lib/resource_quota/memory_quota.cc +7 -7
- data/src/core/lib/resource_quota/memory_quota.h +1 -2
- data/src/core/lib/security/authorization/audit_logging.cc +98 -0
- data/src/core/lib/security/authorization/audit_logging.h +73 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
- data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
- data/src/core/lib/security/authorization/rbac_policy.h +19 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
- data/src/core/lib/security/authorization/stdout_logger.h +61 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
- data/src/core/lib/security/util/json_util.cc +1 -0
- data/src/core/lib/service_config/service_config_call_data.h +49 -20
- data/src/core/lib/service_config/service_config_impl.cc +2 -1
- data/src/core/lib/surface/call.cc +38 -23
- data/src/core/lib/surface/completion_queue.cc +6 -2
- data/src/core/lib/surface/validate_metadata.cc +22 -37
- data/src/core/lib/surface/validate_metadata.h +3 -13
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/batch_builder.cc +15 -12
- data/src/core/lib/transport/batch_builder.h +39 -35
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +8 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
- data/third_party/cares/cares/include/ares.h +23 -1
- data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
- data/third_party/cares/cares/include/ares_rules.h +2 -2
- data/third_party/cares/cares/include/ares_version.h +3 -3
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
- data/third_party/cares/cares/src/lib/ares_data.c +16 -0
- data/third_party/cares/cares/src/lib/ares_data.h +7 -0
- data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
- data/third_party/cares/cares/src/lib/ares_init.c +97 -485
- data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
- data/third_party/cares/cares/src/lib/ares_private.h +30 -16
- data/third_party/cares/cares/src/lib/ares_process.c +55 -16
- data/third_party/cares/cares/src/lib/ares_query.c +1 -35
- data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
- data/third_party/cares/cares/src/lib/ares_send.c +5 -7
- data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
- data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
- data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
- data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
- data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
- metadata +50 -16
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
- data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
- data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -157,13 +157,11 @@ static int file_read(BIO *b, char *out, int outl) {
|
|
157
157
|
}
|
158
158
|
|
159
159
|
static int file_write(BIO *b, const char *in, int inl) {
|
160
|
-
int ret = 0;
|
161
|
-
|
162
160
|
if (!b->init) {
|
163
161
|
return 0;
|
164
162
|
}
|
165
163
|
|
166
|
-
ret = fwrite(in, inl, 1, (FILE *)b->ptr);
|
164
|
+
int ret = (int)fwrite(in, inl, 1, (FILE *)b->ptr);
|
167
165
|
if (ret > 0) {
|
168
166
|
ret = inl;
|
169
167
|
}
|
@@ -253,20 +251,18 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr) {
|
|
253
251
|
}
|
254
252
|
|
255
253
|
static int file_gets(BIO *bp, char *buf, int size) {
|
256
|
-
int ret = 0;
|
257
|
-
|
258
254
|
if (size == 0) {
|
259
255
|
return 0;
|
260
256
|
}
|
261
257
|
|
262
258
|
if (!fgets(buf, size, (FILE *)bp->ptr)) {
|
263
259
|
buf[0] = 0;
|
264
|
-
|
260
|
+
// TODO(davidben): This doesn't distinguish error and EOF. This should check
|
261
|
+
// |ferror| as in |file_read|.
|
262
|
+
return 0;
|
265
263
|
}
|
266
|
-
ret = strlen(buf);
|
267
264
|
|
268
|
-
|
269
|
-
return ret;
|
265
|
+
return (int)strlen(buf);
|
270
266
|
}
|
271
267
|
|
272
268
|
static const BIO_METHOD methods_filep = {
|
@@ -221,7 +221,8 @@ static int bio_read(BIO *bio, char *buf, int size_) {
|
|
221
221
|
rest -= chunk;
|
222
222
|
} while (rest);
|
223
223
|
|
224
|
-
|
224
|
+
// |size| is bounded by the buffer size, which fits in |int|.
|
225
|
+
return (int)size;
|
225
226
|
}
|
226
227
|
|
227
228
|
static int bio_write(BIO *bio, const char *buf, int num_) {
|
@@ -293,7 +294,8 @@ static int bio_write(BIO *bio, const char *buf, int num_) {
|
|
293
294
|
buf += chunk;
|
294
295
|
} while (rest);
|
295
296
|
|
296
|
-
|
297
|
+
// |num| is bounded by the buffer size, which fits in |int|.
|
298
|
+
return (int)num;
|
297
299
|
}
|
298
300
|
|
299
301
|
static int bio_make_pair(BIO *bio1, BIO *bio2, size_t writebuf1_len,
|
@@ -55,10 +55,13 @@ static void blake2b_mix(uint64_t v[16], int a, int b, int c, int d, uint64_t x,
|
|
55
55
|
v[b] = CRYPTO_rotr_u64(v[b] ^ v[c], 63);
|
56
56
|
}
|
57
57
|
|
58
|
-
static
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
static uint64_t blake2b_load(const uint8_t block[BLAKE2B_CBLOCK], size_t i) {
|
59
|
+
return CRYPTO_load_u64_le(block + 8 * i);
|
60
|
+
}
|
61
|
+
|
62
|
+
static void blake2b_transform(BLAKE2B_CTX *b2b,
|
63
|
+
const uint8_t block[BLAKE2B_CBLOCK],
|
64
|
+
size_t num_bytes, int is_final_block) {
|
62
65
|
// https://tools.ietf.org/html/rfc7693#section-3.2
|
63
66
|
uint64_t v[16];
|
64
67
|
static_assert(sizeof(v) == sizeof(b2b->h) + sizeof(kIV), "");
|
@@ -78,14 +81,22 @@ static void blake2b_transform(
|
|
78
81
|
|
79
82
|
for (int round = 0; round < 12; round++) {
|
80
83
|
const uint8_t *const s = &kSigma[16 * (round % 10)];
|
81
|
-
blake2b_mix(v, 0, 4, 8, 12,
|
82
|
-
|
83
|
-
blake2b_mix(v,
|
84
|
-
|
85
|
-
blake2b_mix(v,
|
86
|
-
|
87
|
-
blake2b_mix(v,
|
88
|
-
|
84
|
+
blake2b_mix(v, 0, 4, 8, 12, blake2b_load(block, s[0]),
|
85
|
+
blake2b_load(block, s[1]));
|
86
|
+
blake2b_mix(v, 1, 5, 9, 13, blake2b_load(block, s[2]),
|
87
|
+
blake2b_load(block, s[3]));
|
88
|
+
blake2b_mix(v, 2, 6, 10, 14, blake2b_load(block, s[4]),
|
89
|
+
blake2b_load(block, s[5]));
|
90
|
+
blake2b_mix(v, 3, 7, 11, 15, blake2b_load(block, s[6]),
|
91
|
+
blake2b_load(block, s[7]));
|
92
|
+
blake2b_mix(v, 0, 5, 10, 15, blake2b_load(block, s[8]),
|
93
|
+
blake2b_load(block, s[9]));
|
94
|
+
blake2b_mix(v, 1, 6, 11, 12, blake2b_load(block, s[10]),
|
95
|
+
blake2b_load(block, s[11]));
|
96
|
+
blake2b_mix(v, 2, 7, 8, 13, blake2b_load(block, s[12]),
|
97
|
+
blake2b_load(block, s[13]));
|
98
|
+
blake2b_mix(v, 3, 4, 9, 14, blake2b_load(block, s[14]),
|
99
|
+
blake2b_load(block, s[15]));
|
89
100
|
}
|
90
101
|
|
91
102
|
for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(b2b->h); i++) {
|
@@ -111,11 +122,11 @@ void BLAKE2B256_Update(BLAKE2B_CTX *b2b, const void *in_data, size_t len) {
|
|
111
122
|
}
|
112
123
|
|
113
124
|
const uint8_t *data = in_data;
|
114
|
-
size_t todo = sizeof(b2b->block
|
125
|
+
size_t todo = sizeof(b2b->block) - b2b->block_used;
|
115
126
|
if (todo > len) {
|
116
127
|
todo = len;
|
117
128
|
}
|
118
|
-
OPENSSL_memcpy(&b2b->block
|
129
|
+
OPENSSL_memcpy(&b2b->block[b2b->block_used], data, todo);
|
119
130
|
b2b->block_used += todo;
|
120
131
|
data += todo;
|
121
132
|
len -= todo;
|
@@ -126,26 +137,24 @@ void BLAKE2B256_Update(BLAKE2B_CTX *b2b, const void *in_data, size_t len) {
|
|
126
137
|
|
127
138
|
// More input remains therefore we must have filled |b2b->block|.
|
128
139
|
assert(b2b->block_used == BLAKE2B_CBLOCK);
|
129
|
-
blake2b_transform(b2b, b2b->block
|
140
|
+
blake2b_transform(b2b, b2b->block, BLAKE2B_CBLOCK,
|
130
141
|
/*is_final_block=*/0);
|
131
142
|
b2b->block_used = 0;
|
132
143
|
|
133
144
|
while (len > BLAKE2B_CBLOCK) {
|
134
|
-
|
135
|
-
OPENSSL_memcpy(block_words, data, sizeof(block_words));
|
136
|
-
blake2b_transform(b2b, block_words, BLAKE2B_CBLOCK, /*is_final_block=*/0);
|
145
|
+
blake2b_transform(b2b, data, BLAKE2B_CBLOCK, /*is_final_block=*/0);
|
137
146
|
data += BLAKE2B_CBLOCK;
|
138
147
|
len -= BLAKE2B_CBLOCK;
|
139
148
|
}
|
140
149
|
|
141
|
-
OPENSSL_memcpy(b2b->block
|
150
|
+
OPENSSL_memcpy(b2b->block, data, len);
|
142
151
|
b2b->block_used = len;
|
143
152
|
}
|
144
153
|
|
145
154
|
void BLAKE2B256_Final(uint8_t out[BLAKE2B256_DIGEST_LENGTH], BLAKE2B_CTX *b2b) {
|
146
|
-
OPENSSL_memset(&b2b->block
|
147
|
-
sizeof(b2b->block
|
148
|
-
blake2b_transform(b2b, b2b->block
|
155
|
+
OPENSSL_memset(&b2b->block[b2b->block_used], 0,
|
156
|
+
sizeof(b2b->block) - b2b->block_used);
|
157
|
+
blake2b_transform(b2b, b2b->block, b2b->block_used,
|
149
158
|
/*is_final_block=*/1);
|
150
159
|
static_assert(BLAKE2B256_DIGEST_LENGTH <= sizeof(b2b->h), "");
|
151
160
|
memcpy(out, b2b->h, BLAKE2B256_DIGEST_LENGTH);
|
@@ -400,6 +400,14 @@ static int aead_aes_128_cbc_sha1_tls_implicit_iv_init(
|
|
400
400
|
EVP_sha1(), 1);
|
401
401
|
}
|
402
402
|
|
403
|
+
static int aead_aes_128_cbc_sha256_tls_init(EVP_AEAD_CTX *ctx,
|
404
|
+
const uint8_t *key, size_t key_len,
|
405
|
+
size_t tag_len,
|
406
|
+
enum evp_aead_direction_t dir) {
|
407
|
+
return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_128_cbc(),
|
408
|
+
EVP_sha256(), 0);
|
409
|
+
}
|
410
|
+
|
403
411
|
static int aead_aes_256_cbc_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
404
412
|
size_t key_len, size_t tag_len,
|
405
413
|
enum evp_aead_direction_t dir) {
|
@@ -442,13 +450,6 @@ static int aead_tls_get_iv(const EVP_AEAD_CTX *ctx, const uint8_t **out_iv,
|
|
442
450
|
return 1;
|
443
451
|
}
|
444
452
|
|
445
|
-
static int aead_null_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
446
|
-
size_t key_len, size_t tag_len,
|
447
|
-
enum evp_aead_direction_t dir) {
|
448
|
-
return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_enc_null(),
|
449
|
-
EVP_sha1(), 1 /* implicit iv */);
|
450
|
-
}
|
451
|
-
|
452
453
|
static const EVP_AEAD aead_aes_128_cbc_sha1_tls = {
|
453
454
|
SHA_DIGEST_LENGTH + 16, // key len (SHA1 + AES128)
|
454
455
|
16, // nonce len (IV)
|
@@ -483,6 +484,23 @@ static const EVP_AEAD aead_aes_128_cbc_sha1_tls_implicit_iv = {
|
|
483
484
|
aead_tls_tag_len,
|
484
485
|
};
|
485
486
|
|
487
|
+
static const EVP_AEAD aead_aes_128_cbc_sha256_tls = {
|
488
|
+
SHA256_DIGEST_LENGTH + 16, // key len (SHA256 + AES128)
|
489
|
+
16, // nonce len (IV)
|
490
|
+
16 + SHA256_DIGEST_LENGTH, // overhead (padding + SHA256)
|
491
|
+
SHA256_DIGEST_LENGTH, // max tag length
|
492
|
+
0, // seal_scatter_supports_extra_in
|
493
|
+
|
494
|
+
NULL, // init
|
495
|
+
aead_aes_128_cbc_sha256_tls_init,
|
496
|
+
aead_tls_cleanup,
|
497
|
+
aead_tls_open,
|
498
|
+
aead_tls_seal_scatter,
|
499
|
+
NULL, // open_gather
|
500
|
+
NULL, // get_iv
|
501
|
+
aead_tls_tag_len,
|
502
|
+
};
|
503
|
+
|
486
504
|
static const EVP_AEAD aead_aes_256_cbc_sha1_tls = {
|
487
505
|
SHA_DIGEST_LENGTH + 32, // key len (SHA1 + AES256)
|
488
506
|
16, // nonce len (IV)
|
@@ -551,23 +569,6 @@ static const EVP_AEAD aead_des_ede3_cbc_sha1_tls_implicit_iv = {
|
|
551
569
|
aead_tls_tag_len,
|
552
570
|
};
|
553
571
|
|
554
|
-
static const EVP_AEAD aead_null_sha1_tls = {
|
555
|
-
SHA_DIGEST_LENGTH, // key len
|
556
|
-
0, // nonce len
|
557
|
-
SHA_DIGEST_LENGTH, // overhead (SHA1)
|
558
|
-
SHA_DIGEST_LENGTH, // max tag length
|
559
|
-
0, // seal_scatter_supports_extra_in
|
560
|
-
|
561
|
-
NULL, // init
|
562
|
-
aead_null_sha1_tls_init,
|
563
|
-
aead_tls_cleanup,
|
564
|
-
aead_tls_open,
|
565
|
-
aead_tls_seal_scatter,
|
566
|
-
NULL, // open_gather
|
567
|
-
NULL, // get_iv
|
568
|
-
aead_tls_tag_len,
|
569
|
-
};
|
570
|
-
|
571
572
|
const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls(void) {
|
572
573
|
return &aead_aes_128_cbc_sha1_tls;
|
573
574
|
}
|
@@ -576,6 +577,10 @@ const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls_implicit_iv(void) {
|
|
576
577
|
return &aead_aes_128_cbc_sha1_tls_implicit_iv;
|
577
578
|
}
|
578
579
|
|
580
|
+
const EVP_AEAD *EVP_aead_aes_128_cbc_sha256_tls(void) {
|
581
|
+
return &aead_aes_128_cbc_sha256_tls;
|
582
|
+
}
|
583
|
+
|
579
584
|
const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls(void) {
|
580
585
|
return &aead_aes_256_cbc_sha1_tls;
|
581
586
|
}
|
@@ -591,5 +596,3 @@ const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls(void) {
|
|
591
596
|
const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv(void) {
|
592
597
|
return &aead_des_ede3_cbc_sha1_tls_implicit_iv;
|
593
598
|
}
|
594
|
-
|
595
|
-
const EVP_AEAD *EVP_aead_null_sha1_tls(void) { return &aead_null_sha1_tls; }
|
@@ -109,6 +109,14 @@ OPENSSL_EXPORT int EVP_sha1_final_with_secret_suffix(
|
|
109
109
|
SHA_CTX *ctx, uint8_t out[SHA_DIGEST_LENGTH], const uint8_t *in, size_t len,
|
110
110
|
size_t max_len);
|
111
111
|
|
112
|
+
// EVP_sha256_final_with_secret_suffix acts like
|
113
|
+
// |EVP_sha1_final_with_secret_suffix|, but for SHA-256.
|
114
|
+
//
|
115
|
+
// This function is exported for unit tests.
|
116
|
+
OPENSSL_EXPORT int EVP_sha256_final_with_secret_suffix(
|
117
|
+
SHA256_CTX *ctx, uint8_t out[SHA256_DIGEST_LENGTH], const uint8_t *in,
|
118
|
+
size_t len, size_t max_len);
|
119
|
+
|
112
120
|
// EVP_tls_cbc_digest_record computes the MAC of a decrypted, padded TLS
|
113
121
|
// record.
|
114
122
|
//
|
@@ -267,24 +267,115 @@ int EVP_sha1_final_with_secret_suffix(SHA_CTX *ctx,
|
|
267
267
|
return 1;
|
268
268
|
}
|
269
269
|
|
270
|
-
int
|
271
|
-
|
270
|
+
int EVP_sha256_final_with_secret_suffix(SHA256_CTX *ctx,
|
271
|
+
uint8_t out[SHA256_DIGEST_LENGTH],
|
272
|
+
const uint8_t *in, size_t len,
|
273
|
+
size_t max_len) {
|
274
|
+
// Bound the input length so |total_bits| below fits in four bytes. This is
|
275
|
+
// redundant with TLS record size limits. This also ensures |input_idx| below
|
276
|
+
// does not overflow.
|
277
|
+
size_t max_len_bits = max_len << 3;
|
278
|
+
if (ctx->Nh != 0 ||
|
279
|
+
(max_len_bits >> 3) != max_len || // Overflow
|
280
|
+
ctx->Nl + max_len_bits < max_len_bits ||
|
281
|
+
ctx->Nl + max_len_bits > UINT32_MAX) {
|
282
|
+
return 0;
|
283
|
+
}
|
284
|
+
|
285
|
+
// We need to hash the following into |ctx|:
|
286
|
+
//
|
287
|
+
// - ctx->data[:ctx->num]
|
288
|
+
// - in[:len]
|
289
|
+
// - A 0x80 byte
|
290
|
+
// - However many zero bytes are needed to pad up to a block.
|
291
|
+
// - Eight bytes of length.
|
292
|
+
size_t num_blocks = (ctx->num + len + 1 + 8 + SHA256_CBLOCK - 1) >> 6;
|
293
|
+
size_t last_block = num_blocks - 1;
|
294
|
+
size_t max_blocks = (ctx->num + max_len + 1 + 8 + SHA256_CBLOCK - 1) >> 6;
|
295
|
+
|
296
|
+
// The bounds above imply |total_bits| fits in four bytes.
|
297
|
+
size_t total_bits = ctx->Nl + (len << 3);
|
298
|
+
uint8_t length_bytes[4];
|
299
|
+
length_bytes[0] = (uint8_t)(total_bits >> 24);
|
300
|
+
length_bytes[1] = (uint8_t)(total_bits >> 16);
|
301
|
+
length_bytes[2] = (uint8_t)(total_bits >> 8);
|
302
|
+
length_bytes[3] = (uint8_t)total_bits;
|
303
|
+
|
304
|
+
// We now construct and process each expected block in constant-time.
|
305
|
+
uint8_t block[SHA256_CBLOCK] = {0};
|
306
|
+
uint32_t result[8] = {0};
|
307
|
+
// input_idx is the index into |in| corresponding to the current block.
|
308
|
+
// However, we allow this index to overflow beyond |max_len|, to simplify the
|
309
|
+
// 0x80 byte.
|
310
|
+
size_t input_idx = 0;
|
311
|
+
for (size_t i = 0; i < max_blocks; i++) {
|
312
|
+
// Fill |block| with data from the partial block in |ctx| and |in|. We copy
|
313
|
+
// as if we were hashing up to |max_len| and then zero the excess later.
|
314
|
+
size_t block_start = 0;
|
315
|
+
if (i == 0) {
|
316
|
+
OPENSSL_memcpy(block, ctx->data, ctx->num);
|
317
|
+
block_start = ctx->num;
|
318
|
+
}
|
319
|
+
if (input_idx < max_len) {
|
320
|
+
size_t to_copy = SHA256_CBLOCK - block_start;
|
321
|
+
if (to_copy > max_len - input_idx) {
|
322
|
+
to_copy = max_len - input_idx;
|
323
|
+
}
|
324
|
+
OPENSSL_memcpy(block + block_start, in + input_idx, to_copy);
|
325
|
+
}
|
326
|
+
|
327
|
+
// Zero any bytes beyond |len| and add the 0x80 byte.
|
328
|
+
for (size_t j = block_start; j < SHA256_CBLOCK; j++) {
|
329
|
+
// input[idx] corresponds to block[j].
|
330
|
+
size_t idx = input_idx + j - block_start;
|
331
|
+
// The barriers on |len| are not strictly necessary. However, without
|
332
|
+
// them, GCC compiles this code by incorporating |len| into the loop
|
333
|
+
// counter and subtracting it out later. This is still constant-time, but
|
334
|
+
// it frustrates attempts to validate this.
|
335
|
+
uint8_t is_in_bounds = constant_time_lt_8(idx, value_barrier_w(len));
|
336
|
+
uint8_t is_padding_byte = constant_time_eq_8(idx, value_barrier_w(len));
|
337
|
+
block[j] &= is_in_bounds;
|
338
|
+
block[j] |= 0x80 & is_padding_byte;
|
339
|
+
}
|
340
|
+
|
341
|
+
input_idx += SHA256_CBLOCK - block_start;
|
342
|
+
|
343
|
+
// Fill in the length if this is the last block.
|
344
|
+
crypto_word_t is_last_block = constant_time_eq_w(i, last_block);
|
345
|
+
for (size_t j = 0; j < 4; j++) {
|
346
|
+
block[SHA256_CBLOCK - 4 + j] |= is_last_block & length_bytes[j];
|
347
|
+
}
|
348
|
+
|
349
|
+
// Process the block and save the hash state if it is the final value.
|
350
|
+
SHA256_Transform(ctx, block);
|
351
|
+
for (size_t j = 0; j < 8; j++) {
|
352
|
+
result[j] |= is_last_block & ctx->h[j];
|
353
|
+
}
|
354
|
+
}
|
355
|
+
|
356
|
+
// Write the output.
|
357
|
+
for (size_t i = 0; i < 8; i++) {
|
358
|
+
CRYPTO_store_u32_be(out + 4 * i, result[i]);
|
359
|
+
}
|
360
|
+
return 1;
|
272
361
|
}
|
273
362
|
|
274
|
-
int
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
if (EVP_MD_type(md) != NID_sha1) {
|
281
|
-
// EVP_tls_cbc_record_digest_supported should have been called first to
|
282
|
-
// check that the hash function is supported.
|
283
|
-
assert(0);
|
284
|
-
*md_out_size = 0;
|
363
|
+
int EVP_tls_cbc_record_digest_supported(const EVP_MD *md) {
|
364
|
+
switch (EVP_MD_type(md)) {
|
365
|
+
case NID_sha1:
|
366
|
+
case NID_sha256:
|
367
|
+
return 1;
|
368
|
+
default:
|
285
369
|
return 0;
|
286
370
|
}
|
371
|
+
}
|
287
372
|
|
373
|
+
static int tls_cbc_digest_record_sha1(uint8_t *md_out, size_t *md_out_size,
|
374
|
+
const uint8_t header[13],
|
375
|
+
const uint8_t *data, size_t data_size,
|
376
|
+
size_t data_plus_mac_plus_padding_size,
|
377
|
+
const uint8_t *mac_secret,
|
378
|
+
unsigned mac_secret_length) {
|
288
379
|
if (mac_secret_length > SHA_CBLOCK) {
|
289
380
|
// HMAC pads small keys with zeros and hashes large keys down. This function
|
290
381
|
// should never reach the large key case.
|
@@ -336,3 +427,88 @@ int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
|
|
336
427
|
*md_out_size = SHA_DIGEST_LENGTH;
|
337
428
|
return 1;
|
338
429
|
}
|
430
|
+
|
431
|
+
static int tls_cbc_digest_record_sha256(uint8_t *md_out, size_t *md_out_size,
|
432
|
+
const uint8_t header[13],
|
433
|
+
const uint8_t *data, size_t data_size,
|
434
|
+
size_t data_plus_mac_plus_padding_size,
|
435
|
+
const uint8_t *mac_secret,
|
436
|
+
unsigned mac_secret_length) {
|
437
|
+
if (mac_secret_length > SHA256_CBLOCK) {
|
438
|
+
// HMAC pads small keys with zeros and hashes large keys down. This function
|
439
|
+
// should never reach the large key case.
|
440
|
+
assert(0);
|
441
|
+
return 0;
|
442
|
+
}
|
443
|
+
|
444
|
+
// Compute the initial HMAC block.
|
445
|
+
uint8_t hmac_pad[SHA256_CBLOCK];
|
446
|
+
OPENSSL_memset(hmac_pad, 0, sizeof(hmac_pad));
|
447
|
+
OPENSSL_memcpy(hmac_pad, mac_secret, mac_secret_length);
|
448
|
+
for (size_t i = 0; i < SHA256_CBLOCK; i++) {
|
449
|
+
hmac_pad[i] ^= 0x36;
|
450
|
+
}
|
451
|
+
|
452
|
+
SHA256_CTX ctx;
|
453
|
+
SHA256_Init(&ctx);
|
454
|
+
SHA256_Update(&ctx, hmac_pad, SHA256_CBLOCK);
|
455
|
+
SHA256_Update(&ctx, header, 13);
|
456
|
+
|
457
|
+
// There are at most 256 bytes of padding, so we can compute the public
|
458
|
+
// minimum length for |data_size|.
|
459
|
+
size_t min_data_size = 0;
|
460
|
+
if (data_plus_mac_plus_padding_size > SHA256_DIGEST_LENGTH + 256) {
|
461
|
+
min_data_size =
|
462
|
+
data_plus_mac_plus_padding_size - SHA256_DIGEST_LENGTH - 256;
|
463
|
+
}
|
464
|
+
|
465
|
+
// Hash the public minimum length directly. This reduces the number of blocks
|
466
|
+
// that must be computed in constant-time.
|
467
|
+
SHA256_Update(&ctx, data, min_data_size);
|
468
|
+
|
469
|
+
// Hash the remaining data without leaking |data_size|.
|
470
|
+
uint8_t mac_out[SHA256_DIGEST_LENGTH];
|
471
|
+
if (!EVP_sha256_final_with_secret_suffix(
|
472
|
+
&ctx, mac_out, data + min_data_size, data_size - min_data_size,
|
473
|
+
data_plus_mac_plus_padding_size - min_data_size)) {
|
474
|
+
return 0;
|
475
|
+
}
|
476
|
+
|
477
|
+
// Complete the HMAC in the standard manner.
|
478
|
+
SHA256_Init(&ctx);
|
479
|
+
for (size_t i = 0; i < SHA256_CBLOCK; i++) {
|
480
|
+
hmac_pad[i] ^= 0x6a;
|
481
|
+
}
|
482
|
+
|
483
|
+
SHA256_Update(&ctx, hmac_pad, SHA256_CBLOCK);
|
484
|
+
SHA256_Update(&ctx, mac_out, SHA256_DIGEST_LENGTH);
|
485
|
+
SHA256_Final(md_out, &ctx);
|
486
|
+
*md_out_size = SHA256_DIGEST_LENGTH;
|
487
|
+
return 1;
|
488
|
+
}
|
489
|
+
|
490
|
+
int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
|
491
|
+
size_t *md_out_size, const uint8_t header[13],
|
492
|
+
const uint8_t *data, size_t data_size,
|
493
|
+
size_t data_plus_mac_plus_padding_size,
|
494
|
+
const uint8_t *mac_secret,
|
495
|
+
unsigned mac_secret_length) {
|
496
|
+
switch (EVP_MD_type(md)) {
|
497
|
+
case NID_sha1:
|
498
|
+
return tls_cbc_digest_record_sha1(
|
499
|
+
md_out, md_out_size, header, data, data_size,
|
500
|
+
data_plus_mac_plus_padding_size, mac_secret, mac_secret_length);
|
501
|
+
|
502
|
+
case NID_sha256:
|
503
|
+
return tls_cbc_digest_record_sha256(
|
504
|
+
md_out, md_out_size, header, data, data_size,
|
505
|
+
data_plus_mac_plus_padding_size, mac_secret, mac_secret_length);
|
506
|
+
|
507
|
+
default:
|
508
|
+
// EVP_tls_cbc_record_digest_supported should have been called first to
|
509
|
+
// check that the hash function is supported.
|
510
|
+
assert(0);
|
511
|
+
*md_out_size = 0;
|
512
|
+
return 0;
|
513
|
+
}
|
514
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
/* Copyright (c) 2022, Robert Nagy <robert.nagy@gmail.com>
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include <openssl/cpu.h>
|
16
|
+
|
17
|
+
#if defined(OPENSSL_AARCH64) && defined(OPENSSL_OPENBSD) && \
|
18
|
+
!defined(OPENSSL_STATIC_ARMCAP)
|
19
|
+
|
20
|
+
#include <sys/sysctl.h>
|
21
|
+
#include <machine/cpu.h>
|
22
|
+
#include <machine/armreg.h>
|
23
|
+
|
24
|
+
#include <openssl/arm_arch.h>
|
25
|
+
|
26
|
+
#include "internal.h"
|
27
|
+
|
28
|
+
extern uint32_t OPENSSL_armcap_P;
|
29
|
+
|
30
|
+
void OPENSSL_cpuid_setup(void) {
|
31
|
+
int isar0_mib[] = { CTL_MACHDEP, CPU_ID_AA64ISAR0 };
|
32
|
+
uint64_t cpu_id = 0;
|
33
|
+
size_t len = sizeof(cpu_id);
|
34
|
+
|
35
|
+
if (sysctl(isar0_mib, 2, &cpu_id, &len, NULL, 0) < 0) {
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
|
39
|
+
OPENSSL_armcap_P |= ARMV7_NEON;
|
40
|
+
|
41
|
+
if (ID_AA64ISAR0_AES(cpu_id) >= ID_AA64ISAR0_AES_BASE) {
|
42
|
+
OPENSSL_armcap_P |= ARMV8_AES;
|
43
|
+
}
|
44
|
+
|
45
|
+
if (ID_AA64ISAR0_AES(cpu_id) >= ID_AA64ISAR0_AES_PMULL) {
|
46
|
+
OPENSSL_armcap_P |= ARMV8_PMULL;
|
47
|
+
}
|
48
|
+
|
49
|
+
if (ID_AA64ISAR0_SHA1(cpu_id) >= ID_AA64ISAR0_SHA1_BASE) {
|
50
|
+
OPENSSL_armcap_P |= ARMV8_SHA1;
|
51
|
+
}
|
52
|
+
|
53
|
+
if (ID_AA64ISAR0_SHA2(cpu_id) >= ID_AA64ISAR0_SHA2_BASE) {
|
54
|
+
OPENSSL_armcap_P |= ARMV8_SHA256;
|
55
|
+
}
|
56
|
+
|
57
|
+
if (ID_AA64ISAR0_SHA2(cpu_id) >= ID_AA64ISAR0_SHA2_512) {
|
58
|
+
OPENSSL_armcap_P |= ARMV8_SHA512;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
#endif // OPENSSL_AARCH64 && OPENSSL_OPENBSD && !OPENSSL_STATIC_ARMCAP
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/* Copyright (c) 2023, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include "internal.h"
|
16
|
+
|
17
|
+
#if defined(OPENSSL_ARM) && defined(OPENSSL_OPENBSD) && \
|
18
|
+
!defined(OPENSSL_STATIC_ARMCAP)
|
19
|
+
|
20
|
+
#include <openssl/arm_arch.h>
|
21
|
+
|
22
|
+
extern uint32_t OPENSSL_armcap_P;
|
23
|
+
|
24
|
+
void OPENSSL_cpuid_setup(void) {
|
25
|
+
// OpenBSD does not support arm32 machines without NEON
|
26
|
+
OPENSSL_armcap_P |= ARMV7_NEON;
|
27
|
+
|
28
|
+
// OpenBSD does not support v8 features on non aarch64
|
29
|
+
}
|
30
|
+
|
31
|
+
#endif // OPENSSL_ARM && OPENSSL_OPENBSD && !OPENSSL_STATIC_ARMCAP
|
@@ -35,11 +35,13 @@
|
|
35
35
|
// Various pre-computed constants.
|
36
36
|
#include "./curve25519_tables.h"
|
37
37
|
|
38
|
-
#if defined(
|
38
|
+
#if defined(BORINGSSL_HAS_UINT128)
|
39
39
|
#include "../../third_party/fiat/curve25519_64.h"
|
40
|
+
#elif defined(OPENSSL_64_BIT)
|
41
|
+
#include "../../third_party/fiat/curve25519_64_msvc.h"
|
40
42
|
#else
|
41
43
|
#include "../../third_party/fiat/curve25519_32.h"
|
42
|
-
#endif
|
44
|
+
#endif
|
43
45
|
|
44
46
|
|
45
47
|
// Low-level intrinsic operations
|
@@ -64,7 +66,7 @@ static uint64_t load_4(const uint8_t *in) {
|
|
64
66
|
|
65
67
|
// Field operations.
|
66
68
|
|
67
|
-
#if defined(
|
69
|
+
#if defined(OPENSSL_64_BIT)
|
68
70
|
|
69
71
|
typedef uint64_t fe_limb_t;
|
70
72
|
#define FE_NUM_LIMBS 5
|
@@ -144,7 +146,7 @@ typedef uint32_t fe_limb_t;
|
|
144
146
|
} \
|
145
147
|
} while (0)
|
146
148
|
|
147
|
-
#endif //
|
149
|
+
#endif // OPENSSL_64_BIT
|
148
150
|
|
149
151
|
static_assert(sizeof(fe) == sizeof(fe_limb_t) * FE_NUM_LIMBS,
|
150
152
|
"fe_limb_t[FE_NUM_LIMBS] is inconsistent with fe");
|