grpc 1.24.0 → 1.25.0.pre1
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 +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +71 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -116,6 +116,8 @@
|
|
116
116
|
#include <limits.h>
|
117
117
|
#include <string.h>
|
118
118
|
|
119
|
+
#include <tuple>
|
120
|
+
|
119
121
|
#include <openssl/buf.h>
|
120
122
|
#include <openssl/bytestring.h>
|
121
123
|
#include <openssl/err.h>
|
@@ -130,10 +132,12 @@
|
|
130
132
|
#include "internal.h"
|
131
133
|
|
132
134
|
|
133
|
-
|
135
|
+
BSSL_NAMESPACE_BEGIN
|
134
136
|
|
135
137
|
static bool add_record_to_flight(SSL *ssl, uint8_t type,
|
136
138
|
Span<const uint8_t> in) {
|
139
|
+
// The caller should have flushed |pending_hs_data| first.
|
140
|
+
assert(!ssl->s3->pending_hs_data);
|
137
141
|
// We'll never add a flight while in the process of writing it out.
|
138
142
|
assert(ssl->s3->pending_flight_offset == 0);
|
139
143
|
|
@@ -182,17 +186,50 @@ bool ssl3_finish_message(SSL *ssl, CBB *cbb, Array<uint8_t> *out_msg) {
|
|
182
186
|
}
|
183
187
|
|
184
188
|
bool ssl3_add_message(SSL *ssl, Array<uint8_t> msg) {
|
185
|
-
//
|
186
|
-
//
|
189
|
+
// Pack handshake data into the minimal number of records. This avoids
|
190
|
+
// unnecessary encryption overhead, notably in TLS 1.3 where we send several
|
191
|
+
// encrypted messages in a row. For now, we do not do this for the null
|
192
|
+
// cipher. The benefit is smaller and there is a risk of breaking buggy
|
193
|
+
// implementations.
|
194
|
+
//
|
195
|
+
// TODO(davidben): See if we can do this uniformly.
|
187
196
|
Span<const uint8_t> rest = msg;
|
188
|
-
|
189
|
-
|
190
|
-
|
197
|
+
if (ssl->quic_method == nullptr &&
|
198
|
+
ssl->s3->aead_write_ctx->is_null_cipher()) {
|
199
|
+
while (!rest.empty()) {
|
200
|
+
Span<const uint8_t> chunk = rest.subspan(0, ssl->max_send_fragment);
|
201
|
+
rest = rest.subspan(chunk.size());
|
202
|
+
|
203
|
+
if (!add_record_to_flight(ssl, SSL3_RT_HANDSHAKE, chunk)) {
|
204
|
+
return false;
|
205
|
+
}
|
206
|
+
}
|
207
|
+
} else {
|
208
|
+
while (!rest.empty()) {
|
209
|
+
// Flush if |pending_hs_data| is full.
|
210
|
+
if (ssl->s3->pending_hs_data &&
|
211
|
+
ssl->s3->pending_hs_data->length >= ssl->max_send_fragment &&
|
212
|
+
!tls_flush_pending_hs_data(ssl)) {
|
213
|
+
return false;
|
214
|
+
}
|
191
215
|
|
192
|
-
|
193
|
-
|
216
|
+
size_t pending_len =
|
217
|
+
ssl->s3->pending_hs_data ? ssl->s3->pending_hs_data->length : 0;
|
218
|
+
Span<const uint8_t> chunk =
|
219
|
+
rest.subspan(0, ssl->max_send_fragment - pending_len);
|
220
|
+
assert(!chunk.empty());
|
221
|
+
rest = rest.subspan(chunk.size());
|
222
|
+
|
223
|
+
if (!ssl->s3->pending_hs_data) {
|
224
|
+
ssl->s3->pending_hs_data.reset(BUF_MEM_new());
|
225
|
+
}
|
226
|
+
if (!ssl->s3->pending_hs_data ||
|
227
|
+
!BUF_MEM_append(ssl->s3->pending_hs_data.get(), chunk.data(),
|
228
|
+
chunk.size())) {
|
229
|
+
return false;
|
230
|
+
}
|
194
231
|
}
|
195
|
-
}
|
232
|
+
}
|
196
233
|
|
197
234
|
ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HANDSHAKE, msg);
|
198
235
|
// TODO(svaldez): Move this up a layer to fix abstraction for SSLTranscript on
|
@@ -204,10 +241,36 @@ bool ssl3_add_message(SSL *ssl, Array<uint8_t> msg) {
|
|
204
241
|
return true;
|
205
242
|
}
|
206
243
|
|
244
|
+
bool tls_flush_pending_hs_data(SSL *ssl) {
|
245
|
+
if (!ssl->s3->pending_hs_data || ssl->s3->pending_hs_data->length == 0) {
|
246
|
+
return true;
|
247
|
+
}
|
248
|
+
|
249
|
+
UniquePtr<BUF_MEM> pending_hs_data = std::move(ssl->s3->pending_hs_data);
|
250
|
+
auto data =
|
251
|
+
MakeConstSpan(reinterpret_cast<const uint8_t *>(pending_hs_data->data),
|
252
|
+
pending_hs_data->length);
|
253
|
+
if (ssl->quic_method) {
|
254
|
+
if (!ssl->quic_method->add_handshake_data(ssl, ssl->s3->write_level,
|
255
|
+
data.data(), data.size())) {
|
256
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_INTERNAL_ERROR);
|
257
|
+
return false;
|
258
|
+
}
|
259
|
+
return true;
|
260
|
+
}
|
261
|
+
|
262
|
+
return add_record_to_flight(ssl, SSL3_RT_HANDSHAKE, data);
|
263
|
+
}
|
264
|
+
|
207
265
|
bool ssl3_add_change_cipher_spec(SSL *ssl) {
|
208
266
|
static const uint8_t kChangeCipherSpec[1] = {SSL3_MT_CCS};
|
209
267
|
|
210
|
-
if (!
|
268
|
+
if (!tls_flush_pending_hs_data(ssl)) {
|
269
|
+
return false;
|
270
|
+
}
|
271
|
+
|
272
|
+
if (!ssl->quic_method &&
|
273
|
+
!add_record_to_flight(ssl, SSL3_RT_CHANGE_CIPHER_SPEC,
|
211
274
|
kChangeCipherSpec)) {
|
212
275
|
return false;
|
213
276
|
}
|
@@ -217,18 +280,23 @@ bool ssl3_add_change_cipher_spec(SSL *ssl) {
|
|
217
280
|
return true;
|
218
281
|
}
|
219
282
|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
return false;
|
283
|
+
int ssl3_flush_flight(SSL *ssl) {
|
284
|
+
if (!tls_flush_pending_hs_data(ssl)) {
|
285
|
+
return -1;
|
224
286
|
}
|
225
287
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
288
|
+
if (ssl->quic_method) {
|
289
|
+
if (ssl->s3->write_shutdown != ssl_shutdown_none) {
|
290
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
|
291
|
+
return -1;
|
292
|
+
}
|
293
|
+
|
294
|
+
if (!ssl->quic_method->flush_flight(ssl)) {
|
295
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_INTERNAL_ERROR);
|
296
|
+
return -1;
|
297
|
+
}
|
298
|
+
}
|
230
299
|
|
231
|
-
int ssl3_flush_flight(SSL *ssl) {
|
232
300
|
if (ssl->s3->pending_flight == nullptr) {
|
233
301
|
return 1;
|
234
302
|
}
|
@@ -249,7 +317,7 @@ int ssl3_flush_flight(SSL *ssl) {
|
|
249
317
|
if (!ssl->s3->write_buffer.empty()) {
|
250
318
|
int ret = ssl_write_buffer_flush(ssl);
|
251
319
|
if (ret <= 0) {
|
252
|
-
ssl->s3->rwstate =
|
320
|
+
ssl->s3->rwstate = SSL_ERROR_WANT_WRITE;
|
253
321
|
return ret;
|
254
322
|
}
|
255
323
|
}
|
@@ -257,19 +325,19 @@ int ssl3_flush_flight(SSL *ssl) {
|
|
257
325
|
// Write the pending flight.
|
258
326
|
while (ssl->s3->pending_flight_offset < ssl->s3->pending_flight->length) {
|
259
327
|
int ret = BIO_write(
|
260
|
-
ssl->wbio,
|
328
|
+
ssl->wbio.get(),
|
261
329
|
ssl->s3->pending_flight->data + ssl->s3->pending_flight_offset,
|
262
330
|
ssl->s3->pending_flight->length - ssl->s3->pending_flight_offset);
|
263
331
|
if (ret <= 0) {
|
264
|
-
ssl->s3->rwstate =
|
332
|
+
ssl->s3->rwstate = SSL_ERROR_WANT_WRITE;
|
265
333
|
return ret;
|
266
334
|
}
|
267
335
|
|
268
336
|
ssl->s3->pending_flight_offset += ret;
|
269
337
|
}
|
270
338
|
|
271
|
-
if (BIO_flush(ssl->wbio) <= 0) {
|
272
|
-
ssl->s3->rwstate =
|
339
|
+
if (BIO_flush(ssl->wbio.get()) <= 0) {
|
340
|
+
ssl->s3->rwstate = SSL_ERROR_WANT_WRITE;
|
273
341
|
return -1;
|
274
342
|
}
|
275
343
|
|
@@ -343,7 +411,7 @@ static ssl_open_record_t read_v2_client_hello(SSL *ssl, size_t *out_consumed,
|
|
343
411
|
OPENSSL_memcpy(random + (SSL3_RANDOM_SIZE - rand_len), CBS_data(&challenge),
|
344
412
|
rand_len);
|
345
413
|
|
346
|
-
// Write out an equivalent
|
414
|
+
// Write out an equivalent TLS ClientHello directly to the handshake buffer.
|
347
415
|
size_t max_v3_client_hello = SSL3_HM_HEADER_LENGTH + 2 /* version */ +
|
348
416
|
SSL3_RANDOM_SIZE + 1 /* session ID length */ +
|
349
417
|
2 /* cipher list length */ +
|
@@ -351,7 +419,11 @@ static ssl_open_record_t read_v2_client_hello(SSL *ssl, size_t *out_consumed,
|
|
351
419
|
1 /* compression length */ + 1 /* compression */;
|
352
420
|
ScopedCBB client_hello;
|
353
421
|
CBB hello_body, cipher_suites;
|
354
|
-
if (!
|
422
|
+
if (!ssl->s3->hs_buf) {
|
423
|
+
ssl->s3->hs_buf.reset(BUF_MEM_new());
|
424
|
+
}
|
425
|
+
if (!ssl->s3->hs_buf ||
|
426
|
+
!BUF_MEM_reserve(ssl->s3->hs_buf.get(), max_v3_client_hello) ||
|
355
427
|
!CBB_init_fixed(client_hello.get(), (uint8_t *)ssl->s3->hs_buf->data,
|
356
428
|
ssl->s3->hs_buf->max) ||
|
357
429
|
!CBB_add_u8(client_hello.get(), SSL3_MT_CLIENT_HELLO) ||
|
@@ -424,7 +496,7 @@ static bool parse_message(const SSL *ssl, SSLMessage *out,
|
|
424
496
|
return true;
|
425
497
|
}
|
426
498
|
|
427
|
-
bool ssl3_get_message(SSL *ssl, SSLMessage *out) {
|
499
|
+
bool ssl3_get_message(const SSL *ssl, SSLMessage *out) {
|
428
500
|
size_t unused;
|
429
501
|
if (!parse_message(ssl, out, &unused)) {
|
430
502
|
return false;
|
@@ -471,18 +543,18 @@ bool tls_has_unprocessed_handshake_data(const SSL *ssl) {
|
|
471
543
|
return ssl->s3->hs_buf && ssl->s3->hs_buf->length > msg_len;
|
472
544
|
}
|
473
545
|
|
474
|
-
|
475
|
-
uint8_t *out_alert, Span<uint8_t> in) {
|
476
|
-
*out_consumed = 0;
|
546
|
+
bool tls_append_handshake_data(SSL *ssl, Span<const uint8_t> data) {
|
477
547
|
// Re-create the handshake buffer if needed.
|
478
548
|
if (!ssl->s3->hs_buf) {
|
479
549
|
ssl->s3->hs_buf.reset(BUF_MEM_new());
|
480
|
-
if (!ssl->s3->hs_buf) {
|
481
|
-
*out_alert = SSL_AD_INTERNAL_ERROR;
|
482
|
-
return ssl_open_record_error;
|
483
|
-
}
|
484
550
|
}
|
551
|
+
return ssl->s3->hs_buf &&
|
552
|
+
BUF_MEM_append(ssl->s3->hs_buf.get(), data.data(), data.size());
|
553
|
+
}
|
485
554
|
|
555
|
+
ssl_open_record_t ssl3_open_handshake(SSL *ssl, size_t *out_consumed,
|
556
|
+
uint8_t *out_alert, Span<uint8_t> in) {
|
557
|
+
*out_consumed = 0;
|
486
558
|
// Bypass the record layer for the first message to handle V2ClientHello.
|
487
559
|
if (ssl->server && !ssl->s3->v2_hello_done) {
|
488
560
|
// Ask for the first 5 bytes, the size of the TLS record header. This is
|
@@ -551,7 +623,7 @@ ssl_open_record_t ssl3_open_handshake(SSL *ssl, size_t *out_consumed,
|
|
551
623
|
}
|
552
624
|
|
553
625
|
// Append the entire handshake record to the buffer.
|
554
|
-
if (!
|
626
|
+
if (!tls_append_handshake_data(ssl, body)) {
|
555
627
|
*out_alert = SSL_AD_INTERNAL_ERROR;
|
556
628
|
return ssl_open_record_error;
|
557
629
|
}
|
@@ -582,4 +654,71 @@ void ssl3_next_message(SSL *ssl) {
|
|
582
654
|
}
|
583
655
|
}
|
584
656
|
|
585
|
-
|
657
|
+
// CipherScorer produces a "score" for each possible cipher suite offered by
|
658
|
+
// the client.
|
659
|
+
class CipherScorer {
|
660
|
+
public:
|
661
|
+
CipherScorer(uint16_t group_id)
|
662
|
+
: aes_is_fine_(EVP_has_aes_hardware()),
|
663
|
+
security_128_is_fine_(group_id != SSL_CURVE_CECPQ2) {}
|
664
|
+
|
665
|
+
typedef std::tuple<bool, bool, bool> Score;
|
666
|
+
|
667
|
+
// MinScore returns a |Score| that will compare less than the score of all
|
668
|
+
// cipher suites.
|
669
|
+
Score MinScore() const {
|
670
|
+
return Score(false, false, false);
|
671
|
+
}
|
672
|
+
|
673
|
+
Score Evaluate(const SSL_CIPHER *a) const {
|
674
|
+
return Score(
|
675
|
+
// Something is always preferable to nothing.
|
676
|
+
true,
|
677
|
+
// Either 128-bit is fine, or 256-bit is preferred.
|
678
|
+
security_128_is_fine_ || a->algorithm_enc != SSL_AES128GCM,
|
679
|
+
// Either AES is fine, or else ChaCha20 is preferred.
|
680
|
+
aes_is_fine_ || a->algorithm_enc == SSL_CHACHA20POLY1305);
|
681
|
+
}
|
682
|
+
|
683
|
+
private:
|
684
|
+
const bool aes_is_fine_;
|
685
|
+
const bool security_128_is_fine_;
|
686
|
+
};
|
687
|
+
|
688
|
+
const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
|
689
|
+
uint16_t group_id) {
|
690
|
+
if (CBS_len(&cipher_suites) % 2 != 0) {
|
691
|
+
return nullptr;
|
692
|
+
}
|
693
|
+
|
694
|
+
const SSL_CIPHER *best = nullptr;
|
695
|
+
CipherScorer scorer(group_id);
|
696
|
+
CipherScorer::Score best_score = scorer.MinScore();
|
697
|
+
|
698
|
+
while (CBS_len(&cipher_suites) > 0) {
|
699
|
+
uint16_t cipher_suite;
|
700
|
+
if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
|
701
|
+
return nullptr;
|
702
|
+
}
|
703
|
+
|
704
|
+
// Limit to TLS 1.3 ciphers we know about.
|
705
|
+
const SSL_CIPHER *candidate = SSL_get_cipher_by_value(cipher_suite);
|
706
|
+
if (candidate == nullptr ||
|
707
|
+
SSL_CIPHER_get_min_version(candidate) > version ||
|
708
|
+
SSL_CIPHER_get_max_version(candidate) < version) {
|
709
|
+
continue;
|
710
|
+
}
|
711
|
+
|
712
|
+
const CipherScorer::Score candidate_score = scorer.Evaluate(candidate);
|
713
|
+
// |candidate_score| must be larger to displace the current choice. That way
|
714
|
+
// the client's order controls between ciphers with an equal score.
|
715
|
+
if (candidate_score > best_score) {
|
716
|
+
best = candidate;
|
717
|
+
best_score = candidate_score;
|
718
|
+
}
|
719
|
+
}
|
720
|
+
|
721
|
+
return best;
|
722
|
+
}
|
723
|
+
|
724
|
+
BSSL_NAMESPACE_END
|
@@ -162,7 +162,7 @@
|
|
162
162
|
#include "internal.h"
|
163
163
|
|
164
164
|
|
165
|
-
|
165
|
+
BSSL_NAMESPACE_BEGIN
|
166
166
|
|
167
167
|
SSL3_STATE::SSL3_STATE()
|
168
168
|
: skip_early_data(false),
|
@@ -172,12 +172,17 @@ SSL3_STATE::SSL3_STATE()
|
|
172
172
|
has_message(false),
|
173
173
|
initial_handshake_complete(false),
|
174
174
|
session_reused(false),
|
175
|
+
delegated_credential_used(false),
|
175
176
|
send_connection_binding(false),
|
176
|
-
|
177
|
+
channel_id_valid(false),
|
177
178
|
key_update_pending(false),
|
178
179
|
wpend_pending(false),
|
179
180
|
early_data_accepted(false),
|
180
|
-
|
181
|
+
tls13_downgrade(false),
|
182
|
+
token_binding_negotiated(false),
|
183
|
+
pq_experiment_signal_seen(false),
|
184
|
+
alert_dispatch(false),
|
185
|
+
renegotiate_pending(false) {}
|
181
186
|
|
182
187
|
SSL3_STATE::~SSL3_STATE() {}
|
183
188
|
|
@@ -214,13 +219,4 @@ void ssl3_free(SSL *ssl) {
|
|
214
219
|
ssl->s3 = NULL;
|
215
220
|
}
|
216
221
|
|
217
|
-
|
218
|
-
const SSL *ssl) {
|
219
|
-
if (ssl->cipher_list != NULL) {
|
220
|
-
return ssl->cipher_list;
|
221
|
-
}
|
222
|
-
|
223
|
-
return ssl->ctx->cipher_list;
|
224
|
-
}
|
225
|
-
|
226
|
-
} // namespace bssl
|
222
|
+
BSSL_NAMESPACE_END
|
@@ -118,11 +118,12 @@
|
|
118
118
|
#include <openssl/mem.h>
|
119
119
|
#include <openssl/rand.h>
|
120
120
|
|
121
|
+
#include "../crypto/err/internal.h"
|
121
122
|
#include "../crypto/internal.h"
|
122
123
|
#include "internal.h"
|
123
124
|
|
124
125
|
|
125
|
-
|
126
|
+
BSSL_NAMESPACE_BEGIN
|
126
127
|
|
127
128
|
static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len);
|
128
129
|
|
@@ -163,9 +164,11 @@ int ssl3_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *in,
|
|
163
164
|
for (;;) {
|
164
165
|
// max contains the maximum number of bytes that we can put into a record.
|
165
166
|
unsigned max = ssl->max_send_fragment;
|
166
|
-
if (is_early_data_write &&
|
167
|
-
|
168
|
-
|
167
|
+
if (is_early_data_write &&
|
168
|
+
max > ssl->session->ticket_max_early_data -
|
169
|
+
ssl->s3->hs->early_data_written) {
|
170
|
+
max =
|
171
|
+
ssl->session->ticket_max_early_data - ssl->s3->hs->early_data_written;
|
169
172
|
if (max == 0) {
|
170
173
|
ssl->s3->wnum = tot;
|
171
174
|
ssl->s3->hs->can_early_write = false;
|
@@ -230,8 +233,8 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
|
|
230
233
|
return -1;
|
231
234
|
}
|
232
235
|
|
233
|
-
if (
|
234
|
-
return
|
236
|
+
if (!tls_flush_pending_hs_data(ssl)) {
|
237
|
+
return -1;
|
235
238
|
}
|
236
239
|
|
237
240
|
size_t flight_len = 0;
|
@@ -240,12 +243,19 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
|
|
240
243
|
ssl->s3->pending_flight->length - ssl->s3->pending_flight_offset;
|
241
244
|
}
|
242
245
|
|
243
|
-
size_t max_out =
|
244
|
-
if (
|
245
|
-
|
246
|
-
|
246
|
+
size_t max_out = flight_len;
|
247
|
+
if (len > 0) {
|
248
|
+
const size_t max_ciphertext_len = len + SSL_max_seal_overhead(ssl);
|
249
|
+
if (max_ciphertext_len < len || max_out + max_ciphertext_len < max_out) {
|
250
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
|
251
|
+
return -1;
|
252
|
+
}
|
253
|
+
max_out += max_ciphertext_len;
|
254
|
+
}
|
255
|
+
|
256
|
+
if (max_out == 0) {
|
257
|
+
return 0;
|
247
258
|
}
|
248
|
-
max_out += flight_len;
|
249
259
|
|
250
260
|
if (!buf->EnsureCap(flight_len + ssl_seal_align_prefix_len(ssl), max_out)) {
|
251
261
|
return -1;
|
@@ -265,12 +275,14 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
|
|
265
275
|
buf->DidWrite(flight_len);
|
266
276
|
}
|
267
277
|
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
278
|
+
if (len > 0) {
|
279
|
+
size_t ciphertext_len;
|
280
|
+
if (!tls_seal_record(ssl, buf->remaining().data(), &ciphertext_len,
|
281
|
+
buf->remaining().size(), type, in, len)) {
|
282
|
+
return -1;
|
283
|
+
}
|
284
|
+
buf->DidWrite(ciphertext_len);
|
272
285
|
}
|
273
|
-
buf->DidWrite(ciphertext_len);
|
274
286
|
|
275
287
|
// Now that we've made progress on the connection, uncork KeyUpdate
|
276
288
|
// acknowledgments.
|
@@ -313,11 +325,7 @@ ssl_open_record_t ssl3_open_app_data(SSL *ssl, Span<uint8_t> *out,
|
|
313
325
|
return ssl_open_record_error;
|
314
326
|
}
|
315
327
|
|
316
|
-
if (!ssl
|
317
|
-
ssl->s3->hs_buf.reset(BUF_MEM_new());
|
318
|
-
}
|
319
|
-
if (!ssl->s3->hs_buf ||
|
320
|
-
!BUF_MEM_append(ssl->s3->hs_buf.get(), body.data(), body.size())) {
|
328
|
+
if (!tls_append_handshake_data(ssl, body)) {
|
321
329
|
*out_alert = SSL_AD_INTERNAL_ERROR;
|
322
330
|
return ssl_open_record_error;
|
323
331
|
}
|
@@ -374,7 +382,24 @@ ssl_open_record_t ssl3_open_change_cipher_spec(SSL *ssl, size_t *out_consumed,
|
|
374
382
|
return ssl_open_record_success;
|
375
383
|
}
|
376
384
|
|
377
|
-
|
385
|
+
void ssl_send_alert(SSL *ssl, int level, int desc) {
|
386
|
+
// This function is called in response to a fatal error from the peer. Ignore
|
387
|
+
// any failures writing the alert and report only the original error. In
|
388
|
+
// particular, if the transport uses |SSL_write|, our existing error will be
|
389
|
+
// clobbered so we must save and restore the error queue. See
|
390
|
+
// https://crbug.com/959305.
|
391
|
+
//
|
392
|
+
// TODO(davidben): Return the alert out of the handshake, rather than calling
|
393
|
+
// this function internally everywhere.
|
394
|
+
//
|
395
|
+
// TODO(davidben): This does not allow retrying if the alert hit EAGAIN. See
|
396
|
+
// https://crbug.com/boringssl/130.
|
397
|
+
UniquePtr<ERR_SAVE_STATE> err_state(ERR_save_state());
|
398
|
+
ssl_send_alert_impl(ssl, level, desc);
|
399
|
+
ERR_restore_state(err_state.get());
|
400
|
+
}
|
401
|
+
|
402
|
+
int ssl_send_alert_impl(SSL *ssl, int level, int desc) {
|
378
403
|
// It is illegal to send an alert when we've already sent a closing one.
|
379
404
|
if (ssl->s3->write_shutdown != ssl_shutdown_none) {
|
380
405
|
OPENSSL_PUT_ERROR(SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
|
@@ -389,7 +414,7 @@ int ssl_send_alert(SSL *ssl, int level, int desc) {
|
|
389
414
|
ssl->s3->write_shutdown = ssl_shutdown_error;
|
390
415
|
}
|
391
416
|
|
392
|
-
ssl->s3->alert_dispatch =
|
417
|
+
ssl->s3->alert_dispatch = true;
|
393
418
|
ssl->s3->send_alert[0] = level;
|
394
419
|
ssl->s3->send_alert[1] = desc;
|
395
420
|
if (ssl->s3->write_buffer.empty()) {
|
@@ -403,15 +428,24 @@ int ssl_send_alert(SSL *ssl, int level, int desc) {
|
|
403
428
|
}
|
404
429
|
|
405
430
|
int ssl3_dispatch_alert(SSL *ssl) {
|
406
|
-
|
407
|
-
|
408
|
-
|
431
|
+
if (ssl->quic_method) {
|
432
|
+
if (!ssl->quic_method->send_alert(ssl, ssl->s3->write_level,
|
433
|
+
ssl->s3->send_alert[1])) {
|
434
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_INTERNAL_ERROR);
|
435
|
+
return 0;
|
436
|
+
}
|
437
|
+
} else {
|
438
|
+
int ret = do_ssl3_write(ssl, SSL3_RT_ALERT, &ssl->s3->send_alert[0], 2);
|
439
|
+
if (ret <= 0) {
|
440
|
+
return ret;
|
441
|
+
}
|
409
442
|
}
|
410
|
-
|
443
|
+
|
444
|
+
ssl->s3->alert_dispatch = false;
|
411
445
|
|
412
446
|
// If the alert is fatal, flush the BIO now.
|
413
447
|
if (ssl->s3->send_alert[0] == SSL3_AL_FATAL) {
|
414
|
-
BIO_flush(ssl->wbio);
|
448
|
+
BIO_flush(ssl->wbio.get());
|
415
449
|
}
|
416
450
|
|
417
451
|
ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_ALERT, ssl->s3->send_alert);
|
@@ -422,4 +456,4 @@ int ssl3_dispatch_alert(SSL *ssl) {
|
|
422
456
|
return 1;
|
423
457
|
}
|
424
458
|
|
425
|
-
|
459
|
+
BSSL_NAMESPACE_END
|