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
@@ -368,84 +368,6 @@ void ERR_clear_system_error(void) {
|
|
368
368
|
errno = 0;
|
369
369
|
}
|
370
370
|
|
371
|
-
char *ERR_error_string(uint32_t packed_error, char *ret) {
|
372
|
-
static char buf[ERR_ERROR_STRING_BUF_LEN];
|
373
|
-
|
374
|
-
if (ret == NULL) {
|
375
|
-
// TODO(fork): remove this.
|
376
|
-
ret = buf;
|
377
|
-
}
|
378
|
-
|
379
|
-
#if !defined(NDEBUG)
|
380
|
-
// This is aimed to help catch callers who don't provide
|
381
|
-
// |ERR_ERROR_STRING_BUF_LEN| bytes of space.
|
382
|
-
OPENSSL_memset(ret, 0, ERR_ERROR_STRING_BUF_LEN);
|
383
|
-
#endif
|
384
|
-
|
385
|
-
return ERR_error_string_n(packed_error, ret, ERR_ERROR_STRING_BUF_LEN);
|
386
|
-
}
|
387
|
-
|
388
|
-
char *ERR_error_string_n(uint32_t packed_error, char *buf, size_t len) {
|
389
|
-
char lib_buf[64], reason_buf[64];
|
390
|
-
const char *lib_str, *reason_str;
|
391
|
-
unsigned lib, reason;
|
392
|
-
|
393
|
-
if (len == 0) {
|
394
|
-
return NULL;
|
395
|
-
}
|
396
|
-
|
397
|
-
lib = ERR_GET_LIB(packed_error);
|
398
|
-
reason = ERR_GET_REASON(packed_error);
|
399
|
-
|
400
|
-
lib_str = ERR_lib_error_string(packed_error);
|
401
|
-
reason_str = ERR_reason_error_string(packed_error);
|
402
|
-
|
403
|
-
if (lib_str == NULL) {
|
404
|
-
BIO_snprintf(lib_buf, sizeof(lib_buf), "lib(%u)", lib);
|
405
|
-
lib_str = lib_buf;
|
406
|
-
}
|
407
|
-
|
408
|
-
if (reason_str == NULL) {
|
409
|
-
BIO_snprintf(reason_buf, sizeof(reason_buf), "reason(%u)", reason);
|
410
|
-
reason_str = reason_buf;
|
411
|
-
}
|
412
|
-
|
413
|
-
BIO_snprintf(buf, len, "error:%08" PRIx32 ":%s:OPENSSL_internal:%s",
|
414
|
-
packed_error, lib_str, reason_str);
|
415
|
-
|
416
|
-
if (strlen(buf) == len - 1) {
|
417
|
-
// output may be truncated; make sure we always have 5 colon-separated
|
418
|
-
// fields, i.e. 4 colons.
|
419
|
-
static const unsigned num_colons = 4;
|
420
|
-
unsigned i;
|
421
|
-
char *s = buf;
|
422
|
-
|
423
|
-
if (len <= num_colons) {
|
424
|
-
// In this situation it's not possible to ensure that the correct number
|
425
|
-
// of colons are included in the output.
|
426
|
-
return buf;
|
427
|
-
}
|
428
|
-
|
429
|
-
for (i = 0; i < num_colons; i++) {
|
430
|
-
char *colon = strchr(s, ':');
|
431
|
-
char *last_pos = &buf[len - 1] - num_colons + i;
|
432
|
-
|
433
|
-
if (colon == NULL || colon > last_pos) {
|
434
|
-
// set colon |i| at last possible position (buf[len-1] is the
|
435
|
-
// terminating 0). If we're setting this colon, then all whole of the
|
436
|
-
// rest of the string must be colons in order to have the correct
|
437
|
-
// number.
|
438
|
-
OPENSSL_memset(last_pos, ':', num_colons - i);
|
439
|
-
break;
|
440
|
-
}
|
441
|
-
|
442
|
-
s = colon + 1;
|
443
|
-
}
|
444
|
-
}
|
445
|
-
|
446
|
-
return buf;
|
447
|
-
}
|
448
|
-
|
449
371
|
// err_string_cmp is a compare function for searching error values with
|
450
372
|
// |bsearch| in |err_string_lookup|.
|
451
373
|
static int err_string_cmp(const void *a, const void *b) {
|
@@ -530,7 +452,7 @@ static const char *const kLibraryNames[ERR_NUM_LIBS] = {
|
|
530
452
|
"User defined functions", // ERR_LIB_USER
|
531
453
|
};
|
532
454
|
|
533
|
-
const char *
|
455
|
+
static const char *err_lib_error_string(uint32_t packed_error) {
|
534
456
|
const uint32_t lib = ERR_GET_LIB(packed_error);
|
535
457
|
|
536
458
|
if (lib >= ERR_NUM_LIBS) {
|
@@ -539,11 +461,16 @@ const char *ERR_lib_error_string(uint32_t packed_error) {
|
|
539
461
|
return kLibraryNames[lib];
|
540
462
|
}
|
541
463
|
|
464
|
+
const char *ERR_lib_error_string(uint32_t packed_error) {
|
465
|
+
const char *ret = err_lib_error_string(packed_error);
|
466
|
+
return ret == NULL ? "unknown library" : ret;
|
467
|
+
}
|
468
|
+
|
542
469
|
const char *ERR_func_error_string(uint32_t packed_error) {
|
543
470
|
return "OPENSSL_internal";
|
544
471
|
}
|
545
472
|
|
546
|
-
const char *
|
473
|
+
static const char *err_reason_error_string(uint32_t packed_error) {
|
547
474
|
const uint32_t lib = ERR_GET_LIB(packed_error);
|
548
475
|
const uint32_t reason = ERR_GET_REASON(packed_error);
|
549
476
|
|
@@ -579,6 +506,86 @@ const char *ERR_reason_error_string(uint32_t packed_error) {
|
|
579
506
|
kOpenSSLReasonValuesLen, kOpenSSLReasonStringData);
|
580
507
|
}
|
581
508
|
|
509
|
+
const char *ERR_reason_error_string(uint32_t packed_error) {
|
510
|
+
const char *ret = err_reason_error_string(packed_error);
|
511
|
+
return ret == NULL ? "unknown error" : ret;
|
512
|
+
}
|
513
|
+
|
514
|
+
char *ERR_error_string(uint32_t packed_error, char *ret) {
|
515
|
+
static char buf[ERR_ERROR_STRING_BUF_LEN];
|
516
|
+
|
517
|
+
if (ret == NULL) {
|
518
|
+
// TODO(fork): remove this.
|
519
|
+
ret = buf;
|
520
|
+
}
|
521
|
+
|
522
|
+
#if !defined(NDEBUG)
|
523
|
+
// This is aimed to help catch callers who don't provide
|
524
|
+
// |ERR_ERROR_STRING_BUF_LEN| bytes of space.
|
525
|
+
OPENSSL_memset(ret, 0, ERR_ERROR_STRING_BUF_LEN);
|
526
|
+
#endif
|
527
|
+
|
528
|
+
return ERR_error_string_n(packed_error, ret, ERR_ERROR_STRING_BUF_LEN);
|
529
|
+
}
|
530
|
+
|
531
|
+
char *ERR_error_string_n(uint32_t packed_error, char *buf, size_t len) {
|
532
|
+
if (len == 0) {
|
533
|
+
return NULL;
|
534
|
+
}
|
535
|
+
|
536
|
+
unsigned lib = ERR_GET_LIB(packed_error);
|
537
|
+
unsigned reason = ERR_GET_REASON(packed_error);
|
538
|
+
|
539
|
+
const char *lib_str = err_lib_error_string(packed_error);
|
540
|
+
const char *reason_str = err_reason_error_string(packed_error);
|
541
|
+
|
542
|
+
char lib_buf[64], reason_buf[64];
|
543
|
+
if (lib_str == NULL) {
|
544
|
+
BIO_snprintf(lib_buf, sizeof(lib_buf), "lib(%u)", lib);
|
545
|
+
lib_str = lib_buf;
|
546
|
+
}
|
547
|
+
|
548
|
+
if (reason_str == NULL) {
|
549
|
+
BIO_snprintf(reason_buf, sizeof(reason_buf), "reason(%u)", reason);
|
550
|
+
reason_str = reason_buf;
|
551
|
+
}
|
552
|
+
|
553
|
+
BIO_snprintf(buf, len, "error:%08" PRIx32 ":%s:OPENSSL_internal:%s",
|
554
|
+
packed_error, lib_str, reason_str);
|
555
|
+
|
556
|
+
if (strlen(buf) == len - 1) {
|
557
|
+
// output may be truncated; make sure we always have 5 colon-separated
|
558
|
+
// fields, i.e. 4 colons.
|
559
|
+
static const unsigned num_colons = 4;
|
560
|
+
unsigned i;
|
561
|
+
char *s = buf;
|
562
|
+
|
563
|
+
if (len <= num_colons) {
|
564
|
+
// In this situation it's not possible to ensure that the correct number
|
565
|
+
// of colons are included in the output.
|
566
|
+
return buf;
|
567
|
+
}
|
568
|
+
|
569
|
+
for (i = 0; i < num_colons; i++) {
|
570
|
+
char *colon = strchr(s, ':');
|
571
|
+
char *last_pos = &buf[len - 1] - num_colons + i;
|
572
|
+
|
573
|
+
if (colon == NULL || colon > last_pos) {
|
574
|
+
// set colon |i| at last possible position (buf[len-1] is the
|
575
|
+
// terminating 0). If we're setting this colon, then all whole of the
|
576
|
+
// rest of the string must be colons in order to have the correct
|
577
|
+
// number.
|
578
|
+
OPENSSL_memset(last_pos, ':', num_colons - i);
|
579
|
+
break;
|
580
|
+
}
|
581
|
+
|
582
|
+
s = colon + 1;
|
583
|
+
}
|
584
|
+
}
|
585
|
+
|
586
|
+
return buf;
|
587
|
+
}
|
588
|
+
|
582
589
|
void ERR_print_errors_cb(ERR_print_errors_callback_t callback, void *ctx) {
|
583
590
|
char buf[ERR_ERROR_STRING_BUF_LEN];
|
584
591
|
char buf2[1024];
|
@@ -297,7 +297,7 @@ void bn_mul_comba4(BN_ULONG r[8], const BN_ULONG a[4], const BN_ULONG b[4]);
|
|
297
297
|
void bn_mul_comba8(BN_ULONG r[16], const BN_ULONG a[8], const BN_ULONG b[8]);
|
298
298
|
|
299
299
|
// bn_sqr_comba8 sets |r| to |a|^2.
|
300
|
-
void bn_sqr_comba8(BN_ULONG r[16], const BN_ULONG a[
|
300
|
+
void bn_sqr_comba8(BN_ULONG r[16], const BN_ULONG a[8]);
|
301
301
|
|
302
302
|
// bn_sqr_comba4 sets |r| to |a|^2.
|
303
303
|
void bn_sqr_comba4(BN_ULONG r[8], const BN_ULONG a[4]);
|
@@ -225,7 +225,6 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
|
225
225
|
|
226
226
|
ctx->buf_len = 0;
|
227
227
|
ctx->final_used = 0;
|
228
|
-
ctx->block_mask = ctx->cipher->block_size - 1;
|
229
228
|
return 1;
|
230
229
|
}
|
231
230
|
|
@@ -239,6 +238,15 @@ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
|
239
238
|
return EVP_CipherInit_ex(ctx, cipher, impl, key, iv, 0);
|
240
239
|
}
|
241
240
|
|
241
|
+
// block_remainder returns the number of bytes to remove from |len| to get a
|
242
|
+
// multiple of |ctx|'s block size.
|
243
|
+
static int block_remainder(const EVP_CIPHER_CTX *ctx, int len) {
|
244
|
+
// |block_size| must be a power of two.
|
245
|
+
assert(ctx->cipher->block_size != 0);
|
246
|
+
assert((ctx->cipher->block_size & (ctx->cipher->block_size - 1)) == 0);
|
247
|
+
return len & (ctx->cipher->block_size - 1);
|
248
|
+
}
|
249
|
+
|
242
250
|
int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
|
243
251
|
const uint8_t *in, int in_len) {
|
244
252
|
// Ciphers that use blocks may write up to |bl| extra bytes. Ensure the output
|
@@ -264,7 +272,7 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
|
|
264
272
|
return in_len == 0;
|
265
273
|
}
|
266
274
|
|
267
|
-
if (ctx->buf_len == 0 && (in_len
|
275
|
+
if (ctx->buf_len == 0 && block_remainder(ctx, in_len) == 0) {
|
268
276
|
if (ctx->cipher->cipher(ctx, out, in, in_len)) {
|
269
277
|
*out_len = in_len;
|
270
278
|
return 1;
|
@@ -297,7 +305,7 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
|
|
297
305
|
*out_len = 0;
|
298
306
|
}
|
299
307
|
|
300
|
-
i = in_len
|
308
|
+
i = block_remainder(ctx, in_len);
|
301
309
|
in_len -= i;
|
302
310
|
if (in_len > 0) {
|
303
311
|
if (!ctx->cipher->cipher(ctx, out, in, in_len)) {
|
@@ -141,10 +141,22 @@ typedef struct {
|
|
141
141
|
|
142
142
|
static int aes_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
|
143
143
|
const uint8_t *iv, int enc) {
|
144
|
-
int ret
|
144
|
+
int ret;
|
145
145
|
EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
|
146
|
+
const int mode = ctx->cipher->flags & EVP_CIPH_MODE_MASK;
|
147
|
+
|
148
|
+
if (mode == EVP_CIPH_CTR_MODE) {
|
149
|
+
switch (ctx->key_len) {
|
150
|
+
case 16:
|
151
|
+
boringssl_fips_inc_counter(fips_counter_evp_aes_128_ctr);
|
152
|
+
break;
|
153
|
+
|
154
|
+
case 32:
|
155
|
+
boringssl_fips_inc_counter(fips_counter_evp_aes_256_ctr);
|
156
|
+
break;
|
157
|
+
}
|
158
|
+
}
|
146
159
|
|
147
|
-
mode = ctx->cipher->flags & EVP_CIPH_MODE_MASK;
|
148
160
|
if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE) && !enc) {
|
149
161
|
if (hwaes_capable()) {
|
150
162
|
ret = aes_hw_set_decrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
|
@@ -353,6 +365,17 @@ static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
|
|
353
365
|
if (!iv && !key) {
|
354
366
|
return 1;
|
355
367
|
}
|
368
|
+
|
369
|
+
switch (ctx->key_len) {
|
370
|
+
case 16:
|
371
|
+
boringssl_fips_inc_counter(fips_counter_evp_aes_128_gcm);
|
372
|
+
break;
|
373
|
+
|
374
|
+
case 32:
|
375
|
+
boringssl_fips_inc_counter(fips_counter_evp_aes_256_gcm);
|
376
|
+
break;
|
377
|
+
}
|
378
|
+
|
356
379
|
if (key) {
|
357
380
|
OPENSSL_memset(&gctx->gcm, 0, sizeof(gctx->gcm));
|
358
381
|
gctx->ctr = aes_ctr_set_key(&gctx->ks.ks, &gctx->gcm.gcm_key, NULL, key,
|
@@ -247,13 +247,21 @@ static void sha512_256_init(EVP_MD_CTX *ctx) {
|
|
247
247
|
CHECK(SHA512_256_Init(ctx->md_data));
|
248
248
|
}
|
249
249
|
|
250
|
+
static void sha512_256_update(EVP_MD_CTX *ctx, const void *data, size_t count) {
|
251
|
+
CHECK(SHA512_256_Update(ctx->md_data, data, count));
|
252
|
+
}
|
253
|
+
|
254
|
+
static void sha512_256_final(EVP_MD_CTX *ctx, uint8_t *md) {
|
255
|
+
CHECK(SHA512_256_Final(md, ctx->md_data));
|
256
|
+
}
|
257
|
+
|
250
258
|
DEFINE_METHOD_FUNCTION(EVP_MD, EVP_sha512_256) {
|
251
259
|
out->type = NID_sha512_256;
|
252
260
|
out->md_size = SHA512_256_DIGEST_LENGTH;
|
253
261
|
out->flags = 0;
|
254
262
|
out->init = sha512_256_init;
|
255
|
-
out->update =
|
256
|
-
out->final =
|
263
|
+
out->update = sha512_256_update;
|
264
|
+
out->final = sha512_256_final;
|
257
265
|
out->block_size = 128;
|
258
266
|
out->ctx_size = sizeof(SHA512_CTX);
|
259
267
|
}
|
@@ -136,44 +136,6 @@ extern "C" {
|
|
136
136
|
#error "HASH_MAKE_STRING must be defined!"
|
137
137
|
#endif
|
138
138
|
|
139
|
-
#if defined(DATA_ORDER_IS_BIG_ENDIAN)
|
140
|
-
|
141
|
-
#define HOST_c2l(c, l) \
|
142
|
-
do { \
|
143
|
-
(l) = (((uint32_t)(*((c)++))) << 24); \
|
144
|
-
(l) |= (((uint32_t)(*((c)++))) << 16); \
|
145
|
-
(l) |= (((uint32_t)(*((c)++))) << 8); \
|
146
|
-
(l) |= (((uint32_t)(*((c)++)))); \
|
147
|
-
} while (0)
|
148
|
-
|
149
|
-
#define HOST_l2c(l, c) \
|
150
|
-
do { \
|
151
|
-
*((c)++) = (uint8_t)(((l) >> 24) & 0xff); \
|
152
|
-
*((c)++) = (uint8_t)(((l) >> 16) & 0xff); \
|
153
|
-
*((c)++) = (uint8_t)(((l) >> 8) & 0xff); \
|
154
|
-
*((c)++) = (uint8_t)(((l)) & 0xff); \
|
155
|
-
} while (0)
|
156
|
-
|
157
|
-
#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
158
|
-
|
159
|
-
#define HOST_c2l(c, l) \
|
160
|
-
do { \
|
161
|
-
(l) = (((uint32_t)(*((c)++)))); \
|
162
|
-
(l) |= (((uint32_t)(*((c)++))) << 8); \
|
163
|
-
(l) |= (((uint32_t)(*((c)++))) << 16); \
|
164
|
-
(l) |= (((uint32_t)(*((c)++))) << 24); \
|
165
|
-
} while (0)
|
166
|
-
|
167
|
-
#define HOST_l2c(l, c) \
|
168
|
-
do { \
|
169
|
-
*((c)++) = (uint8_t)(((l)) & 0xff); \
|
170
|
-
*((c)++) = (uint8_t)(((l) >> 8) & 0xff); \
|
171
|
-
*((c)++) = (uint8_t)(((l) >> 16) & 0xff); \
|
172
|
-
*((c)++) = (uint8_t)(((l) >> 24) & 0xff); \
|
173
|
-
} while (0)
|
174
|
-
|
175
|
-
#endif // DATA_ORDER
|
176
|
-
|
177
139
|
int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) {
|
178
140
|
const uint8_t *data = data_;
|
179
141
|
|
@@ -247,13 +209,12 @@ int HASH_FINAL(uint8_t out[HASH_DIGEST_LENGTH], HASH_CTX *c) {
|
|
247
209
|
// Append a 64-bit length to the block and process it.
|
248
210
|
uint8_t *p = c->data + HASH_CBLOCK - 8;
|
249
211
|
#if defined(DATA_ORDER_IS_BIG_ENDIAN)
|
250
|
-
|
251
|
-
|
212
|
+
CRYPTO_store_u32_be(p, c->Nh);
|
213
|
+
CRYPTO_store_u32_be(p + 4, c->Nl);
|
252
214
|
#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
253
|
-
|
254
|
-
|
215
|
+
CRYPTO_store_u32_le(p, c->Nl);
|
216
|
+
CRYPTO_store_u32_le(p + 4, c->Nh);
|
255
217
|
#endif
|
256
|
-
assert(p == c->data + HASH_CBLOCK);
|
257
218
|
HASH_BLOCK_DATA_ORDER(c->h, c->data, 1);
|
258
219
|
c->num = 0;
|
259
220
|
OPENSSL_memset(c->data, 0, HASH_CBLOCK);
|
@@ -1232,6 +1232,10 @@ void ec_set_to_safe_point(const EC_GROUP *group, EC_RAW_POINT *out) {
|
|
1232
1232
|
|
1233
1233
|
void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag) {}
|
1234
1234
|
|
1235
|
+
int EC_GROUP_get_asn1_flag(const EC_GROUP *group) {
|
1236
|
+
return OPENSSL_EC_NAMED_CURVE;
|
1237
|
+
}
|
1238
|
+
|
1235
1239
|
const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group) {
|
1236
1240
|
// This function exists purely to give callers a way to call
|
1237
1241
|
// |EC_METHOD_get_field_type|. cryptography.io crashes if |EC_GROUP_method_of|
|
@@ -729,10 +729,6 @@ struct ec_key_st {
|
|
729
729
|
EC_POINT *pub_key;
|
730
730
|
EC_WRAPPED_SCALAR *priv_key;
|
731
731
|
|
732
|
-
// fixed_k may contain a specific value of 'k', to be used in ECDSA signing.
|
733
|
-
// This is only for the FIPS power-on tests.
|
734
|
-
BIGNUM *fixed_k;
|
735
|
-
|
736
732
|
unsigned int enc_flag;
|
737
733
|
point_conversion_form_t conv_form;
|
738
734
|
|
@@ -61,9 +61,10 @@
|
|
61
61
|
#include <openssl/sha.h>
|
62
62
|
#include <openssl/type_check.h>
|
63
63
|
|
64
|
+
#include "../../internal.h"
|
64
65
|
#include "../bn/internal.h"
|
65
66
|
#include "../ec/internal.h"
|
66
|
-
#include "
|
67
|
+
#include "internal.h"
|
67
68
|
|
68
69
|
|
69
70
|
// digest_to_scalar interprets |digest_len| bytes from |digest| as a scalar for
|
@@ -198,70 +199,74 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len,
|
|
198
199
|
return 1;
|
199
200
|
}
|
200
201
|
|
201
|
-
static
|
202
|
-
|
203
|
-
|
202
|
+
static ECDSA_SIG *ecdsa_sign_impl(const EC_GROUP *group, int *out_retry,
|
203
|
+
const EC_SCALAR *priv_key, const EC_SCALAR *k,
|
204
|
+
const uint8_t *digest, size_t digest_len) {
|
205
|
+
*out_retry = 0;
|
206
|
+
|
204
207
|
// Check that the size of the group order is FIPS compliant (FIPS 186-4
|
205
208
|
// B.5.2).
|
206
|
-
const EC_GROUP *group = EC_KEY_get0_group(eckey);
|
207
209
|
const BIGNUM *order = EC_GROUP_get0_order(group);
|
208
210
|
if (BN_num_bits(order) < 160) {
|
209
211
|
OPENSSL_PUT_ERROR(ECDSA, EC_R_INVALID_GROUP_ORDER);
|
210
|
-
return
|
212
|
+
return NULL;
|
211
213
|
}
|
212
214
|
|
213
|
-
|
214
|
-
EC_SCALAR k;
|
215
|
+
// Compute r, the x-coordinate of k * generator.
|
215
216
|
EC_RAW_POINT tmp_point;
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
}
|
222
|
-
if (ec_scalar_is_zero(group, &k)) {
|
223
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_INTERNAL_ERROR);
|
224
|
-
goto err;
|
225
|
-
}
|
226
|
-
} else {
|
227
|
-
// Pass a SHA512 hash of the private key and digest as additional data
|
228
|
-
// into the RBG. This is a hardening measure against entropy failure.
|
229
|
-
OPENSSL_STATIC_ASSERT(SHA512_DIGEST_LENGTH >= 32,
|
230
|
-
"additional_data is too large for SHA-512");
|
231
|
-
SHA512_CTX sha;
|
232
|
-
uint8_t additional_data[SHA512_DIGEST_LENGTH];
|
233
|
-
SHA512_Init(&sha);
|
234
|
-
SHA512_Update(&sha, priv_key->words, order->width * sizeof(BN_ULONG));
|
235
|
-
SHA512_Update(&sha, digest, digest_len);
|
236
|
-
SHA512_Final(additional_data, &sha);
|
237
|
-
if (!ec_random_nonzero_scalar(group, &k, additional_data)) {
|
238
|
-
goto err;
|
239
|
-
}
|
240
|
-
}
|
217
|
+
EC_SCALAR r;
|
218
|
+
if (!ec_point_mul_scalar_base(group, &tmp_point, k) ||
|
219
|
+
!ec_get_x_coordinate_as_scalar(group, &r, &tmp_point)) {
|
220
|
+
return NULL;
|
221
|
+
}
|
241
222
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
ec_scalar_inv0_montgomery(group, out_kinv_mont, &k);
|
247
|
-
ec_scalar_from_montgomery(group, out_kinv_mont, out_kinv_mont);
|
248
|
-
|
249
|
-
// Compute r, the x-coordinate of generator * k.
|
250
|
-
if (!ec_point_mul_scalar_base(group, &tmp_point, &k) ||
|
251
|
-
!ec_get_x_coordinate_as_scalar(group, out_r, &tmp_point)) {
|
252
|
-
goto err;
|
253
|
-
}
|
254
|
-
} while (ec_scalar_is_zero(group, out_r));
|
223
|
+
if (ec_scalar_is_zero(group, &r)) {
|
224
|
+
*out_retry = 1;
|
225
|
+
return NULL;
|
226
|
+
}
|
255
227
|
|
256
|
-
|
228
|
+
// s = priv_key * r. Note if only one parameter is in the Montgomery domain,
|
229
|
+
// |ec_scalar_mod_mul_montgomery| will compute the answer in the normal
|
230
|
+
// domain.
|
231
|
+
EC_SCALAR s;
|
232
|
+
ec_scalar_to_montgomery(group, &s, &r);
|
233
|
+
ec_scalar_mul_montgomery(group, &s, priv_key, &s);
|
234
|
+
|
235
|
+
// s = m + priv_key * r.
|
236
|
+
EC_SCALAR tmp;
|
237
|
+
digest_to_scalar(group, &tmp, digest, digest_len);
|
238
|
+
ec_scalar_add(group, &s, &s, &tmp);
|
239
|
+
|
240
|
+
// s = k^-1 * (m + priv_key * r). First, we compute k^-1 in the Montgomery
|
241
|
+
// domain. This is |ec_scalar_to_montgomery| followed by
|
242
|
+
// |ec_scalar_inv0_montgomery|, but |ec_scalar_inv0_montgomery| followed by
|
243
|
+
// |ec_scalar_from_montgomery| is equivalent and slightly more efficient.
|
244
|
+
// Then, as above, only one parameter is in the Montgomery domain, so the
|
245
|
+
// result is in the normal domain. Finally, note k is non-zero (or computing r
|
246
|
+
// would fail), so the inverse must exist.
|
247
|
+
ec_scalar_inv0_montgomery(group, &tmp, k); // tmp = k^-1 R^2
|
248
|
+
ec_scalar_from_montgomery(group, &tmp, &tmp); // tmp = k^-1 R
|
249
|
+
ec_scalar_mul_montgomery(group, &s, &s, &tmp);
|
250
|
+
if (ec_scalar_is_zero(group, &s)) {
|
251
|
+
*out_retry = 1;
|
252
|
+
return NULL;
|
253
|
+
}
|
257
254
|
|
258
|
-
|
259
|
-
|
255
|
+
ECDSA_SIG *ret = ECDSA_SIG_new();
|
256
|
+
if (ret == NULL || //
|
257
|
+
!bn_set_words(ret->r, r.words, order->width) ||
|
258
|
+
!bn_set_words(ret->s, s.words, order->width)) {
|
259
|
+
ECDSA_SIG_free(ret);
|
260
|
+
return NULL;
|
261
|
+
}
|
260
262
|
return ret;
|
261
263
|
}
|
262
264
|
|
263
|
-
ECDSA_SIG *
|
264
|
-
|
265
|
+
ECDSA_SIG *ecdsa_sign_with_nonce_for_known_answer_test(const uint8_t *digest,
|
266
|
+
size_t digest_len,
|
267
|
+
const EC_KEY *eckey,
|
268
|
+
const uint8_t *nonce,
|
269
|
+
size_t nonce_len) {
|
265
270
|
if (eckey->ecdsa_meth && eckey->ecdsa_meth->sign) {
|
266
271
|
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_NOT_IMPLEMENTED);
|
267
272
|
return NULL;
|
@@ -272,57 +277,63 @@ ECDSA_SIG *ECDSA_do_sign(const uint8_t *digest, size_t digest_len,
|
|
272
277
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_PASSED_NULL_PARAMETER);
|
273
278
|
return NULL;
|
274
279
|
}
|
275
|
-
const BIGNUM *order = EC_GROUP_get0_order(group);
|
276
280
|
const EC_SCALAR *priv_key = &eckey->priv_key->scalar;
|
277
281
|
|
278
|
-
|
279
|
-
|
280
|
-
EC_SCALAR kinv_mont, r_mont, s, m, tmp;
|
281
|
-
if (ret == NULL) {
|
282
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
|
282
|
+
EC_SCALAR k;
|
283
|
+
if (!ec_scalar_from_bytes(group, &k, nonce, nonce_len)) {
|
283
284
|
return NULL;
|
284
285
|
}
|
286
|
+
int retry_ignored;
|
287
|
+
return ecdsa_sign_impl(group, &retry_ignored, priv_key, &k, digest,
|
288
|
+
digest_len);
|
289
|
+
}
|
285
290
|
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
// Compute priv_key * r (mod order). Note if only one parameter is in the
|
295
|
-
// Montgomery domain, |ec_scalar_mod_mul_montgomery| will compute the answer
|
296
|
-
// in the normal domain.
|
297
|
-
ec_scalar_to_montgomery(group, &r_mont, &r_mont);
|
298
|
-
ec_scalar_mul_montgomery(group, &s, priv_key, &r_mont);
|
291
|
+
// This function is only exported for testing and is not called in production
|
292
|
+
// code.
|
293
|
+
ECDSA_SIG *ECDSA_sign_with_nonce_and_leak_private_key_for_testing(
|
294
|
+
const uint8_t *digest, size_t digest_len, const EC_KEY *eckey,
|
295
|
+
const uint8_t *nonce, size_t nonce_len) {
|
296
|
+
return ecdsa_sign_with_nonce_for_known_answer_test(digest, digest_len, eckey,
|
297
|
+
nonce, nonce_len);
|
298
|
+
}
|
299
299
|
|
300
|
-
|
301
|
-
|
300
|
+
ECDSA_SIG *ECDSA_do_sign(const uint8_t *digest, size_t digest_len,
|
301
|
+
const EC_KEY *eckey) {
|
302
|
+
if (eckey->ecdsa_meth && eckey->ecdsa_meth->sign) {
|
303
|
+
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_NOT_IMPLEMENTED);
|
304
|
+
return NULL;
|
305
|
+
}
|
302
306
|
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
goto err;
|
308
|
-
}
|
309
|
-
if (!BN_is_zero(ret->s)) {
|
310
|
-
// s != 0 => we have a valid signature
|
311
|
-
break;
|
312
|
-
}
|
307
|
+
const EC_GROUP *group = EC_KEY_get0_group(eckey);
|
308
|
+
if (group == NULL || eckey->priv_key == NULL) {
|
309
|
+
OPENSSL_PUT_ERROR(ECDSA, ERR_R_PASSED_NULL_PARAMETER);
|
310
|
+
return NULL;
|
313
311
|
}
|
312
|
+
const BIGNUM *order = EC_GROUP_get0_order(group);
|
313
|
+
const EC_SCALAR *priv_key = &eckey->priv_key->scalar;
|
314
314
|
|
315
|
-
|
315
|
+
// Pass a SHA512 hash of the private key and digest as additional data
|
316
|
+
// into the RBG. This is a hardening measure against entropy failure.
|
317
|
+
OPENSSL_STATIC_ASSERT(SHA512_DIGEST_LENGTH >= 32,
|
318
|
+
"additional_data is too large for SHA-512");
|
319
|
+
SHA512_CTX sha;
|
320
|
+
uint8_t additional_data[SHA512_DIGEST_LENGTH];
|
321
|
+
SHA512_Init(&sha);
|
322
|
+
SHA512_Update(&sha, priv_key->words, order->width * sizeof(BN_ULONG));
|
323
|
+
SHA512_Update(&sha, digest, digest_len);
|
324
|
+
SHA512_Final(additional_data, &sha);
|
316
325
|
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
326
|
+
for (;;) {
|
327
|
+
EC_SCALAR k;
|
328
|
+
if (!ec_random_nonzero_scalar(group, &k, additional_data)) {
|
329
|
+
return NULL;
|
330
|
+
}
|
331
|
+
|
332
|
+
int retry;
|
333
|
+
ECDSA_SIG *sig =
|
334
|
+
ecdsa_sign_impl(group, &retry, priv_key, &k, digest, digest_len);
|
335
|
+
if (sig != NULL || !retry) {
|
336
|
+
return sig;
|
337
|
+
}
|
321
338
|
}
|
322
|
-
OPENSSL_cleanse(&kinv_mont, sizeof(kinv_mont));
|
323
|
-
OPENSSL_cleanse(&r_mont, sizeof(r_mont));
|
324
|
-
OPENSSL_cleanse(&s, sizeof(s));
|
325
|
-
OPENSSL_cleanse(&tmp, sizeof(tmp));
|
326
|
-
OPENSSL_cleanse(&m, sizeof(m));
|
327
|
-
return ret;
|
328
339
|
}
|