grpc 1.37.1 → 1.38.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 +64 -58
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/channel_args.h +28 -0
- data/include/grpc/event_engine/event_engine.h +336 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/event_engine/slice_allocator.h +81 -0
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security_constants.h +14 -0
- data/include/grpc/impl/codegen/grpc_types.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +5 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- 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_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +101 -93
- data/src/core/ext/xds/xds_api.h +6 -6
- data/src/core/ext/xds/xds_bootstrap.cc +97 -159
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +310 -178
- data/src/core/ext/xds/xds_client.h +41 -27
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +10 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +21 -13
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/event_engine/slice_allocator.cc +59 -0
- data/src/core/lib/event_engine/sockaddr.cc +38 -0
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +180 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/exec_ctx.cc +4 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +5 -5
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +3 -3
- data/src/core/lib/iomgr/resolve_address.h +6 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +11 -10
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +36 -34
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
- data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/matchers/matchers.cc +39 -39
- data/src/core/lib/matchers/matchers.h +28 -28
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +33 -32
- data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/surface/call.cc +46 -45
- data/src/core/lib/surface/call.h +2 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +46 -47
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +28 -22
- data/src/core/lib/surface/server.h +16 -15
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +19 -8
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/tsi/alts/crypt/gsec.h +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +477 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +68 -45
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -263,7 +263,7 @@ void ASN1_OBJECT_free(ASN1_OBJECT *a)
|
|
263
263
|
OPENSSL_free(a);
|
264
264
|
}
|
265
265
|
|
266
|
-
ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len,
|
266
|
+
ASN1_OBJECT *ASN1_OBJECT_create(int nid, const unsigned char *data, int len,
|
267
267
|
const char *sn, const char *ln)
|
268
268
|
{
|
269
269
|
ASN1_OBJECT o;
|
@@ -66,18 +66,28 @@
|
|
66
66
|
|
67
67
|
int ASN1_TYPE_get(const ASN1_TYPE *a)
|
68
68
|
{
|
69
|
-
if (
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
if (a->type == V_ASN1_BOOLEAN || a->type == V_ASN1_NULL ||
|
70
|
+
a->value.ptr != NULL) {
|
71
|
+
return a->type;
|
72
|
+
}
|
73
|
+
return 0;
|
73
74
|
}
|
74
75
|
|
75
|
-
void
|
76
|
+
const void *asn1_type_value_as_pointer(const ASN1_TYPE *a)
|
76
77
|
{
|
77
|
-
if (a->
|
78
|
-
|
79
|
-
|
78
|
+
if (a->type == V_ASN1_BOOLEAN) {
|
79
|
+
return a->value.boolean ? (void *)0xff : NULL;
|
80
|
+
}
|
81
|
+
if (a->type == V_ASN1_NULL) {
|
82
|
+
return NULL;
|
80
83
|
}
|
84
|
+
return a->value.ptr;
|
85
|
+
}
|
86
|
+
|
87
|
+
void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value)
|
88
|
+
{
|
89
|
+
ASN1_TYPE **tmp_a = &a;
|
90
|
+
ASN1_primitive_free((ASN1_VALUE **)tmp_a, NULL);
|
81
91
|
a->type = type;
|
82
92
|
if (type == V_ASN1_BOOLEAN)
|
83
93
|
a->value.boolean = value ? 0xff : 0;
|
@@ -370,8 +370,7 @@ int ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len)
|
|
370
370
|
|
371
371
|
void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len)
|
372
372
|
{
|
373
|
-
|
374
|
-
OPENSSL_free(str->data);
|
373
|
+
OPENSSL_free(str->data);
|
375
374
|
str->data = data;
|
376
375
|
str->length = len;
|
377
376
|
}
|
@@ -126,6 +126,11 @@ int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval,
|
|
126
126
|
int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen,
|
127
127
|
const ASN1_ITEM *it);
|
128
128
|
|
129
|
+
/* asn1_type_value_as_pointer returns |a|'s value in pointer form. This is
|
130
|
+
* usually the value object but, for BOOLEAN values, is 0 or 0xff cast to
|
131
|
+
* a pointer. */
|
132
|
+
const void *asn1_type_value_as_pointer(const ASN1_TYPE *a);
|
133
|
+
|
129
134
|
|
130
135
|
#if defined(__cplusplus)
|
131
136
|
} /* extern C */
|
@@ -192,7 +192,7 @@ void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
|
|
192
192
|
ASN1_TYPE *typ = (ASN1_TYPE *)*pval;
|
193
193
|
utype = typ->type;
|
194
194
|
pval = &typ->value.asn1_value;
|
195
|
-
if (!*pval)
|
195
|
+
if (utype != V_ASN1_BOOLEAN && !*pval)
|
196
196
|
return;
|
197
197
|
} else if (it->itype == ASN1_ITYPE_MSTRING) {
|
198
198
|
utype = -1;
|
@@ -343,7 +343,7 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out, size_t *out_len,
|
|
343
343
|
if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE &&
|
344
344
|
EVP_tls_cbc_record_digest_supported(tls_ctx->hmac_ctx.md)) {
|
345
345
|
if (!EVP_tls_cbc_digest_record(tls_ctx->hmac_ctx.md, mac, &mac_len,
|
346
|
-
ad_fixed, out,
|
346
|
+
ad_fixed, out, data_len, total,
|
347
347
|
tls_ctx->mac_key, tls_ctx->mac_key_len)) {
|
348
348
|
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
|
349
349
|
return 0;
|
@@ -406,14 +406,6 @@ static int aead_aes_128_cbc_sha1_tls_implicit_iv_init(
|
|
406
406
|
EVP_sha1(), 1);
|
407
407
|
}
|
408
408
|
|
409
|
-
static int aead_aes_128_cbc_sha256_tls_init(EVP_AEAD_CTX *ctx,
|
410
|
-
const uint8_t *key, size_t key_len,
|
411
|
-
size_t tag_len,
|
412
|
-
enum evp_aead_direction_t dir) {
|
413
|
-
return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_128_cbc(),
|
414
|
-
EVP_sha256(), 0);
|
415
|
-
}
|
416
|
-
|
417
409
|
static int aead_aes_256_cbc_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
418
410
|
size_t key_len, size_t tag_len,
|
419
411
|
enum evp_aead_direction_t dir) {
|
@@ -428,22 +420,6 @@ static int aead_aes_256_cbc_sha1_tls_implicit_iv_init(
|
|
428
420
|
EVP_sha1(), 1);
|
429
421
|
}
|
430
422
|
|
431
|
-
static int aead_aes_256_cbc_sha256_tls_init(EVP_AEAD_CTX *ctx,
|
432
|
-
const uint8_t *key, size_t key_len,
|
433
|
-
size_t tag_len,
|
434
|
-
enum evp_aead_direction_t dir) {
|
435
|
-
return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_256_cbc(),
|
436
|
-
EVP_sha256(), 0);
|
437
|
-
}
|
438
|
-
|
439
|
-
static int aead_aes_256_cbc_sha384_tls_init(EVP_AEAD_CTX *ctx,
|
440
|
-
const uint8_t *key, size_t key_len,
|
441
|
-
size_t tag_len,
|
442
|
-
enum evp_aead_direction_t dir) {
|
443
|
-
return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_256_cbc(),
|
444
|
-
EVP_sha384(), 0);
|
445
|
-
}
|
446
|
-
|
447
423
|
static int aead_des_ede3_cbc_sha1_tls_init(EVP_AEAD_CTX *ctx,
|
448
424
|
const uint8_t *key, size_t key_len,
|
449
425
|
size_t tag_len,
|
@@ -513,23 +489,6 @@ static const EVP_AEAD aead_aes_128_cbc_sha1_tls_implicit_iv = {
|
|
513
489
|
aead_tls_tag_len,
|
514
490
|
};
|
515
491
|
|
516
|
-
static const EVP_AEAD aead_aes_128_cbc_sha256_tls = {
|
517
|
-
SHA256_DIGEST_LENGTH + 16, // key len (SHA256 + AES128)
|
518
|
-
16, // nonce len (IV)
|
519
|
-
16 + SHA256_DIGEST_LENGTH, // overhead (padding + SHA256)
|
520
|
-
SHA256_DIGEST_LENGTH, // max tag length
|
521
|
-
0, // seal_scatter_supports_extra_in
|
522
|
-
|
523
|
-
NULL, // init
|
524
|
-
aead_aes_128_cbc_sha256_tls_init,
|
525
|
-
aead_tls_cleanup,
|
526
|
-
aead_tls_open,
|
527
|
-
aead_tls_seal_scatter,
|
528
|
-
NULL, // open_gather
|
529
|
-
NULL, // get_iv
|
530
|
-
aead_tls_tag_len,
|
531
|
-
};
|
532
|
-
|
533
492
|
static const EVP_AEAD aead_aes_256_cbc_sha1_tls = {
|
534
493
|
SHA_DIGEST_LENGTH + 32, // key len (SHA1 + AES256)
|
535
494
|
16, // nonce len (IV)
|
@@ -564,40 +523,6 @@ static const EVP_AEAD aead_aes_256_cbc_sha1_tls_implicit_iv = {
|
|
564
523
|
aead_tls_tag_len,
|
565
524
|
};
|
566
525
|
|
567
|
-
static const EVP_AEAD aead_aes_256_cbc_sha256_tls = {
|
568
|
-
SHA256_DIGEST_LENGTH + 32, // key len (SHA256 + AES256)
|
569
|
-
16, // nonce len (IV)
|
570
|
-
16 + SHA256_DIGEST_LENGTH, // overhead (padding + SHA256)
|
571
|
-
SHA256_DIGEST_LENGTH, // max tag length
|
572
|
-
0, // seal_scatter_supports_extra_in
|
573
|
-
|
574
|
-
NULL, // init
|
575
|
-
aead_aes_256_cbc_sha256_tls_init,
|
576
|
-
aead_tls_cleanup,
|
577
|
-
aead_tls_open,
|
578
|
-
aead_tls_seal_scatter,
|
579
|
-
NULL, // open_gather
|
580
|
-
NULL, // get_iv
|
581
|
-
aead_tls_tag_len,
|
582
|
-
};
|
583
|
-
|
584
|
-
static const EVP_AEAD aead_aes_256_cbc_sha384_tls = {
|
585
|
-
SHA384_DIGEST_LENGTH + 32, // key len (SHA384 + AES256)
|
586
|
-
16, // nonce len (IV)
|
587
|
-
16 + SHA384_DIGEST_LENGTH, // overhead (padding + SHA384)
|
588
|
-
SHA384_DIGEST_LENGTH, // max tag length
|
589
|
-
0, // seal_scatter_supports_extra_in
|
590
|
-
|
591
|
-
NULL, // init
|
592
|
-
aead_aes_256_cbc_sha384_tls_init,
|
593
|
-
aead_tls_cleanup,
|
594
|
-
aead_tls_open,
|
595
|
-
aead_tls_seal_scatter,
|
596
|
-
NULL, // open_gather
|
597
|
-
NULL, // get_iv
|
598
|
-
aead_tls_tag_len,
|
599
|
-
};
|
600
|
-
|
601
526
|
static const EVP_AEAD aead_des_ede3_cbc_sha1_tls = {
|
602
527
|
SHA_DIGEST_LENGTH + 24, // key len (SHA1 + 3DES)
|
603
528
|
8, // nonce len (IV)
|
@@ -657,10 +582,6 @@ const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls_implicit_iv(void) {
|
|
657
582
|
return &aead_aes_128_cbc_sha1_tls_implicit_iv;
|
658
583
|
}
|
659
584
|
|
660
|
-
const EVP_AEAD *EVP_aead_aes_128_cbc_sha256_tls(void) {
|
661
|
-
return &aead_aes_128_cbc_sha256_tls;
|
662
|
-
}
|
663
|
-
|
664
585
|
const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls(void) {
|
665
586
|
return &aead_aes_256_cbc_sha1_tls;
|
666
587
|
}
|
@@ -669,14 +590,6 @@ const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls_implicit_iv(void) {
|
|
669
590
|
return &aead_aes_256_cbc_sha1_tls_implicit_iv;
|
670
591
|
}
|
671
592
|
|
672
|
-
const EVP_AEAD *EVP_aead_aes_256_cbc_sha256_tls(void) {
|
673
|
-
return &aead_aes_256_cbc_sha256_tls;
|
674
|
-
}
|
675
|
-
|
676
|
-
const EVP_AEAD *EVP_aead_aes_256_cbc_sha384_tls(void) {
|
677
|
-
return &aead_aes_256_cbc_sha384_tls;
|
678
|
-
}
|
679
|
-
|
680
593
|
const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls(void) {
|
681
594
|
return &aead_des_ede3_cbc_sha1_tls;
|
682
595
|
}
|
@@ -99,6 +99,17 @@ void EVP_tls_cbc_copy_mac(uint8_t *out, size_t md_size, const uint8_t *in,
|
|
99
99
|
// which EVP_tls_cbc_digest_record supports.
|
100
100
|
int EVP_tls_cbc_record_digest_supported(const EVP_MD *md);
|
101
101
|
|
102
|
+
// EVP_sha1_final_with_secret_suffix computes the result of hashing |len| bytes
|
103
|
+
// from |in| to |ctx| and writes the resulting hash to |out|. |len| is treated
|
104
|
+
// as secret and must be at most |max_len|, which is treated as public. |in|
|
105
|
+
// must point to a buffer of at least |max_len| bytes. It returns one on success
|
106
|
+
// and zero if inputs are too long.
|
107
|
+
//
|
108
|
+
// This function is exported for unit tests.
|
109
|
+
OPENSSL_EXPORT int EVP_sha1_final_with_secret_suffix(
|
110
|
+
SHA_CTX *ctx, uint8_t out[SHA_DIGEST_LENGTH], const uint8_t *in, size_t len,
|
111
|
+
size_t max_len);
|
112
|
+
|
102
113
|
// EVP_tls_cbc_digest_record computes the MAC of a decrypted, padded TLS
|
103
114
|
// record.
|
104
115
|
//
|
@@ -108,8 +119,8 @@ int EVP_tls_cbc_record_digest_supported(const EVP_MD *md);
|
|
108
119
|
// md_out_size: the number of output bytes is written here.
|
109
120
|
// header: the 13-byte, TLS record header.
|
110
121
|
// data: the record data itself
|
111
|
-
//
|
112
|
-
//
|
122
|
+
// data_size: the secret, reported length of the data once the padding and MAC
|
123
|
+
// have been removed.
|
113
124
|
// data_plus_mac_plus_padding_size: the public length of the whole
|
114
125
|
// record, including padding.
|
115
126
|
//
|
@@ -119,7 +130,7 @@ int EVP_tls_cbc_record_digest_supported(const EVP_MD *md);
|
|
119
130
|
// padding too. )
|
120
131
|
int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
|
121
132
|
size_t *md_out_size, const uint8_t header[13],
|
122
|
-
const uint8_t *data, size_t
|
133
|
+
const uint8_t *data, size_t data_size,
|
123
134
|
size_t data_plus_mac_plus_padding_size,
|
124
135
|
const uint8_t *mac_secret,
|
125
136
|
unsigned mac_secret_length);
|
@@ -62,15 +62,6 @@
|
|
62
62
|
#include "../fipsmodule/cipher/internal.h"
|
63
63
|
|
64
64
|
|
65
|
-
// MAX_HASH_BIT_COUNT_BYTES is the maximum number of bytes in the hash's length
|
66
|
-
// field. (SHA-384/512 have 128-bit length.)
|
67
|
-
#define MAX_HASH_BIT_COUNT_BYTES 16
|
68
|
-
|
69
|
-
// MAX_HASH_BLOCK_SIZE is the maximum hash block size that we'll support.
|
70
|
-
// Currently SHA-384/512 has a 128-byte block size and that's the largest
|
71
|
-
// supported by TLS.)
|
72
|
-
#define MAX_HASH_BLOCK_SIZE 128
|
73
|
-
|
74
65
|
int EVP_tls_cbc_remove_padding(crypto_word_t *out_padding_ok, size_t *out_len,
|
75
66
|
const uint8_t *in, size_t in_len,
|
76
67
|
size_t block_size, size_t mac_size) {
|
@@ -183,134 +174,110 @@ void EVP_tls_cbc_copy_mac(uint8_t *out, size_t md_size, const uint8_t *in,
|
|
183
174
|
OPENSSL_memcpy(out, rotated_mac, md_size);
|
184
175
|
}
|
185
176
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
*((p)++) = (uint8_t)((n) >> 56); \
|
201
|
-
*((p)++) = (uint8_t)((n) >> 48); \
|
202
|
-
*((p)++) = (uint8_t)((n) >> 40); \
|
203
|
-
*((p)++) = (uint8_t)((n) >> 32); \
|
204
|
-
*((p)++) = (uint8_t)((n) >> 24); \
|
205
|
-
*((p)++) = (uint8_t)((n) >> 16); \
|
206
|
-
*((p)++) = (uint8_t)((n) >> 8); \
|
207
|
-
*((p)++) = (uint8_t)((n)); \
|
208
|
-
} while (0)
|
209
|
-
|
210
|
-
typedef union {
|
211
|
-
SHA_CTX sha1;
|
212
|
-
SHA256_CTX sha256;
|
213
|
-
SHA512_CTX sha512;
|
214
|
-
} HASH_CTX;
|
215
|
-
|
216
|
-
static void tls1_sha1_transform(HASH_CTX *ctx, const uint8_t *block) {
|
217
|
-
SHA1_Transform(&ctx->sha1, block);
|
218
|
-
}
|
177
|
+
int EVP_sha1_final_with_secret_suffix(SHA_CTX *ctx,
|
178
|
+
uint8_t out[SHA_DIGEST_LENGTH],
|
179
|
+
const uint8_t *in, size_t len,
|
180
|
+
size_t max_len) {
|
181
|
+
// Bound the input length so |total_bits| below fits in four bytes. This is
|
182
|
+
// redundant with TLS record size limits. This also ensures |input_idx| below
|
183
|
+
// does not overflow.
|
184
|
+
size_t max_len_bits = max_len << 3;
|
185
|
+
if (ctx->Nh != 0 ||
|
186
|
+
(max_len_bits >> 3) != max_len || // Overflow
|
187
|
+
ctx->Nl + max_len_bits < max_len_bits ||
|
188
|
+
ctx->Nl + max_len_bits > UINT32_MAX) {
|
189
|
+
return 0;
|
190
|
+
}
|
219
191
|
|
220
|
-
|
221
|
-
|
222
|
-
|
192
|
+
// We need to hash the following into |ctx|:
|
193
|
+
//
|
194
|
+
// - ctx->data[:ctx->num]
|
195
|
+
// - in[:len]
|
196
|
+
// - A 0x80 byte
|
197
|
+
// - However many zero bytes are needed to pad up to a block.
|
198
|
+
// - Eight bytes of length.
|
199
|
+
size_t num_blocks = (ctx->num + len + 1 + 8 + SHA_CBLOCK - 1) >> 6;
|
200
|
+
size_t last_block = num_blocks - 1;
|
201
|
+
size_t max_blocks = (ctx->num + max_len + 1 + 8 + SHA_CBLOCK - 1) >> 6;
|
202
|
+
|
203
|
+
// The bounds above imply |total_bits| fits in four bytes.
|
204
|
+
size_t total_bits = ctx->Nl + (len << 3);
|
205
|
+
uint8_t length_bytes[4];
|
206
|
+
length_bytes[0] = (uint8_t)(total_bits >> 24);
|
207
|
+
length_bytes[1] = (uint8_t)(total_bits >> 16);
|
208
|
+
length_bytes[2] = (uint8_t)(total_bits >> 8);
|
209
|
+
length_bytes[3] = (uint8_t)total_bits;
|
210
|
+
|
211
|
+
// We now construct and process each expected block in constant-time.
|
212
|
+
uint8_t block[SHA_CBLOCK] = {0};
|
213
|
+
uint32_t result[5] = {0};
|
214
|
+
// input_idx is the index into |in| corresponding to the current block.
|
215
|
+
// However, we allow this index to overflow beyond |max_len|, to simplify the
|
216
|
+
// 0x80 byte.
|
217
|
+
size_t input_idx = 0;
|
218
|
+
for (size_t i = 0; i < max_blocks; i++) {
|
219
|
+
// Fill |block| with data from the partial block in |ctx| and |in|. We copy
|
220
|
+
// as if we were hashing up to |max_len| and then zero the excess later.
|
221
|
+
size_t block_start = 0;
|
222
|
+
if (i == 0) {
|
223
|
+
OPENSSL_memcpy(block, ctx->data, ctx->num);
|
224
|
+
block_start = ctx->num;
|
225
|
+
}
|
226
|
+
if (input_idx < max_len) {
|
227
|
+
size_t to_copy = SHA_CBLOCK - block_start;
|
228
|
+
if (to_copy > max_len - input_idx) {
|
229
|
+
to_copy = max_len - input_idx;
|
230
|
+
}
|
231
|
+
OPENSSL_memcpy(block + block_start, in + input_idx, to_copy);
|
232
|
+
}
|
223
233
|
|
224
|
-
|
225
|
-
|
226
|
-
|
234
|
+
// Zero any bytes beyond |len| and add the 0x80 byte.
|
235
|
+
for (size_t j = block_start; j < SHA_CBLOCK; j++) {
|
236
|
+
// input[idx] corresponds to block[j].
|
237
|
+
size_t idx = input_idx + j - block_start;
|
238
|
+
// The barriers on |len| are not strictly necessary. However, without
|
239
|
+
// them, GCC compiles this code by incorporating |len| into the loop
|
240
|
+
// counter and subtracting it out later. This is still constant-time, but
|
241
|
+
// it frustrates attempts to validate this.
|
242
|
+
uint8_t is_in_bounds = constant_time_lt_8(idx, value_barrier_w(len));
|
243
|
+
uint8_t is_padding_byte = constant_time_eq_8(idx, value_barrier_w(len));
|
244
|
+
block[j] &= is_in_bounds;
|
245
|
+
block[j] |= 0x80 & is_padding_byte;
|
246
|
+
}
|
227
247
|
|
228
|
-
|
229
|
-
// "final" operation without adding the padding and length that such a function
|
230
|
-
// typically does.
|
231
|
-
static void tls1_sha1_final_raw(HASH_CTX *ctx, uint8_t *md_out) {
|
232
|
-
SHA_CTX *sha1 = &ctx->sha1;
|
233
|
-
u32toBE(sha1->h[0], md_out);
|
234
|
-
u32toBE(sha1->h[1], md_out);
|
235
|
-
u32toBE(sha1->h[2], md_out);
|
236
|
-
u32toBE(sha1->h[3], md_out);
|
237
|
-
u32toBE(sha1->h[4], md_out);
|
238
|
-
}
|
248
|
+
input_idx += SHA_CBLOCK - block_start;
|
239
249
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
250
|
+
// Fill in the length if this is the last block.
|
251
|
+
crypto_word_t is_last_block = constant_time_eq_w(i, last_block);
|
252
|
+
for (size_t j = 0; j < 4; j++) {
|
253
|
+
block[SHA_CBLOCK - 4 + j] |= is_last_block & length_bytes[j];
|
254
|
+
}
|
255
|
+
|
256
|
+
// Process the block and save the hash state if it is the final value.
|
257
|
+
SHA1_Transform(ctx, block);
|
258
|
+
for (size_t j = 0; j < 5; j++) {
|
259
|
+
result[j] |= is_last_block & ctx->h[j];
|
260
|
+
}
|
244
261
|
}
|
245
|
-
}
|
246
262
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
u64toBE(sha512->h[i], md_out);
|
263
|
+
// Write the output.
|
264
|
+
for (size_t i = 0; i < 5; i++) {
|
265
|
+
CRYPTO_store_u32_be(out + 4 * i, result[i]);
|
251
266
|
}
|
267
|
+
return 1;
|
252
268
|
}
|
253
269
|
|
254
270
|
int EVP_tls_cbc_record_digest_supported(const EVP_MD *md) {
|
255
|
-
|
256
|
-
case NID_sha1:
|
257
|
-
case NID_sha256:
|
258
|
-
case NID_sha384:
|
259
|
-
return 1;
|
260
|
-
|
261
|
-
default:
|
262
|
-
return 0;
|
263
|
-
}
|
271
|
+
return EVP_MD_type(md) == NID_sha1;
|
264
272
|
}
|
265
273
|
|
266
274
|
int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
|
267
275
|
size_t *md_out_size, const uint8_t header[13],
|
268
|
-
const uint8_t *data, size_t
|
276
|
+
const uint8_t *data, size_t data_size,
|
269
277
|
size_t data_plus_mac_plus_padding_size,
|
270
278
|
const uint8_t *mac_secret,
|
271
279
|
unsigned mac_secret_length) {
|
272
|
-
|
273
|
-
void (*md_final_raw)(HASH_CTX *ctx, uint8_t *md_out);
|
274
|
-
void (*md_transform)(HASH_CTX *ctx, const uint8_t *block);
|
275
|
-
unsigned md_size, md_block_size = 64, md_block_shift = 6;
|
276
|
-
// md_length_size is the number of bytes in the length field that terminates
|
277
|
-
// the hash.
|
278
|
-
unsigned md_length_size = 8;
|
279
|
-
|
280
|
-
// Bound the acceptable input so we can forget about many possible overflows
|
281
|
-
// later in this function. This is redundant with the record size limits in
|
282
|
-
// TLS.
|
283
|
-
if (data_plus_mac_plus_padding_size >= 1024 * 1024) {
|
284
|
-
assert(0);
|
285
|
-
return 0;
|
286
|
-
}
|
287
|
-
|
288
|
-
switch (EVP_MD_type(md)) {
|
289
|
-
case NID_sha1:
|
290
|
-
SHA1_Init(&md_state.sha1);
|
291
|
-
md_final_raw = tls1_sha1_final_raw;
|
292
|
-
md_transform = tls1_sha1_transform;
|
293
|
-
md_size = SHA_DIGEST_LENGTH;
|
294
|
-
break;
|
295
|
-
|
296
|
-
case NID_sha256:
|
297
|
-
SHA256_Init(&md_state.sha256);
|
298
|
-
md_final_raw = tls1_sha256_final_raw;
|
299
|
-
md_transform = tls1_sha256_transform;
|
300
|
-
md_size = SHA256_DIGEST_LENGTH;
|
301
|
-
break;
|
302
|
-
|
303
|
-
case NID_sha384:
|
304
|
-
SHA384_Init(&md_state.sha512);
|
305
|
-
md_final_raw = tls1_sha512_final_raw;
|
306
|
-
md_transform = tls1_sha512_transform;
|
307
|
-
md_size = SHA384_DIGEST_LENGTH;
|
308
|
-
md_block_size = 128;
|
309
|
-
md_block_shift = 7;
|
310
|
-
md_length_size = 16;
|
311
|
-
break;
|
312
|
-
|
313
|
-
default:
|
280
|
+
if (EVP_MD_type(md) != NID_sha1) {
|
314
281
|
// EVP_tls_cbc_record_digest_supported should have been called first to
|
315
282
|
// check that the hash function is supported.
|
316
283
|
assert(0);
|
@@ -318,175 +285,54 @@ int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
|
|
318
285
|
return 0;
|
319
286
|
}
|
320
287
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
static const size_t kHeaderLength = 13;
|
327
|
-
|
328
|
-
// kVarianceBlocks is the number of blocks of the hash that we have to
|
329
|
-
// calculate in constant time because they could be altered by the
|
330
|
-
// padding value.
|
331
|
-
//
|
332
|
-
// TLSv1 has MACs up to 48 bytes long (SHA-384) and the padding is not
|
333
|
-
// required to be minimal. Therefore we say that the final |kVarianceBlocks|
|
334
|
-
// blocks can vary based on the padding and on the hash used. This value
|
335
|
-
// must be derived from public information.
|
336
|
-
const size_t kVarianceBlocks =
|
337
|
-
( 255 + 1 + // maximum padding bytes + padding length
|
338
|
-
md_size + // length of hash's output
|
339
|
-
md_block_size - 1 // ceiling
|
340
|
-
) / md_block_size
|
341
|
-
+ 1; // the 0x80 marker and the encoded message length could or not
|
342
|
-
// require an extra block; since the exact value depends on the
|
343
|
-
// message length; thus, one extra block is always added to run
|
344
|
-
// in constant time.
|
345
|
-
|
346
|
-
// From now on we're dealing with the MAC, which conceptually has 13
|
347
|
-
// bytes of `header' before the start of the data.
|
348
|
-
size_t len = data_plus_mac_plus_padding_size + kHeaderLength;
|
349
|
-
// max_mac_bytes contains the maximum bytes of bytes in the MAC, including
|
350
|
-
// |header|, assuming that there's no padding.
|
351
|
-
size_t max_mac_bytes = len - md_size - 1;
|
352
|
-
// num_blocks is the maximum number of hash blocks.
|
353
|
-
size_t num_blocks =
|
354
|
-
(max_mac_bytes + 1 + md_length_size + md_block_size - 1) / md_block_size;
|
355
|
-
// In order to calculate the MAC in constant time we have to handle
|
356
|
-
// the final blocks specially because the padding value could cause the
|
357
|
-
// end to appear somewhere in the final |kVarianceBlocks| blocks and we
|
358
|
-
// can't leak where. However, |num_starting_blocks| worth of data can
|
359
|
-
// be hashed right away because no padding value can affect whether
|
360
|
-
// they are plaintext.
|
361
|
-
size_t num_starting_blocks = 0;
|
362
|
-
// k is the starting byte offset into the conceptual header||data where
|
363
|
-
// we start processing.
|
364
|
-
size_t k = 0;
|
365
|
-
// mac_end_offset is the index just past the end of the data to be MACed.
|
366
|
-
size_t mac_end_offset = data_plus_mac_size + kHeaderLength - md_size;
|
367
|
-
// c is the index of the 0x80 byte in the final hash block that contains
|
368
|
-
// application data.
|
369
|
-
size_t c = mac_end_offset & (md_block_size - 1);
|
370
|
-
// index_a is the hash block number that contains the 0x80 terminating value.
|
371
|
-
size_t index_a = mac_end_offset >> md_block_shift;
|
372
|
-
// index_b is the hash block number that contains the 64-bit hash length, in
|
373
|
-
// bits.
|
374
|
-
size_t index_b = (mac_end_offset + md_length_size) >> md_block_shift;
|
375
|
-
|
376
|
-
if (num_blocks > kVarianceBlocks) {
|
377
|
-
num_starting_blocks = num_blocks - kVarianceBlocks;
|
378
|
-
k = md_block_size * num_starting_blocks;
|
288
|
+
if (mac_secret_length > SHA_CBLOCK) {
|
289
|
+
// HMAC pads small keys with zeros and hashes large keys down. This function
|
290
|
+
// should never reach the large key case.
|
291
|
+
assert(0);
|
292
|
+
return 0;
|
379
293
|
}
|
380
294
|
|
381
|
-
// bits is the hash-length in bits. It includes the additional hash
|
382
|
-
// block for the masked HMAC key.
|
383
|
-
size_t bits = 8 * mac_end_offset; // at most 18 bits to represent
|
384
|
-
|
385
295
|
// Compute the initial HMAC block.
|
386
|
-
|
387
|
-
|
388
|
-
uint8_t hmac_pad[MAX_HASH_BLOCK_SIZE];
|
389
|
-
OPENSSL_memset(hmac_pad, 0, md_block_size);
|
390
|
-
assert(mac_secret_length <= sizeof(hmac_pad));
|
296
|
+
uint8_t hmac_pad[SHA_CBLOCK];
|
297
|
+
OPENSSL_memset(hmac_pad, 0, sizeof(hmac_pad));
|
391
298
|
OPENSSL_memcpy(hmac_pad, mac_secret, mac_secret_length);
|
392
|
-
for (size_t i = 0; i <
|
299
|
+
for (size_t i = 0; i < SHA_CBLOCK; i++) {
|
393
300
|
hmac_pad[i] ^= 0x36;
|
394
301
|
}
|
395
302
|
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
OPENSSL_memset(length_bytes, 0, md_length_size - 4);
|
401
|
-
length_bytes[md_length_size - 4] = (uint8_t)(bits >> 24);
|
402
|
-
length_bytes[md_length_size - 3] = (uint8_t)(bits >> 16);
|
403
|
-
length_bytes[md_length_size - 2] = (uint8_t)(bits >> 8);
|
404
|
-
length_bytes[md_length_size - 1] = (uint8_t)bits;
|
405
|
-
|
406
|
-
if (k > 0) {
|
407
|
-
// k is a multiple of md_block_size.
|
408
|
-
uint8_t first_block[MAX_HASH_BLOCK_SIZE];
|
409
|
-
OPENSSL_memcpy(first_block, header, 13);
|
410
|
-
OPENSSL_memcpy(first_block + 13, data, md_block_size - 13);
|
411
|
-
md_transform(&md_state, first_block);
|
412
|
-
for (size_t i = 1; i < k / md_block_size; i++) {
|
413
|
-
md_transform(&md_state, data + md_block_size * i - 13);
|
414
|
-
}
|
415
|
-
}
|
416
|
-
|
417
|
-
uint8_t mac_out[EVP_MAX_MD_SIZE];
|
418
|
-
OPENSSL_memset(mac_out, 0, sizeof(mac_out));
|
419
|
-
|
420
|
-
// We now process the final hash blocks. For each block, we construct
|
421
|
-
// it in constant time. If the |i==index_a| then we'll include the 0x80
|
422
|
-
// bytes and zero pad etc. For each block we selectively copy it, in
|
423
|
-
// constant time, to |mac_out|.
|
424
|
-
for (size_t i = num_starting_blocks;
|
425
|
-
i <= num_starting_blocks + kVarianceBlocks; i++) {
|
426
|
-
uint8_t block[MAX_HASH_BLOCK_SIZE];
|
427
|
-
uint8_t is_block_a = constant_time_eq_8(i, index_a);
|
428
|
-
uint8_t is_block_b = constant_time_eq_8(i, index_b);
|
429
|
-
for (size_t j = 0; j < md_block_size; j++) {
|
430
|
-
uint8_t b = 0;
|
431
|
-
if (k < kHeaderLength) {
|
432
|
-
b = header[k];
|
433
|
-
} else if (k < data_plus_mac_plus_padding_size + kHeaderLength) {
|
434
|
-
b = data[k - kHeaderLength];
|
435
|
-
}
|
436
|
-
k++;
|
437
|
-
|
438
|
-
uint8_t is_past_c = is_block_a & constant_time_ge_8(j, c);
|
439
|
-
uint8_t is_past_cp1 = is_block_a & constant_time_ge_8(j, c + 1);
|
440
|
-
// If this is the block containing the end of the
|
441
|
-
// application data, and we are at the offset for the
|
442
|
-
// 0x80 value, then overwrite b with 0x80.
|
443
|
-
b = constant_time_select_8(is_past_c, 0x80, b);
|
444
|
-
// If this the the block containing the end of the
|
445
|
-
// application data and we're past the 0x80 value then
|
446
|
-
// just write zero.
|
447
|
-
b = b & ~is_past_cp1;
|
448
|
-
// If this is index_b (the final block), but not
|
449
|
-
// index_a (the end of the data), then the 64-bit
|
450
|
-
// length didn't fit into index_a and we're having to
|
451
|
-
// add an extra block of zeros.
|
452
|
-
b &= ~is_block_b | is_block_a;
|
453
|
-
|
454
|
-
// The final bytes of one of the blocks contains the
|
455
|
-
// length.
|
456
|
-
if (j >= md_block_size - md_length_size) {
|
457
|
-
// If this is index_b, write a length byte.
|
458
|
-
b = constant_time_select_8(
|
459
|
-
is_block_b, length_bytes[j - (md_block_size - md_length_size)], b);
|
460
|
-
}
|
461
|
-
block[j] = b;
|
462
|
-
}
|
303
|
+
SHA_CTX ctx;
|
304
|
+
SHA1_Init(&ctx);
|
305
|
+
SHA1_Update(&ctx, hmac_pad, SHA_CBLOCK);
|
306
|
+
SHA1_Update(&ctx, header, 13);
|
463
307
|
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
}
|
308
|
+
// There are at most 256 bytes of padding, so we can compute the public
|
309
|
+
// minimum length for |data_size|.
|
310
|
+
size_t min_data_size = 0;
|
311
|
+
if (data_plus_mac_plus_padding_size > SHA_DIGEST_LENGTH + 256) {
|
312
|
+
min_data_size = data_plus_mac_plus_padding_size - SHA_DIGEST_LENGTH - 256;
|
470
313
|
}
|
471
314
|
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
315
|
+
// Hash the public minimum length directly. This reduces the number of blocks
|
316
|
+
// that must be computed in constant-time.
|
317
|
+
SHA1_Update(&ctx, data, min_data_size);
|
318
|
+
|
319
|
+
// Hash the remaining data without leaking |data_size|.
|
320
|
+
uint8_t mac_out[SHA_DIGEST_LENGTH];
|
321
|
+
if (!EVP_sha1_final_with_secret_suffix(
|
322
|
+
&ctx, mac_out, data + min_data_size, data_size - min_data_size,
|
323
|
+
data_plus_mac_plus_padding_size - min_data_size)) {
|
476
324
|
return 0;
|
477
325
|
}
|
478
326
|
|
479
327
|
// Complete the HMAC in the standard manner.
|
480
|
-
|
328
|
+
SHA1_Init(&ctx);
|
329
|
+
for (size_t i = 0; i < SHA_CBLOCK; i++) {
|
481
330
|
hmac_pad[i] ^= 0x6a;
|
482
331
|
}
|
483
332
|
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
*md_out_size = md_out_size_u;
|
489
|
-
EVP_MD_CTX_cleanup(&md_ctx);
|
490
|
-
|
333
|
+
SHA1_Update(&ctx, hmac_pad, SHA_CBLOCK);
|
334
|
+
SHA1_Update(&ctx, mac_out, SHA_DIGEST_LENGTH);
|
335
|
+
SHA1_Final(md_out, &ctx);
|
336
|
+
*md_out_size = SHA_DIGEST_LENGTH;
|
491
337
|
return 1;
|
492
338
|
}
|