grpc-flamingo 1.11.0 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +1150 -176
- data/etc/roots.pem +40 -196
- data/include/grpc/grpc.h +49 -8
- data/include/grpc/grpc_security.h +123 -2
- data/include/grpc/grpc_security_constants.h +6 -0
- data/include/grpc/impl/codegen/fork.h +4 -4
- data/include/grpc/impl/codegen/grpc_types.h +26 -5
- data/include/grpc/impl/codegen/log.h +112 -0
- data/include/grpc/impl/codegen/port_platform.h +55 -4
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/log.h +2 -80
- data/include/grpc/support/string_util.h +2 -0
- data/include/grpc/support/sync.h +0 -16
- data/src/boringssl/err_data.c +602 -588
- data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
- data/src/core/ext/filters/client_channel/client_channel.h +5 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
- data/src/core/ext/filters/client_channel/method_params.h +4 -0
- data/src/core/ext/filters/client_channel/resolver.h +10 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
- data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
- data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
- data/src/core/ext/filters/client_channel/subchannel.h +11 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
- data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
- data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
- data/src/core/lib/channel/channel_args.cc +28 -0
- data/src/core/lib/channel/channel_args.h +4 -0
- data/src/core/lib/channel/channel_stack.cc +22 -29
- data/src/core/lib/channel/channel_stack.h +2 -2
- data/src/core/lib/channel/channel_stack_builder.cc +0 -3
- data/src/core/lib/channel/channel_stack_builder.h +0 -2
- data/src/core/lib/channel/channel_trace.cc +28 -63
- data/src/core/lib/channel/channel_trace.h +13 -17
- data/src/core/lib/channel/channelz.cc +153 -0
- data/src/core/lib/channel/channelz.h +133 -0
- data/src/core/lib/channel/channelz_registry.cc +145 -0
- data/src/core/lib/channel/channelz_registry.h +120 -0
- data/src/core/lib/channel/connected_channel.cc +8 -1
- data/src/core/lib/channel/handshaker.cc +71 -0
- data/src/core/lib/channel/handshaker.h +4 -0
- data/src/core/lib/debug/stats.h +7 -0
- data/src/core/lib/debug/stats_data.cc +5 -0
- data/src/core/lib/debug/stats_data.h +120 -0
- data/src/core/lib/debug/trace.cc +2 -1
- data/src/core/lib/debug/trace.h +12 -1
- data/src/core/lib/gpr/alloc.h +28 -0
- data/src/core/lib/gpr/arena.cc +38 -45
- data/src/core/lib/gpr/log.cc +8 -2
- data/src/core/lib/gpr/log_android.cc +4 -0
- data/src/core/lib/gpr/log_linux.cc +4 -0
- data/src/core/lib/gpr/log_posix.cc +4 -0
- data/src/core/lib/gpr/log_windows.cc +5 -0
- data/src/core/lib/gpr/string.cc +28 -0
- data/src/core/lib/gpr/string.h +10 -0
- data/src/core/lib/gprpp/abstract.h +5 -2
- data/src/core/lib/gprpp/fork.cc +268 -0
- data/src/core/lib/gprpp/fork.h +88 -0
- data/src/core/lib/gprpp/inlined_vector.h +87 -37
- data/src/core/lib/gprpp/memory.h +12 -0
- data/src/core/lib/gprpp/mutex_lock.h +42 -0
- data/src/core/lib/gprpp/orphanable.h +10 -12
- data/src/core/lib/gprpp/ref_counted.h +10 -12
- data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
- data/src/core/lib/gprpp/thd.h +0 -3
- data/src/core/lib/gprpp/thd_posix.cc +5 -54
- data/src/core/lib/gprpp/thd_windows.cc +0 -7
- data/src/core/lib/http/httpcli_security_connector.cc +1 -3
- data/src/core/lib/iomgr/call_combiner.cc +13 -13
- data/src/core/lib/iomgr/call_combiner.h +84 -1
- data/src/core/lib/iomgr/closure.h +6 -5
- data/src/core/lib/iomgr/combiner.cc +30 -13
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +12 -0
- data/src/core/lib/iomgr/error.h +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
- data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
- data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
- data/src/core/lib/iomgr/ev_posix.cc +88 -24
- data/src/core/lib/iomgr/ev_posix.h +48 -12
- data/src/core/lib/iomgr/exec_ctx.cc +15 -9
- data/src/core/lib/iomgr/exec_ctx.h +48 -20
- data/src/core/lib/iomgr/executor.cc +274 -142
- data/src/core/lib/iomgr/executor.h +82 -16
- data/src/core/lib/iomgr/fork_posix.cc +42 -19
- data/src/core/lib/iomgr/iocp_windows.cc +9 -4
- data/src/core/lib/iomgr/iomgr.cc +2 -0
- data/src/core/lib/iomgr/iomgr.h +5 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +5 -1
- data/src/core/lib/iomgr/polling_entity.cc +11 -2
- data/src/core/lib/iomgr/pollset_custom.cc +2 -2
- data/src/core/lib/iomgr/port.h +51 -1
- data/src/core/lib/iomgr/resolve_address.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
- data/src/core/lib/iomgr/resource_quota.cc +89 -12
- data/src/core/lib/iomgr/resource_quota.h +16 -0
- data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +1 -1
- data/src/core/lib/iomgr/socket_utils.h +9 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
- data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
- data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
- data/src/core/lib/iomgr/socket_windows.cc +33 -0
- data/src/core/lib/iomgr/socket_windows.h +6 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
- data/src/core/lib/iomgr/tcp_custom.cc +11 -11
- data/src/core/lib/iomgr/tcp_posix.cc +49 -36
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
- data/src/core/lib/iomgr/tcp_uv.cc +3 -0
- data/src/core/lib/iomgr/tcp_windows.cc +18 -2
- data/src/core/lib/iomgr/tcp_windows.h +2 -0
- data/src/core/lib/iomgr/timer.h +4 -3
- data/src/core/lib/iomgr/timer_generic.cc +133 -51
- data/src/core/lib/iomgr/timer_manager.cc +12 -14
- data/src/core/lib/iomgr/timer_uv.cc +3 -0
- data/src/core/lib/iomgr/udp_server.cc +106 -52
- data/src/core/lib/iomgr/udp_server.h +8 -4
- data/src/core/lib/json/json.cc +12 -1
- data/src/core/lib/json/json.h +5 -0
- data/src/core/lib/profiling/basic_timers.cc +1 -0
- data/src/core/lib/security/context/security_context.cc +8 -8
- data/src/core/lib/security/context/security_context.h +6 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
- data/src/core/lib/security/credentials/credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
- data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
- data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
- data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
- data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
- data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
- data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
- data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
- data/src/core/lib/security/security_connector/security_connector.cc +79 -32
- data/src/core/lib/security/security_connector/security_connector.h +5 -3
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
- data/src/core/lib/security/transport/security_handshaker.cc +7 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
- data/src/core/lib/security/util/json_util.cc +4 -0
- data/src/core/lib/slice/slice.cc +6 -2
- data/src/core/lib/slice/slice_buffer.cc +27 -7
- data/src/core/lib/slice/slice_hash_table.h +4 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
- data/src/core/lib/surface/call.cc +119 -58
- data/src/core/lib/surface/call.h +7 -0
- data/src/core/lib/surface/channel.cc +50 -18
- data/src/core/lib/surface/channel.h +4 -0
- data/src/core/lib/surface/completion_queue.cc +153 -18
- data/src/core/lib/surface/completion_queue.h +20 -2
- data/src/core/lib/surface/completion_queue_factory.cc +13 -4
- data/src/core/lib/surface/init.cc +7 -8
- data/src/core/lib/surface/init.h +0 -1
- data/src/core/lib/surface/server.cc +16 -0
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/byte_stream.cc +1 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -7
- data/src/core/lib/transport/service_config.cc +2 -2
- data/src/core/lib/transport/service_config.h +3 -3
- data/src/core/lib/transport/transport.cc +22 -10
- data/src/core/lib/transport/transport.h +18 -18
- data/src/core/lib/transport/transport_op_string.cc +1 -8
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
- data/src/core/tsi/fake_transport_security.cc +1 -0
- data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
- data/src/core/tsi/local_transport_security.cc +209 -0
- data/src/core/tsi/local_transport_security.h +51 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +245 -116
- data/src/core/tsi/ssl_types.h +2 -0
- data/src/core/tsi/transport_security.cc +14 -0
- data/src/core/tsi/transport_security.h +2 -0
- data/src/core/tsi/transport_security_interface.h +11 -1
- data/src/ruby/bin/math_client.rb +17 -9
- data/src/ruby/ext/grpc/extconf.rb +1 -26
- data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
- data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +7 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
- data/src/ruby/spec/call_credentials_spec.rb +1 -1
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +1 -1
- data/src/ruby/spec/client_auth_spec.rb +1 -12
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/compression_options_spec.rb +1 -1
- data/src/ruby/spec/error_sanity_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
- data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/service_spec.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +1 -1
- data/src/ruby/spec/server_spec.rb +1 -1
- data/src/ruby/spec/spec_helper.rb +1 -0
- data/src/ruby/spec/support/services.rb +1 -1
- data/src/ruby/spec/time_consts_spec.rb +1 -1
- data/third_party/address_sorting/address_sorting.c +17 -11
- data/third_party/address_sorting/address_sorting_windows.c +43 -3
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
- data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
- data/third_party/boringssl/crypto/bio/fd.c +1 -0
- data/third_party/boringssl/crypto/bio/file.c +2 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
- data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
- data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
- data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
- data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
- data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
- data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
- data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
- data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
- data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
- data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
- data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
- data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
- data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
- data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
- data/third_party/boringssl/crypto/internal.h +65 -2
- data/third_party/boringssl/crypto/mem.c +0 -2
- data/third_party/boringssl/crypto/obj/obj.c +6 -73
- data/third_party/boringssl/crypto/thread_pthread.c +35 -5
- data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
- data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
- data/third_party/boringssl/crypto/x509/x_name.c +13 -0
- data/third_party/boringssl/include/openssl/aead.h +10 -0
- data/third_party/boringssl/include/openssl/asn1.h +2 -3
- data/third_party/boringssl/include/openssl/base.h +5 -14
- data/third_party/boringssl/include/openssl/bio.h +1 -1
- data/third_party/boringssl/include/openssl/bn.h +62 -18
- data/third_party/boringssl/include/openssl/bytestring.h +53 -28
- data/third_party/boringssl/include/openssl/crypto.h +4 -0
- data/third_party/boringssl/include/openssl/ec.h +10 -4
- data/third_party/boringssl/include/openssl/ec_key.h +7 -6
- data/third_party/boringssl/include/openssl/err.h +9 -9
- data/third_party/boringssl/include/openssl/evp.h +1 -1
- data/third_party/boringssl/include/openssl/rsa.h +35 -10
- data/third_party/boringssl/include/openssl/ssl.h +167 -19
- data/third_party/boringssl/include/openssl/ssl3.h +0 -1
- data/third_party/boringssl/include/openssl/stack.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +10 -2
- data/third_party/boringssl/include/openssl/x509.h +4 -0
- data/third_party/boringssl/include/openssl/x509v3.h +1 -0
- data/third_party/boringssl/ssl/d1_both.cc +16 -2
- data/third_party/boringssl/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl/ssl/handoff.cc +285 -0
- data/third_party/boringssl/ssl/handshake.cc +26 -12
- data/third_party/boringssl/ssl/handshake_client.cc +101 -95
- data/third_party/boringssl/ssl/handshake_server.cc +14 -2
- data/third_party/boringssl/ssl/internal.h +132 -79
- data/third_party/boringssl/ssl/s3_both.cc +2 -2
- data/third_party/boringssl/ssl/s3_lib.cc +3 -1
- data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
- data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
- data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
- data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
- data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
- data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
- data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
- data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
- data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
- data/third_party/boringssl/ssl/t1_enc.cc +73 -124
- data/third_party/boringssl/ssl/t1_lib.cc +367 -41
- data/third_party/boringssl/ssl/tls13_both.cc +8 -0
- data/third_party/boringssl/ssl/tls13_client.cc +98 -184
- data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
- data/third_party/boringssl/ssl/tls13_server.cc +91 -137
- data/third_party/boringssl/ssl/tls_method.cc +0 -17
- data/third_party/boringssl/ssl/tls_record.cc +1 -10
- data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
- data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
- data/third_party/boringssl/third_party/fiat/internal.h +32 -20
- data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
- metadata +86 -71
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
- data/src/core/lib/channel/channel_trace_registry.cc +0 -80
- data/src/core/lib/channel/channel_trace_registry.h +0 -43
- data/src/core/lib/gpr/fork.cc +0 -78
- data/src/core/tsi/transport_security_adapter.cc +0 -235
- data/src/core/tsi/transport_security_adapter.h +0 -41
- data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
- data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
- data/src/ruby/pb/test/client.rb +0 -764
- data/src/ruby/pb/test/server.rb +0 -252
- data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
- data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
- data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -43,6 +43,14 @@ const uint8_t kHelloRetryRequest[SSL3_RANDOM_SIZE] = {
|
|
43
43
|
0x8c, 0x5e, 0x07, 0x9e, 0x09, 0xe2, 0xc8, 0xa8, 0x33, 0x9c,
|
44
44
|
};
|
45
45
|
|
46
|
+
// This value was selected by truncating the SHA-256 hash of "Draft TLS 1.3
|
47
|
+
// Downgrade" to 8 bytes:
|
48
|
+
//
|
49
|
+
// echo -n 'Draft TLS 1.3 Downgrade' | sha256sum | head -c 16
|
50
|
+
const uint8_t kDraftDowngradeRandom[8] = {0x95, 0xb9, 0x9f, 0x87,
|
51
|
+
0x22, 0xfe, 0x9b, 0x64};
|
52
|
+
|
53
|
+
|
46
54
|
bool tls13_get_cert_verify_signature_input(
|
47
55
|
SSL_HANDSHAKE *hs, Array<uint8_t> *out,
|
48
56
|
enum ssl_cert_verify_context_t cert_verify_context) {
|
@@ -58,82 +58,62 @@ static enum ssl_hs_wait_t do_read_hello_retry_request(SSL_HANDSHAKE *hs) {
|
|
58
58
|
return ssl_hs_read_message;
|
59
59
|
}
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
!ssl->method->add_change_cipher_spec(ssl)) {
|
69
|
-
return ssl_hs_error;
|
70
|
-
}
|
71
|
-
|
72
|
-
if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
|
73
|
-
return ssl_hs_error;
|
74
|
-
}
|
61
|
+
// Queue up a ChangeCipherSpec for whenever we next send something. This
|
62
|
+
// will be before the second ClientHello. If we offered early data, this was
|
63
|
+
// already done.
|
64
|
+
if (!hs->early_data_offered &&
|
65
|
+
!ssl->method->add_change_cipher_spec(ssl)) {
|
66
|
+
return ssl_hs_error;
|
67
|
+
}
|
75
68
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
!CBS_get_bytes(&body, &server_random, SSL3_RANDOM_SIZE) ||
|
80
|
-
!CBS_get_u8_length_prefixed(&body, &session_id) ||
|
81
|
-
!CBS_get_u16(&body, &cipher_suite) ||
|
82
|
-
!CBS_skip(&body, 1) ||
|
83
|
-
!CBS_get_u16_length_prefixed(&body, &extensions) ||
|
84
|
-
CBS_len(&extensions) == 0 ||
|
85
|
-
CBS_len(&body) != 0) {
|
86
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
87
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
88
|
-
return ssl_hs_error;
|
89
|
-
}
|
69
|
+
if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
|
70
|
+
return ssl_hs_error;
|
71
|
+
}
|
90
72
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
hs->
|
98
|
-
|
99
|
-
|
73
|
+
CBS body = msg.body, extensions, server_random, session_id;
|
74
|
+
uint16_t server_version, cipher_suite;
|
75
|
+
uint8_t compression_method;
|
76
|
+
if (!CBS_get_u16(&body, &server_version) ||
|
77
|
+
!CBS_get_bytes(&body, &server_random, SSL3_RANDOM_SIZE) ||
|
78
|
+
!CBS_get_u8_length_prefixed(&body, &session_id) ||
|
79
|
+
!CBS_mem_equal(&session_id, hs->session_id, hs->session_id_len) ||
|
80
|
+
!CBS_get_u16(&body, &cipher_suite) ||
|
81
|
+
!CBS_get_u8(&body, &compression_method) ||
|
82
|
+
compression_method != 0 ||
|
83
|
+
!CBS_get_u16_length_prefixed(&body, &extensions) ||
|
84
|
+
CBS_len(&extensions) == 0 ||
|
85
|
+
CBS_len(&body) != 0) {
|
86
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
87
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
88
|
+
return ssl_hs_error;
|
89
|
+
}
|
100
90
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
(ssl_is_draft21(ssl->version) &&
|
105
|
-
!CBS_get_u16(&body, &cipher_suite)) ||
|
106
|
-
!CBS_get_u16_length_prefixed(&body, &extensions) ||
|
107
|
-
CBS_len(&body) != 0) {
|
108
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
109
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
110
|
-
return ssl_hs_error;
|
111
|
-
}
|
91
|
+
if (!CBS_mem_equal(&server_random, kHelloRetryRequest, SSL3_RANDOM_SIZE)) {
|
92
|
+
hs->tls13_state = state_read_server_hello;
|
93
|
+
return ssl_hs_ok;
|
112
94
|
}
|
113
95
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
}
|
96
|
+
const SSL_CIPHER *cipher = SSL_get_cipher_by_value(cipher_suite);
|
97
|
+
// Check if the cipher is a TLS 1.3 cipher.
|
98
|
+
if (cipher == NULL ||
|
99
|
+
SSL_CIPHER_get_min_version(cipher) > ssl_protocol_version(ssl) ||
|
100
|
+
SSL_CIPHER_get_max_version(cipher) < ssl_protocol_version(ssl)) {
|
101
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
|
102
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
103
|
+
return ssl_hs_error;
|
104
|
+
}
|
124
105
|
|
125
|
-
|
106
|
+
hs->new_cipher = cipher;
|
126
107
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
}
|
108
|
+
if (!hs->transcript.InitHash(ssl_protocol_version(ssl), hs->new_cipher) ||
|
109
|
+
!hs->transcript.UpdateForHelloRetryRequest()) {
|
110
|
+
return ssl_hs_error;
|
131
111
|
}
|
132
112
|
|
133
113
|
|
134
114
|
bool have_cookie, have_key_share, have_supported_versions;
|
135
115
|
CBS cookie, key_share, supported_versions;
|
136
|
-
|
116
|
+
SSL_EXTENSION_TYPE ext_types[] = {
|
137
117
|
{TLSEXT_TYPE_key_share, &have_key_share, &key_share},
|
138
118
|
{TLSEXT_TYPE_cookie, &have_cookie, &cookie},
|
139
119
|
{TLSEXT_TYPE_supported_versions, &have_supported_versions,
|
@@ -148,11 +128,6 @@ static enum ssl_hs_wait_t do_read_hello_retry_request(SSL_HANDSHAKE *hs) {
|
|
148
128
|
return ssl_hs_error;
|
149
129
|
}
|
150
130
|
|
151
|
-
if (!ssl_is_draft22(ssl->version) && have_supported_versions) {
|
152
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
|
153
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
|
154
|
-
return ssl_hs_error;
|
155
|
-
}
|
156
131
|
if (!have_cookie && !have_key_share) {
|
157
132
|
OPENSSL_PUT_ERROR(SSL, SSL_R_EMPTY_HELLO_RETRY_REQUEST);
|
158
133
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
@@ -250,11 +225,11 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
250
225
|
uint8_t compression_method;
|
251
226
|
if (!CBS_get_u16(&body, &server_version) ||
|
252
227
|
!CBS_get_bytes(&body, &server_random, SSL3_RANDOM_SIZE) ||
|
253
|
-
(
|
254
|
-
|
228
|
+
!CBS_get_u8_length_prefixed(&body, &session_id) ||
|
229
|
+
!CBS_mem_equal(&session_id, hs->session_id, hs->session_id_len) ||
|
255
230
|
!CBS_get_u16(&body, &cipher_suite) ||
|
256
|
-
(
|
257
|
-
|
231
|
+
!CBS_get_u8(&body, &compression_method) ||
|
232
|
+
compression_method != 0 ||
|
258
233
|
!CBS_get_u16_length_prefixed(&body, &extensions) ||
|
259
234
|
CBS_len(&body) != 0) {
|
260
235
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
@@ -262,18 +237,14 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
262
237
|
return ssl_hs_error;
|
263
238
|
}
|
264
239
|
|
265
|
-
|
266
|
-
? TLS1_2_VERSION
|
267
|
-
: ssl->version;
|
268
|
-
if (server_version != expected_version) {
|
240
|
+
if (server_version != TLS1_2_VERSION) {
|
269
241
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
270
242
|
OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_VERSION_NUMBER);
|
271
243
|
return ssl_hs_error;
|
272
244
|
}
|
273
245
|
|
274
246
|
// Forbid a second HelloRetryRequest.
|
275
|
-
if (
|
276
|
-
CBS_mem_equal(&server_random, kHelloRetryRequest, SSL3_RANDOM_SIZE)) {
|
247
|
+
if (CBS_mem_equal(&server_random, kHelloRetryRequest, SSL3_RANDOM_SIZE)) {
|
277
248
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
|
278
249
|
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
|
279
250
|
return ssl_hs_error;
|
@@ -293,8 +264,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
293
264
|
}
|
294
265
|
|
295
266
|
// Check that the cipher matches the one in the HelloRetryRequest.
|
296
|
-
if (
|
297
|
-
hs->received_hello_retry_request &&
|
267
|
+
if (hs->received_hello_retry_request &&
|
298
268
|
hs->new_cipher != cipher) {
|
299
269
|
OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
|
300
270
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
@@ -305,7 +275,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
305
275
|
bool have_key_share = false, have_pre_shared_key = false,
|
306
276
|
have_supported_versions = false;
|
307
277
|
CBS key_share, pre_shared_key, supported_versions;
|
308
|
-
|
278
|
+
SSL_EXTENSION_TYPE ext_types[] = {
|
309
279
|
{TLSEXT_TYPE_key_share, &have_key_share, &key_share},
|
310
280
|
{TLSEXT_TYPE_pre_shared_key, &have_pre_shared_key, &pre_shared_key},
|
311
281
|
{TLSEXT_TYPE_supported_versions, &have_supported_versions,
|
@@ -320,14 +290,6 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
320
290
|
return ssl_hs_error;
|
321
291
|
}
|
322
292
|
|
323
|
-
// supported_versions is parsed in handshake_client to select the experimental
|
324
|
-
// TLS 1.3 version.
|
325
|
-
if (have_supported_versions && !ssl_is_resumption_experiment(ssl->version)) {
|
326
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
|
327
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
|
328
|
-
return ssl_hs_error;
|
329
|
-
}
|
330
|
-
|
331
293
|
alert = SSL_AD_DECODE_ERROR;
|
332
294
|
if (have_pre_shared_key) {
|
333
295
|
if (ssl->session == NULL) {
|
@@ -420,14 +382,6 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
420
382
|
}
|
421
383
|
|
422
384
|
if (!hs->early_data_offered) {
|
423
|
-
// Earlier versions of the resumption experiment added ChangeCipherSpec just
|
424
|
-
// before the Finished flight.
|
425
|
-
if (ssl_is_resumption_client_ccs_experiment(ssl->version) &&
|
426
|
-
!ssl_is_draft22(ssl->version) &&
|
427
|
-
!ssl->method->add_change_cipher_spec(ssl)) {
|
428
|
-
return ssl_hs_error;
|
429
|
-
}
|
430
|
-
|
431
385
|
// If not sending early data, set client traffic keys now so that alerts are
|
432
386
|
// encrypted.
|
433
387
|
if (!tls13_set_traffic_key(ssl, evp_aead_seal, hs->client_handshake_secret,
|
@@ -473,7 +427,7 @@ static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs) {
|
|
473
427
|
hs->new_session->early_alpn_len = ssl->s3->alpn_selected.size();
|
474
428
|
}
|
475
429
|
|
476
|
-
if (ssl->early_data_accepted) {
|
430
|
+
if (ssl->s3->early_data_accepted) {
|
477
431
|
if (hs->early_session->cipher != hs->new_session->cipher ||
|
478
432
|
MakeConstSpan(hs->early_session->early_alpn,
|
479
433
|
hs->early_session->early_alpn_len) !=
|
@@ -481,7 +435,8 @@ static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs) {
|
|
481
435
|
OPENSSL_PUT_ERROR(SSL, SSL_R_ALPN_MISMATCH_ON_EARLY_DATA);
|
482
436
|
return ssl_hs_error;
|
483
437
|
}
|
484
|
-
if (ssl->s3->tlsext_channel_id_valid || hs->received_custom_extension
|
438
|
+
if (ssl->s3->tlsext_channel_id_valid || hs->received_custom_extension ||
|
439
|
+
ssl->token_binding_negotiated) {
|
485
440
|
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION_ON_EARLY_DATA);
|
486
441
|
return ssl_hs_error;
|
487
442
|
}
|
@@ -493,7 +448,7 @@ static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs) {
|
|
493
448
|
|
494
449
|
ssl->method->next_message(ssl);
|
495
450
|
hs->tls13_state = state_read_certificate_request;
|
496
|
-
if (hs->in_early_data && !ssl->early_data_accepted) {
|
451
|
+
if (hs->in_early_data && !ssl->s3->early_data_accepted) {
|
497
452
|
return ssl_hs_early_data_rejected;
|
498
453
|
}
|
499
454
|
return ssl_hs_ok;
|
@@ -519,75 +474,45 @@ static enum ssl_hs_wait_t do_read_certificate_request(SSL_HANDSHAKE *hs) {
|
|
519
474
|
}
|
520
475
|
|
521
476
|
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
};
|
529
|
-
|
530
|
-
CBS body = msg.body, context, extensions, supported_signature_algorithms;
|
531
|
-
uint8_t alert = SSL_AD_DECODE_ERROR;
|
532
|
-
if (!CBS_get_u8_length_prefixed(&body, &context) ||
|
533
|
-
// The request context is always empty during the handshake.
|
534
|
-
CBS_len(&context) != 0 ||
|
535
|
-
!CBS_get_u16_length_prefixed(&body, &extensions) ||
|
536
|
-
CBS_len(&body) != 0 ||
|
537
|
-
!ssl_parse_extensions(&extensions, &alert, ext_types,
|
538
|
-
OPENSSL_ARRAY_SIZE(ext_types),
|
539
|
-
1 /* accept unknown */) ||
|
540
|
-
(have_ca && CBS_len(&ca) == 0) ||
|
541
|
-
!have_sigalgs ||
|
542
|
-
!CBS_get_u16_length_prefixed(&sigalgs,
|
543
|
-
&supported_signature_algorithms) ||
|
544
|
-
CBS_len(&supported_signature_algorithms) == 0 ||
|
545
|
-
!tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
|
546
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
547
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
548
|
-
return ssl_hs_error;
|
549
|
-
}
|
477
|
+
bool have_sigalgs = false, have_ca = false;
|
478
|
+
CBS sigalgs, ca;
|
479
|
+
const SSL_EXTENSION_TYPE ext_types[] = {
|
480
|
+
{TLSEXT_TYPE_signature_algorithms, &have_sigalgs, &sigalgs},
|
481
|
+
{TLSEXT_TYPE_certificate_authorities, &have_ca, &ca},
|
482
|
+
};
|
550
483
|
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
CBS_len(&supported_signature_algorithms) == 0 ||
|
572
|
-
!tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
|
573
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
574
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
575
|
-
return ssl_hs_error;
|
576
|
-
}
|
484
|
+
CBS body = msg.body, context, extensions, supported_signature_algorithms;
|
485
|
+
uint8_t alert = SSL_AD_DECODE_ERROR;
|
486
|
+
if (!CBS_get_u8_length_prefixed(&body, &context) ||
|
487
|
+
// The request context is always empty during the handshake.
|
488
|
+
CBS_len(&context) != 0 ||
|
489
|
+
!CBS_get_u16_length_prefixed(&body, &extensions) ||
|
490
|
+
CBS_len(&body) != 0 ||
|
491
|
+
!ssl_parse_extensions(&extensions, &alert, ext_types,
|
492
|
+
OPENSSL_ARRAY_SIZE(ext_types),
|
493
|
+
1 /* accept unknown */) ||
|
494
|
+
(have_ca && CBS_len(&ca) == 0) ||
|
495
|
+
!have_sigalgs ||
|
496
|
+
!CBS_get_u16_length_prefixed(&sigalgs,
|
497
|
+
&supported_signature_algorithms) ||
|
498
|
+
CBS_len(&supported_signature_algorithms) == 0 ||
|
499
|
+
!tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
|
500
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
501
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
502
|
+
return ssl_hs_error;
|
503
|
+
}
|
577
504
|
|
578
|
-
|
579
|
-
hs->ca_names = ssl_parse_client_CA_list(ssl, &alert, &
|
505
|
+
if (have_ca) {
|
506
|
+
hs->ca_names = ssl_parse_client_CA_list(ssl, &alert, &ca);
|
580
507
|
if (!hs->ca_names) {
|
581
508
|
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
582
509
|
return ssl_hs_error;
|
583
510
|
}
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
590
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
511
|
+
} else {
|
512
|
+
hs->ca_names.reset(sk_CRYPTO_BUFFER_new_null());
|
513
|
+
if (!hs->ca_names) {
|
514
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
515
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
591
516
|
return ssl_hs_error;
|
592
517
|
}
|
593
518
|
}
|
@@ -672,21 +597,14 @@ static enum ssl_hs_wait_t do_read_server_finished(SSL_HANDSHAKE *hs) {
|
|
672
597
|
static enum ssl_hs_wait_t do_send_end_of_early_data(SSL_HANDSHAKE *hs) {
|
673
598
|
SSL *const ssl = hs->ssl;
|
674
599
|
|
675
|
-
if (ssl->early_data_accepted) {
|
600
|
+
if (ssl->s3->early_data_accepted) {
|
676
601
|
hs->can_early_write = false;
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
return ssl_hs_error;
|
684
|
-
}
|
685
|
-
} else {
|
686
|
-
if (!ssl->method->add_alert(ssl, SSL3_AL_WARNING,
|
687
|
-
TLS1_AD_END_OF_EARLY_DATA)) {
|
688
|
-
return ssl_hs_error;
|
689
|
-
}
|
602
|
+
ScopedCBB cbb;
|
603
|
+
CBB body;
|
604
|
+
if (!ssl->method->init_message(ssl, cbb.get(), &body,
|
605
|
+
SSL3_MT_END_OF_EARLY_DATA) ||
|
606
|
+
!ssl_add_message_cbb(ssl, cbb.get())) {
|
607
|
+
return ssl_hs_error;
|
690
608
|
}
|
691
609
|
}
|
692
610
|
|
@@ -913,8 +831,7 @@ int tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
|
|
913
831
|
CBS body = msg.body, ticket_nonce, ticket, extensions;
|
914
832
|
if (!CBS_get_u32(&body, &server_timeout) ||
|
915
833
|
!CBS_get_u32(&body, &session->ticket_age_add) ||
|
916
|
-
(
|
917
|
-
!CBS_get_u8_length_prefixed(&body, &ticket_nonce)) ||
|
834
|
+
!CBS_get_u8_length_prefixed(&body, &ticket_nonce) ||
|
918
835
|
!CBS_get_u16_length_prefixed(&body, &ticket) ||
|
919
836
|
!CBS_stow(&ticket, &session->tlsext_tick, &session->tlsext_ticklen) ||
|
920
837
|
!CBS_get_u16_length_prefixed(&body, &extensions) ||
|
@@ -937,11 +854,8 @@ int tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
|
|
937
854
|
// Parse out the extensions.
|
938
855
|
bool have_early_data_info = false;
|
939
856
|
CBS early_data_info;
|
940
|
-
uint16_t ext_id = ssl_is_draft21(ssl->version)
|
941
|
-
? TLSEXT_TYPE_early_data
|
942
|
-
: TLSEXT_TYPE_ticket_early_data_info;
|
943
857
|
const SSL_EXTENSION_TYPE ext_types[] = {
|
944
|
-
{
|
858
|
+
{TLSEXT_TYPE_early_data, &have_early_data_info, &early_data_info},
|
945
859
|
};
|
946
860
|
|
947
861
|
uint8_t alert = SSL_AD_DECODE_ERROR;
|
@@ -66,13 +66,11 @@ int tls13_init_early_key_schedule(SSL_HANDSHAKE *hs, const uint8_t *psk,
|
|
66
66
|
psk_len, hs->secret, hs->hash_len);
|
67
67
|
}
|
68
68
|
|
69
|
-
static int hkdf_expand_label(uint8_t *out,
|
70
|
-
const
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
const char *kTLS13LabelVersion =
|
75
|
-
ssl_is_draft21(version) ? "tls13 " : "TLS 1.3, ";
|
69
|
+
static int hkdf_expand_label(uint8_t *out, const EVP_MD *digest,
|
70
|
+
const uint8_t *secret, size_t secret_len,
|
71
|
+
const char *label, size_t label_len,
|
72
|
+
const uint8_t *hash, size_t hash_len, size_t len) {
|
73
|
+
static const char kTLS13LabelVersion[] = "tls13 ";
|
76
74
|
|
77
75
|
ScopedCBB cbb;
|
78
76
|
CBB child;
|
@@ -84,7 +82,7 @@ static int hkdf_expand_label(uint8_t *out, uint16_t version,
|
|
84
82
|
!CBB_add_u8_length_prefixed(cbb.get(), &child) ||
|
85
83
|
!CBB_add_bytes(&child, (const uint8_t *)kTLS13LabelVersion,
|
86
84
|
strlen(kTLS13LabelVersion)) ||
|
87
|
-
!CBB_add_bytes(&child, label, label_len) ||
|
85
|
+
!CBB_add_bytes(&child, (const uint8_t *)label, label_len) ||
|
88
86
|
!CBB_add_u8_length_prefixed(cbb.get(), &child) ||
|
89
87
|
!CBB_add_bytes(&child, hash, hash_len) ||
|
90
88
|
!CBB_finish(cbb.get(), &hkdf_label, &hkdf_label_len)) {
|
@@ -101,24 +99,18 @@ static const char kTLS13LabelDerived[] = "derived";
|
|
101
99
|
|
102
100
|
int tls13_advance_key_schedule(SSL_HANDSHAKE *hs, const uint8_t *in,
|
103
101
|
size_t len) {
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
if (!EVP_Digest(nullptr, 0, derive_context, &derive_context_len,
|
111
|
-
hs->transcript.Digest(), nullptr)) {
|
112
|
-
return 0;
|
113
|
-
}
|
102
|
+
uint8_t derive_context[EVP_MAX_MD_SIZE];
|
103
|
+
unsigned derive_context_len;
|
104
|
+
if (!EVP_Digest(nullptr, 0, derive_context, &derive_context_len,
|
105
|
+
hs->transcript.Digest(), nullptr)) {
|
106
|
+
return 0;
|
107
|
+
}
|
114
108
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
return 0;
|
121
|
-
}
|
109
|
+
if (!hkdf_expand_label(hs->secret, hs->transcript.Digest(), hs->secret,
|
110
|
+
hs->hash_len, kTLS13LabelDerived,
|
111
|
+
strlen(kTLS13LabelDerived), derive_context,
|
112
|
+
derive_context_len, hs->hash_len)) {
|
113
|
+
return 0;
|
122
114
|
}
|
123
115
|
|
124
116
|
return HKDF_extract(hs->secret, &hs->hash_len, hs->transcript.Digest(), in,
|
@@ -129,17 +121,16 @@ int tls13_advance_key_schedule(SSL_HANDSHAKE *hs, const uint8_t *in,
|
|
129
121
|
// with the given label and the current base secret and most recently-saved
|
130
122
|
// handshake context. It returns one on success and zero on error.
|
131
123
|
static int derive_secret(SSL_HANDSHAKE *hs, uint8_t *out, size_t len,
|
132
|
-
const
|
124
|
+
const char *label, size_t label_len) {
|
133
125
|
uint8_t context_hash[EVP_MAX_MD_SIZE];
|
134
126
|
size_t context_hash_len;
|
135
127
|
if (!hs->transcript.GetHash(context_hash, &context_hash_len)) {
|
136
128
|
return 0;
|
137
129
|
}
|
138
130
|
|
139
|
-
return hkdf_expand_label(out,
|
140
|
-
hs->
|
141
|
-
|
142
|
-
len);
|
131
|
+
return hkdf_expand_label(out, hs->transcript.Digest(), hs->secret,
|
132
|
+
hs->hash_len, label, label_len, context_hash,
|
133
|
+
context_hash_len, len);
|
143
134
|
}
|
144
135
|
|
145
136
|
int tls13_set_traffic_key(SSL *ssl, enum evp_aead_direction_t direction,
|
@@ -166,18 +157,16 @@ int tls13_set_traffic_key(SSL *ssl, enum evp_aead_direction_t direction,
|
|
166
157
|
// Derive the key.
|
167
158
|
size_t key_len = EVP_AEAD_key_length(aead);
|
168
159
|
uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
|
169
|
-
if (!hkdf_expand_label(key,
|
170
|
-
|
171
|
-
key_len)) {
|
160
|
+
if (!hkdf_expand_label(key, digest, traffic_secret, traffic_secret_len, "key",
|
161
|
+
3, NULL, 0, key_len)) {
|
172
162
|
return 0;
|
173
163
|
}
|
174
164
|
|
175
165
|
// Derive the IV.
|
176
166
|
size_t iv_len = EVP_AEAD_nonce_length(aead);
|
177
167
|
uint8_t iv[EVP_AEAD_MAX_NONCE_LENGTH];
|
178
|
-
if (!hkdf_expand_label(iv,
|
179
|
-
|
180
|
-
iv_len)) {
|
168
|
+
if (!hkdf_expand_label(iv, digest, traffic_secret, traffic_secret_len, "iv",
|
169
|
+
2, NULL, 0, iv_len)) {
|
181
170
|
return 0;
|
182
171
|
}
|
183
172
|
|
@@ -213,63 +202,42 @@ int tls13_set_traffic_key(SSL *ssl, enum evp_aead_direction_t direction,
|
|
213
202
|
return 1;
|
214
203
|
}
|
215
204
|
|
216
|
-
|
217
|
-
static const char
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
static const char kTLS13LabelClientHandshakeTraffic[] =
|
222
|
-
|
223
|
-
static const char
|
224
|
-
|
225
|
-
static const char kTLS13LabelClientApplicationTraffic[] =
|
226
|
-
"client application traffic secret";
|
227
|
-
static const char kTLS13LabelServerApplicationTraffic[] =
|
228
|
-
"server application traffic secret";
|
229
|
-
|
230
|
-
static const char kTLS13Draft21LabelExporter[] = "exp master";
|
231
|
-
static const char kTLS13Draft21LabelEarlyExporter[] = "e exp master";
|
232
|
-
|
233
|
-
static const char kTLS13Draft21LabelClientEarlyTraffic[] = "c e traffic";
|
234
|
-
static const char kTLS13Draft21LabelClientHandshakeTraffic[] = "c hs traffic";
|
235
|
-
static const char kTLS13Draft21LabelServerHandshakeTraffic[] = "s hs traffic";
|
236
|
-
static const char kTLS13Draft21LabelClientApplicationTraffic[] = "c ap traffic";
|
237
|
-
static const char kTLS13Draft21LabelServerApplicationTraffic[] = "s ap traffic";
|
205
|
+
|
206
|
+
static const char kTLS13LabelExporter[] = "exp master";
|
207
|
+
static const char kTLS13LabelEarlyExporter[] = "e exp master";
|
208
|
+
|
209
|
+
static const char kTLS13LabelClientEarlyTraffic[] = "c e traffic";
|
210
|
+
static const char kTLS13LabelClientHandshakeTraffic[] = "c hs traffic";
|
211
|
+
static const char kTLS13LabelServerHandshakeTraffic[] = "s hs traffic";
|
212
|
+
static const char kTLS13LabelClientApplicationTraffic[] = "c ap traffic";
|
213
|
+
static const char kTLS13LabelServerApplicationTraffic[] = "s ap traffic";
|
238
214
|
|
239
215
|
int tls13_derive_early_secrets(SSL_HANDSHAKE *hs) {
|
240
216
|
SSL *const ssl = hs->ssl;
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
hs->early_traffic_secret, hs->hash_len) &&
|
254
|
-
derive_secret(hs, ssl->s3->early_exporter_secret, hs->hash_len,
|
255
|
-
(const uint8_t *)early_exporter_label,
|
256
|
-
strlen(early_exporter_label));
|
217
|
+
if (!derive_secret(hs, hs->early_traffic_secret, hs->hash_len,
|
218
|
+
kTLS13LabelClientEarlyTraffic,
|
219
|
+
strlen(kTLS13LabelClientEarlyTraffic)) ||
|
220
|
+
!ssl_log_secret(ssl, "CLIENT_EARLY_TRAFFIC_SECRET",
|
221
|
+
hs->early_traffic_secret, hs->hash_len) ||
|
222
|
+
!derive_secret(hs, ssl->s3->early_exporter_secret, hs->hash_len,
|
223
|
+
kTLS13LabelEarlyExporter,
|
224
|
+
strlen(kTLS13LabelEarlyExporter))) {
|
225
|
+
return 0;
|
226
|
+
}
|
227
|
+
ssl->s3->early_exporter_secret_len = hs->hash_len;
|
228
|
+
return 1;
|
257
229
|
}
|
258
230
|
|
259
231
|
int tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs) {
|
260
232
|
SSL *const ssl = hs->ssl;
|
261
|
-
const char *client_label = ssl_is_draft21(ssl->version)
|
262
|
-
? kTLS13Draft21LabelClientHandshakeTraffic
|
263
|
-
: kTLS13LabelClientHandshakeTraffic;
|
264
|
-
const char *server_label = ssl_is_draft21(ssl->version)
|
265
|
-
? kTLS13Draft21LabelServerHandshakeTraffic
|
266
|
-
: kTLS13LabelServerHandshakeTraffic;
|
267
233
|
return derive_secret(hs, hs->client_handshake_secret, hs->hash_len,
|
268
|
-
|
234
|
+
kTLS13LabelClientHandshakeTraffic,
|
235
|
+
strlen(kTLS13LabelClientHandshakeTraffic)) &&
|
269
236
|
ssl_log_secret(ssl, "CLIENT_HANDSHAKE_TRAFFIC_SECRET",
|
270
237
|
hs->client_handshake_secret, hs->hash_len) &&
|
271
238
|
derive_secret(hs, hs->server_handshake_secret, hs->hash_len,
|
272
|
-
|
239
|
+
kTLS13LabelServerHandshakeTraffic,
|
240
|
+
strlen(kTLS13LabelServerHandshakeTraffic)) &&
|
273
241
|
ssl_log_secret(ssl, "SERVER_HANDSHAKE_TRAFFIC_SECRET",
|
274
242
|
hs->server_handshake_secret, hs->hash_len);
|
275
243
|
}
|
@@ -277,33 +245,23 @@ int tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs) {
|
|
277
245
|
int tls13_derive_application_secrets(SSL_HANDSHAKE *hs) {
|
278
246
|
SSL *const ssl = hs->ssl;
|
279
247
|
ssl->s3->exporter_secret_len = hs->hash_len;
|
280
|
-
const char *client_label = ssl_is_draft21(ssl->version)
|
281
|
-
? kTLS13Draft21LabelClientApplicationTraffic
|
282
|
-
: kTLS13LabelClientApplicationTraffic;
|
283
|
-
const char *server_label = ssl_is_draft21(ssl->version)
|
284
|
-
? kTLS13Draft21LabelServerApplicationTraffic
|
285
|
-
: kTLS13LabelServerApplicationTraffic;
|
286
|
-
const char *exporter_label = ssl_is_draft21(ssl->version)
|
287
|
-
? kTLS13Draft21LabelExporter
|
288
|
-
: kTLS13LabelExporter;
|
289
248
|
return derive_secret(hs, hs->client_traffic_secret_0, hs->hash_len,
|
290
|
-
|
249
|
+
kTLS13LabelClientApplicationTraffic,
|
250
|
+
strlen(kTLS13LabelClientApplicationTraffic)) &&
|
291
251
|
ssl_log_secret(ssl, "CLIENT_TRAFFIC_SECRET_0",
|
292
252
|
hs->client_traffic_secret_0, hs->hash_len) &&
|
293
253
|
derive_secret(hs, hs->server_traffic_secret_0, hs->hash_len,
|
294
|
-
|
254
|
+
kTLS13LabelServerApplicationTraffic,
|
255
|
+
strlen(kTLS13LabelServerApplicationTraffic)) &&
|
295
256
|
ssl_log_secret(ssl, "SERVER_TRAFFIC_SECRET_0",
|
296
257
|
hs->server_traffic_secret_0, hs->hash_len) &&
|
297
258
|
derive_secret(hs, ssl->s3->exporter_secret, hs->hash_len,
|
298
|
-
(
|
299
|
-
strlen(exporter_label)) &&
|
259
|
+
kTLS13LabelExporter, strlen(kTLS13LabelExporter)) &&
|
300
260
|
ssl_log_secret(ssl, "EXPORTER_SECRET", ssl->s3->exporter_secret,
|
301
261
|
hs->hash_len);
|
302
262
|
}
|
303
263
|
|
304
|
-
static const char kTLS13LabelApplicationTraffic[] =
|
305
|
-
"application traffic secret";
|
306
|
-
static const char kTLS13Draft21LabelApplicationTraffic[] = "traffic upd";
|
264
|
+
static const char kTLS13LabelApplicationTraffic[] = "traffic upd";
|
307
265
|
|
308
266
|
int tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction) {
|
309
267
|
uint8_t *secret;
|
@@ -316,35 +274,27 @@ int tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction) {
|
|
316
274
|
secret_len = ssl->s3->write_traffic_secret_len;
|
317
275
|
}
|
318
276
|
|
319
|
-
const char *traffic_label = ssl_is_draft21(ssl->version)
|
320
|
-
? kTLS13Draft21LabelApplicationTraffic
|
321
|
-
: kTLS13LabelApplicationTraffic;
|
322
|
-
|
323
277
|
const EVP_MD *digest = ssl_session_get_digest(SSL_get_session(ssl));
|
324
|
-
if (!hkdf_expand_label(
|
325
|
-
|
326
|
-
|
278
|
+
if (!hkdf_expand_label(
|
279
|
+
secret, digest, secret, secret_len, kTLS13LabelApplicationTraffic,
|
280
|
+
strlen(kTLS13LabelApplicationTraffic), NULL, 0, secret_len)) {
|
327
281
|
return 0;
|
328
282
|
}
|
329
283
|
|
330
284
|
return tls13_set_traffic_key(ssl, direction, secret, secret_len);
|
331
285
|
}
|
332
286
|
|
333
|
-
static const char kTLS13LabelResumption[] = "
|
334
|
-
static const char kTLS13Draft21LabelResumption[] = "res master";
|
287
|
+
static const char kTLS13LabelResumption[] = "res master";
|
335
288
|
|
336
289
|
int tls13_derive_resumption_secret(SSL_HANDSHAKE *hs) {
|
337
290
|
if (hs->hash_len > SSL_MAX_MASTER_KEY_LENGTH) {
|
338
291
|
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
339
292
|
return 0;
|
340
293
|
}
|
341
|
-
const char *resumption_label = ssl_is_draft21(hs->ssl->version)
|
342
|
-
? kTLS13Draft21LabelResumption
|
343
|
-
: kTLS13LabelResumption;
|
344
294
|
hs->new_session->master_key_length = hs->hash_len;
|
345
|
-
return derive_secret(
|
346
|
-
|
347
|
-
|
295
|
+
return derive_secret(hs, hs->new_session->master_key,
|
296
|
+
hs->new_session->master_key_length,
|
297
|
+
kTLS13LabelResumption, strlen(kTLS13LabelResumption));
|
348
298
|
}
|
349
299
|
|
350
300
|
static const char kTLS13LabelFinished[] = "finished";
|
@@ -357,8 +307,7 @@ static int tls13_verify_data(const EVP_MD *digest, uint16_t version,
|
|
357
307
|
uint8_t *context, size_t context_len) {
|
358
308
|
uint8_t key[EVP_MAX_MD_SIZE];
|
359
309
|
unsigned len;
|
360
|
-
if (!hkdf_expand_label(key,
|
361
|
-
(const uint8_t *)kTLS13LabelFinished,
|
310
|
+
if (!hkdf_expand_label(key, digest, secret, hash_len, kTLS13LabelFinished,
|
362
311
|
strlen(kTLS13LabelFinished), NULL, 0, hash_len) ||
|
363
312
|
HMAC(digest, key, hash_len, context, context_len, out, &len) == NULL) {
|
364
313
|
return 0;
|
@@ -390,37 +339,23 @@ int tls13_finished_mac(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len,
|
|
390
339
|
static const char kTLS13LabelResumptionPSK[] = "resumption";
|
391
340
|
|
392
341
|
bool tls13_derive_session_psk(SSL_SESSION *session, Span<const uint8_t> nonce) {
|
393
|
-
if (!ssl_is_draft21(session->ssl_version)) {
|
394
|
-
return true;
|
395
|
-
}
|
396
|
-
|
397
342
|
const EVP_MD *digest = ssl_session_get_digest(session);
|
398
|
-
return hkdf_expand_label(session->master_key, session->
|
399
|
-
session->
|
400
|
-
(const uint8_t *)kTLS13LabelResumptionPSK,
|
343
|
+
return hkdf_expand_label(session->master_key, digest, session->master_key,
|
344
|
+
session->master_key_length, kTLS13LabelResumptionPSK,
|
401
345
|
strlen(kTLS13LabelResumptionPSK), nonce.data(),
|
402
346
|
nonce.size(), session->master_key_length);
|
403
347
|
}
|
404
348
|
|
405
349
|
static const char kTLS13LabelExportKeying[] = "exporter";
|
406
350
|
|
407
|
-
int tls13_export_keying_material(SSL *ssl, uint8_t
|
408
|
-
const
|
409
|
-
const
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
context_len = context_in_len;
|
416
|
-
}
|
417
|
-
|
418
|
-
if (!ssl_is_draft21(ssl->version)) {
|
419
|
-
const EVP_MD *digest = ssl_session_get_digest(SSL_get_session(ssl));
|
420
|
-
return hkdf_expand_label(
|
421
|
-
out, ssl->version, digest, ssl->s3->exporter_secret,
|
422
|
-
ssl->s3->exporter_secret_len, (const uint8_t *)label, label_len,
|
423
|
-
context, context_len, out_len);
|
351
|
+
int tls13_export_keying_material(SSL *ssl, Span<uint8_t> out,
|
352
|
+
Span<const uint8_t> secret,
|
353
|
+
Span<const char> label,
|
354
|
+
Span<const uint8_t> context) {
|
355
|
+
if (secret.empty()) {
|
356
|
+
assert(0);
|
357
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
358
|
+
return 0;
|
424
359
|
}
|
425
360
|
|
426
361
|
const EVP_MD *digest = ssl_session_get_digest(SSL_get_session(ssl));
|
@@ -431,22 +366,20 @@ int tls13_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
|
|
431
366
|
unsigned hash_len;
|
432
367
|
unsigned export_context_len;
|
433
368
|
unsigned derived_secret_len = EVP_MD_size(digest);
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
strlen(kTLS13LabelExportKeying), hash, hash_len, out_len);
|
369
|
+
return EVP_Digest(context.data(), context.size(), hash, &hash_len, digest,
|
370
|
+
nullptr) &&
|
371
|
+
EVP_Digest(nullptr, 0, export_context, &export_context_len, digest,
|
372
|
+
nullptr) &&
|
373
|
+
hkdf_expand_label(derived_secret, digest, secret.data(), secret.size(),
|
374
|
+
label.data(), label.size(), export_context,
|
375
|
+
export_context_len, derived_secret_len) &&
|
376
|
+
hkdf_expand_label(out.data(), digest, derived_secret,
|
377
|
+
derived_secret_len, kTLS13LabelExportKeying,
|
378
|
+
strlen(kTLS13LabelExportKeying), hash, hash_len,
|
379
|
+
out.size());
|
446
380
|
}
|
447
381
|
|
448
|
-
static const char kTLS13LabelPSKBinder[] = "
|
449
|
-
static const char kTLS13Draft21LabelPSKBinder[] = "res binder";
|
382
|
+
static const char kTLS13LabelPSKBinder[] = "res binder";
|
450
383
|
|
451
384
|
static int tls13_psk_binder(uint8_t *out, uint16_t version,
|
452
385
|
const EVP_MD *digest, uint8_t *psk, size_t psk_len,
|
@@ -464,14 +397,11 @@ static int tls13_psk_binder(uint8_t *out, uint16_t version,
|
|
464
397
|
NULL, 0)) {
|
465
398
|
return 0;
|
466
399
|
}
|
467
|
-
const char *binder_label = ssl_is_draft21(version)
|
468
|
-
? kTLS13Draft21LabelPSKBinder
|
469
|
-
: kTLS13LabelPSKBinder;
|
470
400
|
|
471
401
|
uint8_t binder_key[EVP_MAX_MD_SIZE] = {0};
|
472
402
|
size_t len;
|
473
|
-
if (!hkdf_expand_label(binder_key,
|
474
|
-
|
403
|
+
if (!hkdf_expand_label(binder_key, digest, early_secret, hash_len,
|
404
|
+
kTLS13LabelPSKBinder, strlen(kTLS13LabelPSKBinder),
|
475
405
|
binder_context, binder_context_len, hash_len) ||
|
476
406
|
!tls13_verify_data(digest, version, out, &len, binder_key, hash_len,
|
477
407
|
context, context_len)) {
|