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
@@ -135,22 +135,14 @@
|
|
135
135
|
|
136
136
|
#include <openssl/ssl.h>
|
137
137
|
|
138
|
-
#include <assert.h>
|
139
|
-
#include <string.h>
|
140
|
-
|
141
138
|
#include <openssl/buf.h>
|
142
139
|
#include <openssl/digest.h>
|
143
140
|
#include <openssl/err.h>
|
144
|
-
#include <openssl/mem.h>
|
145
|
-
#include <openssl/md5.h>
|
146
|
-
#include <openssl/nid.h>
|
147
|
-
#include <openssl/sha.h>
|
148
141
|
|
149
|
-
#include "../crypto/internal.h"
|
150
142
|
#include "internal.h"
|
151
143
|
|
152
144
|
|
153
|
-
|
145
|
+
BSSL_NAMESPACE_BEGIN
|
154
146
|
|
155
147
|
SSLTranscript::SSLTranscript() {}
|
156
148
|
|
@@ -163,7 +155,6 @@ bool SSLTranscript::Init() {
|
|
163
155
|
}
|
164
156
|
|
165
157
|
hash_.Reset();
|
166
|
-
md5_.Reset();
|
167
158
|
return true;
|
168
159
|
}
|
169
160
|
|
@@ -180,17 +171,6 @@ static bool InitDigestWithData(EVP_MD_CTX *ctx, const EVP_MD *md,
|
|
180
171
|
|
181
172
|
bool SSLTranscript::InitHash(uint16_t version, const SSL_CIPHER *cipher) {
|
182
173
|
const EVP_MD *md = ssl_get_handshake_digest(version, cipher);
|
183
|
-
|
184
|
-
// To support SSL 3.0's Finished and CertificateVerify constructions,
|
185
|
-
// EVP_md5_sha1() is split into MD5 and SHA-1 halves. When SSL 3.0 is removed,
|
186
|
-
// we can simplify this.
|
187
|
-
if (md == EVP_md5_sha1()) {
|
188
|
-
if (!InitDigestWithData(md5_.get(), EVP_md5(), buffer_.get())) {
|
189
|
-
return false;
|
190
|
-
}
|
191
|
-
md = EVP_sha1();
|
192
|
-
}
|
193
|
-
|
194
174
|
return InitDigestWithData(hash_.get(), md, buffer_.get());
|
195
175
|
}
|
196
176
|
|
@@ -203,9 +183,6 @@ size_t SSLTranscript::DigestLen() const {
|
|
203
183
|
}
|
204
184
|
|
205
185
|
const EVP_MD *SSLTranscript::Digest() const {
|
206
|
-
if (EVP_MD_CTX_md(md5_.get()) != nullptr) {
|
207
|
-
return EVP_md5_sha1();
|
208
|
-
}
|
209
186
|
return EVP_MD_CTX_md(hash_.get());
|
210
187
|
}
|
211
188
|
|
@@ -229,8 +206,20 @@ bool SSLTranscript::UpdateForHelloRetryRequest() {
|
|
229
206
|
return true;
|
230
207
|
}
|
231
208
|
|
232
|
-
bool SSLTranscript::
|
233
|
-
|
209
|
+
bool SSLTranscript::CopyToHashContext(EVP_MD_CTX *ctx, const EVP_MD *digest) {
|
210
|
+
const EVP_MD *transcript_digest = Digest();
|
211
|
+
if (transcript_digest != nullptr &&
|
212
|
+
EVP_MD_type(transcript_digest) == EVP_MD_type(digest)) {
|
213
|
+
return EVP_MD_CTX_copy_ex(ctx, hash_.get());
|
214
|
+
}
|
215
|
+
|
216
|
+
if (buffer_) {
|
217
|
+
return EVP_DigestInit_ex(ctx, digest, nullptr) &&
|
218
|
+
EVP_DigestUpdate(ctx, buffer_->data, buffer_->length);
|
219
|
+
}
|
220
|
+
|
221
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
222
|
+
return false;
|
234
223
|
}
|
235
224
|
|
236
225
|
bool SSLTranscript::Update(Span<const uint8_t> in) {
|
@@ -244,150 +233,40 @@ bool SSLTranscript::Update(Span<const uint8_t> in) {
|
|
244
233
|
if (EVP_MD_CTX_md(hash_.get()) != NULL) {
|
245
234
|
EVP_DigestUpdate(hash_.get(), in.data(), in.size());
|
246
235
|
}
|
247
|
-
if (EVP_MD_CTX_md(md5_.get()) != NULL) {
|
248
|
-
EVP_DigestUpdate(md5_.get(), in.data(), in.size());
|
249
|
-
}
|
250
236
|
|
251
237
|
return true;
|
252
238
|
}
|
253
239
|
|
254
240
|
bool SSLTranscript::GetHash(uint8_t *out, size_t *out_len) {
|
255
241
|
ScopedEVP_MD_CTX ctx;
|
256
|
-
unsigned md5_len = 0;
|
257
|
-
if (EVP_MD_CTX_md(md5_.get()) != NULL) {
|
258
|
-
if (!EVP_MD_CTX_copy_ex(ctx.get(), md5_.get()) ||
|
259
|
-
!EVP_DigestFinal_ex(ctx.get(), out, &md5_len)) {
|
260
|
-
return false;
|
261
|
-
}
|
262
|
-
}
|
263
|
-
|
264
242
|
unsigned len;
|
265
243
|
if (!EVP_MD_CTX_copy_ex(ctx.get(), hash_.get()) ||
|
266
|
-
!EVP_DigestFinal_ex(ctx.get(), out
|
267
|
-
return false;
|
268
|
-
}
|
269
|
-
|
270
|
-
*out_len = md5_len + len;
|
271
|
-
return true;
|
272
|
-
}
|
273
|
-
|
274
|
-
static bool SSL3HandshakeMAC(const SSL_SESSION *session,
|
275
|
-
const EVP_MD_CTX *ctx_template, const char *sender,
|
276
|
-
size_t sender_len, uint8_t *p, size_t *out_len) {
|
277
|
-
ScopedEVP_MD_CTX ctx;
|
278
|
-
if (!EVP_MD_CTX_copy_ex(ctx.get(), ctx_template)) {
|
279
|
-
OPENSSL_PUT_ERROR(SSL, ERR_LIB_EVP);
|
244
|
+
!EVP_DigestFinal_ex(ctx.get(), out, &len)) {
|
280
245
|
return false;
|
281
246
|
}
|
282
|
-
|
283
|
-
static const uint8_t kPad1[48] = {
|
284
|
-
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
285
|
-
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
286
|
-
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
287
|
-
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
288
|
-
};
|
289
|
-
|
290
|
-
static const uint8_t kPad2[48] = {
|
291
|
-
0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
|
292
|
-
0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
|
293
|
-
0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
|
294
|
-
0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
|
295
|
-
};
|
296
|
-
|
297
|
-
size_t n = EVP_MD_CTX_size(ctx.get());
|
298
|
-
|
299
|
-
size_t npad = (48 / n) * n;
|
300
|
-
EVP_DigestUpdate(ctx.get(), sender, sender_len);
|
301
|
-
EVP_DigestUpdate(ctx.get(), session->master_key, session->master_key_length);
|
302
|
-
EVP_DigestUpdate(ctx.get(), kPad1, npad);
|
303
|
-
unsigned md_buf_len;
|
304
|
-
uint8_t md_buf[EVP_MAX_MD_SIZE];
|
305
|
-
EVP_DigestFinal_ex(ctx.get(), md_buf, &md_buf_len);
|
306
|
-
|
307
|
-
if (!EVP_DigestInit_ex(ctx.get(), EVP_MD_CTX_md(ctx.get()), NULL)) {
|
308
|
-
OPENSSL_PUT_ERROR(SSL, ERR_LIB_EVP);
|
309
|
-
return false;
|
310
|
-
}
|
311
|
-
EVP_DigestUpdate(ctx.get(), session->master_key, session->master_key_length);
|
312
|
-
EVP_DigestUpdate(ctx.get(), kPad2, npad);
|
313
|
-
EVP_DigestUpdate(ctx.get(), md_buf, md_buf_len);
|
314
|
-
unsigned len;
|
315
|
-
EVP_DigestFinal_ex(ctx.get(), p, &len);
|
316
|
-
|
317
247
|
*out_len = len;
|
318
248
|
return true;
|
319
249
|
}
|
320
250
|
|
321
|
-
bool SSLTranscript::GetSSL3CertVerifyHash(uint8_t *out, size_t *out_len,
|
322
|
-
const SSL_SESSION *session,
|
323
|
-
uint16_t signature_algorithm) {
|
324
|
-
if (Digest() != EVP_md5_sha1()) {
|
325
|
-
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
326
|
-
return false;
|
327
|
-
}
|
328
|
-
|
329
|
-
if (signature_algorithm == SSL_SIGN_RSA_PKCS1_MD5_SHA1) {
|
330
|
-
size_t md5_len, len;
|
331
|
-
if (!SSL3HandshakeMAC(session, md5_.get(), NULL, 0, out, &md5_len) ||
|
332
|
-
!SSL3HandshakeMAC(session, hash_.get(), NULL, 0, out + md5_len, &len)) {
|
333
|
-
return false;
|
334
|
-
}
|
335
|
-
*out_len = md5_len + len;
|
336
|
-
return true;
|
337
|
-
}
|
338
|
-
|
339
|
-
if (signature_algorithm == SSL_SIGN_ECDSA_SHA1) {
|
340
|
-
return SSL3HandshakeMAC(session, hash_.get(), NULL, 0, out, out_len);
|
341
|
-
}
|
342
|
-
|
343
|
-
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
344
|
-
return false;
|
345
|
-
}
|
346
|
-
|
347
251
|
bool SSLTranscript::GetFinishedMAC(uint8_t *out, size_t *out_len,
|
348
252
|
const SSL_SESSION *session,
|
349
253
|
bool from_server) {
|
350
|
-
if (session->ssl_version == SSL3_VERSION) {
|
351
|
-
if (Digest() != EVP_md5_sha1()) {
|
352
|
-
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
353
|
-
return false;
|
354
|
-
}
|
355
|
-
|
356
|
-
const char *sender = from_server ? SSL3_MD_SERVER_FINISHED_CONST
|
357
|
-
: SSL3_MD_CLIENT_FINISHED_CONST;
|
358
|
-
const size_t sender_len = 4;
|
359
|
-
size_t md5_len, len;
|
360
|
-
if (!SSL3HandshakeMAC(session, md5_.get(), sender, sender_len, out,
|
361
|
-
&md5_len) ||
|
362
|
-
!SSL3HandshakeMAC(session, hash_.get(), sender, sender_len,
|
363
|
-
out + md5_len, &len)) {
|
364
|
-
return false;
|
365
|
-
}
|
366
|
-
|
367
|
-
*out_len = md5_len + len;
|
368
|
-
return true;
|
369
|
-
}
|
370
|
-
|
371
|
-
// At this point, the handshake should have released the handshake buffer on
|
372
|
-
// its own.
|
373
|
-
assert(!buffer_);
|
374
|
-
|
375
254
|
static const char kClientLabel[] = "client finished";
|
376
255
|
static const char kServerLabel[] = "server finished";
|
377
256
|
auto label = from_server
|
378
257
|
? MakeConstSpan(kServerLabel, sizeof(kServerLabel) - 1)
|
379
258
|
: MakeConstSpan(kClientLabel, sizeof(kClientLabel) - 1);
|
380
259
|
|
381
|
-
uint8_t
|
382
|
-
size_t
|
383
|
-
if (!GetHash(
|
260
|
+
uint8_t digest[EVP_MAX_MD_SIZE];
|
261
|
+
size_t digest_len;
|
262
|
+
if (!GetHash(digest, &digest_len)) {
|
384
263
|
return false;
|
385
264
|
}
|
386
265
|
|
387
266
|
static const size_t kFinishedLen = 12;
|
388
267
|
if (!tls1_prf(Digest(), MakeSpan(out, kFinishedLen),
|
389
268
|
MakeConstSpan(session->master_key, session->master_key_length),
|
390
|
-
label, MakeConstSpan(
|
269
|
+
label, MakeConstSpan(digest, digest_len), {})) {
|
391
270
|
return false;
|
392
271
|
}
|
393
272
|
|
@@ -395,4 +274,4 @@ bool SSLTranscript::GetFinishedMAC(uint8_t *out, size_t *out_len,
|
|
395
274
|
return true;
|
396
275
|
}
|
397
276
|
|
398
|
-
|
277
|
+
BSSL_NAMESPACE_END
|
@@ -23,21 +23,17 @@
|
|
23
23
|
#include "../crypto/internal.h"
|
24
24
|
|
25
25
|
|
26
|
-
|
26
|
+
BSSL_NAMESPACE_BEGIN
|
27
27
|
|
28
28
|
bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version) {
|
29
29
|
switch (version) {
|
30
|
-
case SSL3_VERSION:
|
31
30
|
case TLS1_VERSION:
|
32
31
|
case TLS1_1_VERSION:
|
33
32
|
case TLS1_2_VERSION:
|
33
|
+
case TLS1_3_VERSION:
|
34
34
|
*out = version;
|
35
35
|
return true;
|
36
36
|
|
37
|
-
case TLS1_3_DRAFT23_VERSION:
|
38
|
-
*out = TLS1_3_VERSION;
|
39
|
-
return true;
|
40
|
-
|
41
37
|
case DTLS1_VERSION:
|
42
38
|
// DTLS 1.0 is analogous to TLS 1.1, not TLS 1.0.
|
43
39
|
*out = TLS1_1_VERSION;
|
@@ -56,11 +52,10 @@ bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version) {
|
|
56
52
|
// decreasing preference.
|
57
53
|
|
58
54
|
static const uint16_t kTLSVersions[] = {
|
59
|
-
|
55
|
+
TLS1_3_VERSION,
|
60
56
|
TLS1_2_VERSION,
|
61
57
|
TLS1_1_VERSION,
|
62
58
|
TLS1_VERSION,
|
63
|
-
SSL3_VERSION,
|
64
59
|
};
|
65
60
|
|
66
61
|
static const uint16_t kDTLSVersions[] = {
|
@@ -68,24 +63,16 @@ static const uint16_t kDTLSVersions[] = {
|
|
68
63
|
DTLS1_VERSION,
|
69
64
|
};
|
70
65
|
|
71
|
-
static
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
*out_num = OPENSSL_ARRAY_SIZE(kDTLSVersions);
|
76
|
-
} else {
|
77
|
-
*out = kTLSVersions;
|
78
|
-
*out_num = OPENSSL_ARRAY_SIZE(kTLSVersions);
|
79
|
-
}
|
66
|
+
static Span<const uint16_t> get_method_versions(
|
67
|
+
const SSL_PROTOCOL_METHOD *method) {
|
68
|
+
return method->is_dtls ? Span<const uint16_t>(kDTLSVersions)
|
69
|
+
: Span<const uint16_t>(kTLSVersions);
|
80
70
|
}
|
81
71
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
get_method_versions(method, &versions, &num_versions);
|
87
|
-
for (size_t i = 0; i < num_versions; i++) {
|
88
|
-
if (versions[i] == version) {
|
72
|
+
bool ssl_method_supports_version(const SSL_PROTOCOL_METHOD *method,
|
73
|
+
uint16_t version) {
|
74
|
+
for (uint16_t supported : get_method_versions(method)) {
|
75
|
+
if (supported == version) {
|
89
76
|
return true;
|
90
77
|
}
|
91
78
|
}
|
@@ -93,13 +80,11 @@ static bool method_supports_version(const SSL_PROTOCOL_METHOD *method,
|
|
93
80
|
}
|
94
81
|
|
95
82
|
// The following functions map between API versions and wire versions. The
|
96
|
-
// public API works on wire versions
|
97
|
-
// appear as TLS 1.3. This will get collapsed back down when TLS 1.3 is
|
98
|
-
// finalized.
|
83
|
+
// public API works on wire versions.
|
99
84
|
|
100
85
|
static const char *ssl_version_to_string(uint16_t version) {
|
101
86
|
switch (version) {
|
102
|
-
case
|
87
|
+
case TLS1_3_VERSION:
|
103
88
|
return "TLSv1.3";
|
104
89
|
|
105
90
|
case TLS1_2_VERSION:
|
@@ -111,9 +96,6 @@ static const char *ssl_version_to_string(uint16_t version) {
|
|
111
96
|
case TLS1_VERSION:
|
112
97
|
return "TLSv1";
|
113
98
|
|
114
|
-
case SSL3_VERSION:
|
115
|
-
return "SSLv3";
|
116
|
-
|
117
99
|
case DTLS1_VERSION:
|
118
100
|
return "DTLSv1";
|
119
101
|
|
@@ -126,26 +108,11 @@ static const char *ssl_version_to_string(uint16_t version) {
|
|
126
108
|
}
|
127
109
|
|
128
110
|
static uint16_t wire_version_to_api(uint16_t version) {
|
129
|
-
|
130
|
-
// Report TLS 1.3 draft versions as TLS 1.3 in the public API.
|
131
|
-
case TLS1_3_DRAFT23_VERSION:
|
132
|
-
return TLS1_3_VERSION;
|
133
|
-
default:
|
134
|
-
return version;
|
135
|
-
}
|
111
|
+
return version;
|
136
112
|
}
|
137
113
|
|
138
|
-
// api_version_to_wire maps |version| to some representative wire version.
|
139
|
-
// particular, it picks an arbitrary TLS 1.3 representative. This should only be
|
140
|
-
// used in context where that does not matter.
|
114
|
+
// api_version_to_wire maps |version| to some representative wire version.
|
141
115
|
static bool api_version_to_wire(uint16_t *out, uint16_t version) {
|
142
|
-
if (version == TLS1_3_DRAFT23_VERSION) {
|
143
|
-
return false;
|
144
|
-
}
|
145
|
-
if (version == TLS1_3_VERSION) {
|
146
|
-
version = TLS1_3_DRAFT23_VERSION;
|
147
|
-
}
|
148
|
-
|
149
116
|
// Check it is a real protocol version.
|
150
117
|
uint16_t unused;
|
151
118
|
if (!ssl_protocol_version_from_wire(&unused, version)) {
|
@@ -159,12 +126,12 @@ static bool api_version_to_wire(uint16_t *out, uint16_t version) {
|
|
159
126
|
static bool set_version_bound(const SSL_PROTOCOL_METHOD *method, uint16_t *out,
|
160
127
|
uint16_t version) {
|
161
128
|
if (!api_version_to_wire(&version, version) ||
|
162
|
-
!
|
163
|
-
!ssl_protocol_version_from_wire(out, version)) {
|
129
|
+
!ssl_method_supports_version(method, version)) {
|
164
130
|
OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_SSL_VERSION);
|
165
131
|
return false;
|
166
132
|
}
|
167
133
|
|
134
|
+
*out = version;
|
168
135
|
return true;
|
169
136
|
}
|
170
137
|
|
@@ -172,8 +139,7 @@ static bool set_min_version(const SSL_PROTOCOL_METHOD *method, uint16_t *out,
|
|
172
139
|
uint16_t version) {
|
173
140
|
// Zero is interpreted as the default minimum version.
|
174
141
|
if (version == 0) {
|
175
|
-
|
176
|
-
*out = method->is_dtls ? TLS1_1_VERSION : TLS1_VERSION;
|
142
|
+
*out = method->is_dtls ? DTLS1_VERSION : TLS1_VERSION;
|
177
143
|
return true;
|
178
144
|
}
|
179
145
|
|
@@ -184,7 +150,7 @@ static bool set_max_version(const SSL_PROTOCOL_METHOD *method, uint16_t *out,
|
|
184
150
|
uint16_t version) {
|
185
151
|
// Zero is interpreted as the default maximum version.
|
186
152
|
if (version == 0) {
|
187
|
-
*out = TLS1_2_VERSION;
|
153
|
+
*out = method->is_dtls ? DTLS1_2_VERSION : TLS1_2_VERSION;
|
188
154
|
return true;
|
189
155
|
}
|
190
156
|
|
@@ -195,27 +161,37 @@ const struct {
|
|
195
161
|
uint16_t version;
|
196
162
|
uint32_t flag;
|
197
163
|
} kProtocolVersions[] = {
|
198
|
-
{SSL3_VERSION, SSL_OP_NO_SSLv3},
|
199
164
|
{TLS1_VERSION, SSL_OP_NO_TLSv1},
|
200
165
|
{TLS1_1_VERSION, SSL_OP_NO_TLSv1_1},
|
201
166
|
{TLS1_2_VERSION, SSL_OP_NO_TLSv1_2},
|
202
167
|
{TLS1_3_VERSION, SSL_OP_NO_TLSv1_3},
|
203
168
|
};
|
204
169
|
|
205
|
-
bool ssl_get_version_range(const
|
170
|
+
bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version,
|
206
171
|
uint16_t *out_max_version) {
|
207
172
|
// For historical reasons, |SSL_OP_NO_DTLSv1| aliases |SSL_OP_NO_TLSv1|, but
|
208
173
|
// DTLS 1.0 should be mapped to TLS 1.1.
|
209
|
-
uint32_t options = ssl->options;
|
210
|
-
if (SSL_is_dtls(ssl)) {
|
174
|
+
uint32_t options = hs->ssl->options;
|
175
|
+
if (SSL_is_dtls(hs->ssl)) {
|
211
176
|
options &= ~SSL_OP_NO_TLSv1_1;
|
212
177
|
if (options & SSL_OP_NO_DTLSv1) {
|
213
178
|
options |= SSL_OP_NO_TLSv1_1;
|
214
179
|
}
|
215
180
|
}
|
216
181
|
|
217
|
-
uint16_t min_version
|
218
|
-
|
182
|
+
uint16_t min_version, max_version;
|
183
|
+
if (!ssl_protocol_version_from_wire(&min_version,
|
184
|
+
hs->config->conf_min_version) ||
|
185
|
+
!ssl_protocol_version_from_wire(&max_version,
|
186
|
+
hs->config->conf_max_version)) {
|
187
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
188
|
+
return false;
|
189
|
+
}
|
190
|
+
|
191
|
+
// QUIC requires TLS 1.3.
|
192
|
+
if (hs->ssl->quic_method && min_version < TLS1_3_VERSION) {
|
193
|
+
min_version = TLS1_3_VERSION;
|
194
|
+
}
|
219
195
|
|
220
196
|
// OpenSSL's API for controlling versions entails blacklisting individual
|
221
197
|
// protocols. This has two problems. First, on the client, the protocol can
|
@@ -287,38 +263,20 @@ uint16_t ssl_protocol_version(const SSL *ssl) {
|
|
287
263
|
bool ssl_supports_version(SSL_HANDSHAKE *hs, uint16_t version) {
|
288
264
|
SSL *const ssl = hs->ssl;
|
289
265
|
uint16_t protocol_version;
|
290
|
-
if (!
|
266
|
+
if (!ssl_method_supports_version(ssl->method, version) ||
|
291
267
|
!ssl_protocol_version_from_wire(&protocol_version, version) ||
|
292
268
|
hs->min_version > protocol_version ||
|
293
269
|
protocol_version > hs->max_version) {
|
294
270
|
return false;
|
295
271
|
}
|
296
272
|
|
297
|
-
|
298
|
-
// experimentation. Although we currently only have one variant, TLS 1.3 does
|
299
|
-
// not a final stable deployment yet, so leave the logic in place for now.
|
300
|
-
if (protocol_version != TLS1_3_VERSION ||
|
301
|
-
(ssl->tls13_variant == tls13_default &&
|
302
|
-
version == TLS1_3_DRAFT23_VERSION)) {
|
303
|
-
return true;
|
304
|
-
}
|
305
|
-
|
306
|
-
// The server, when not configured at |tls13_default|, should additionally
|
307
|
-
// enable all variants.
|
308
|
-
if (ssl->server && ssl->tls13_variant != tls13_default) {
|
309
|
-
return true;
|
310
|
-
}
|
311
|
-
|
312
|
-
return false;
|
273
|
+
return true;
|
313
274
|
}
|
314
275
|
|
315
276
|
bool ssl_add_supported_versions(SSL_HANDSHAKE *hs, CBB *cbb) {
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
for (size_t i = 0; i < num_versions; i++) {
|
320
|
-
if (ssl_supports_version(hs, versions[i]) &&
|
321
|
-
!CBB_add_u16(cbb, versions[i])) {
|
277
|
+
for (uint16_t version : get_method_versions(hs->ssl->method)) {
|
278
|
+
if (ssl_supports_version(hs, version) &&
|
279
|
+
!CBB_add_u16(cbb, version)) {
|
322
280
|
return false;
|
323
281
|
}
|
324
282
|
}
|
@@ -327,24 +285,33 @@ bool ssl_add_supported_versions(SSL_HANDSHAKE *hs, CBB *cbb) {
|
|
327
285
|
|
328
286
|
bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
|
329
287
|
uint16_t *out_version, const CBS *peer_versions) {
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
288
|
+
for (uint16_t version : get_method_versions(hs->ssl->method)) {
|
289
|
+
if (!ssl_supports_version(hs, version)) {
|
290
|
+
continue;
|
291
|
+
}
|
292
|
+
|
293
|
+
// JDK 11, prior to 11.0.2, has a buggy TLS 1.3 implementation which fails
|
294
|
+
// to send SNI when offering 1.3 sessions. Disable TLS 1.3 for such
|
295
|
+
// clients. We apply this logic here rather than |ssl_supports_version| so
|
296
|
+
// the downgrade signal continues to query the true capabilities. (The
|
297
|
+
// workaround is a limitation of the peer's capabilities rather than our
|
298
|
+
// own.)
|
299
|
+
//
|
300
|
+
// See https://bugs.openjdk.java.net/browse/JDK-8211806.
|
301
|
+
if (version == TLS1_3_VERSION && hs->apply_jdk11_workaround) {
|
335
302
|
continue;
|
336
303
|
}
|
337
304
|
|
338
305
|
CBS copy = *peer_versions;
|
339
306
|
while (CBS_len(©) != 0) {
|
340
|
-
uint16_t
|
341
|
-
if (!CBS_get_u16(©, &
|
307
|
+
uint16_t peer_version;
|
308
|
+
if (!CBS_get_u16(©, &peer_version)) {
|
342
309
|
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
343
310
|
*out_alert = SSL_AD_DECODE_ERROR;
|
344
311
|
return false;
|
345
312
|
}
|
346
313
|
|
347
|
-
if (
|
314
|
+
if (peer_version == version) {
|
348
315
|
*out_version = version;
|
349
316
|
return true;
|
350
317
|
}
|
@@ -356,7 +323,7 @@ bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
|
|
356
323
|
return false;
|
357
324
|
}
|
358
325
|
|
359
|
-
|
326
|
+
BSSL_NAMESPACE_END
|
360
327
|
|
361
328
|
using namespace bssl;
|
362
329
|
|
@@ -368,12 +335,40 @@ int SSL_CTX_set_max_proto_version(SSL_CTX *ctx, uint16_t version) {
|
|
368
335
|
return set_max_version(ctx->method, &ctx->conf_max_version, version);
|
369
336
|
}
|
370
337
|
|
338
|
+
uint16_t SSL_CTX_get_min_proto_version(const SSL_CTX *ctx) {
|
339
|
+
return ctx->conf_min_version;
|
340
|
+
}
|
341
|
+
|
342
|
+
uint16_t SSL_CTX_get_max_proto_version(const SSL_CTX *ctx) {
|
343
|
+
return ctx->conf_max_version;
|
344
|
+
}
|
345
|
+
|
371
346
|
int SSL_set_min_proto_version(SSL *ssl, uint16_t version) {
|
372
|
-
|
347
|
+
if (!ssl->config) {
|
348
|
+
return 0;
|
349
|
+
}
|
350
|
+
return set_min_version(ssl->method, &ssl->config->conf_min_version, version);
|
373
351
|
}
|
374
352
|
|
375
353
|
int SSL_set_max_proto_version(SSL *ssl, uint16_t version) {
|
376
|
-
|
354
|
+
if (!ssl->config) {
|
355
|
+
return 0;
|
356
|
+
}
|
357
|
+
return set_max_version(ssl->method, &ssl->config->conf_max_version, version);
|
358
|
+
}
|
359
|
+
|
360
|
+
uint16_t SSL_get_min_proto_version(const SSL *ssl) {
|
361
|
+
if (!ssl->config) {
|
362
|
+
return 0;
|
363
|
+
}
|
364
|
+
return ssl->config->conf_min_version;
|
365
|
+
}
|
366
|
+
|
367
|
+
uint16_t SSL_get_max_proto_version(const SSL *ssl) {
|
368
|
+
if (!ssl->config) {
|
369
|
+
return 0;
|
370
|
+
}
|
371
|
+
return ssl->config->conf_max_version;
|
377
372
|
}
|
378
373
|
|
379
374
|
int SSL_version(const SSL *ssl) {
|