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
@@ -70,6 +70,8 @@
|
|
70
70
|
// this writing, so there is no need for a common collector/padding
|
71
71
|
// implementation yet.
|
72
72
|
|
73
|
+
static int sha512_final_impl(uint8_t *out, SHA512_CTX *sha);
|
74
|
+
|
73
75
|
int SHA384_Init(SHA512_CTX *sha) {
|
74
76
|
sha->h[0] = UINT64_C(0xcbbb9d5dc1059ed8);
|
75
77
|
sha->h[1] = UINT64_C(0x629a292a367cd507);
|
@@ -146,8 +148,8 @@ uint8_t *SHA512_256(const uint8_t *data, size_t len,
|
|
146
148
|
uint8_t out[SHA512_256_DIGEST_LENGTH]) {
|
147
149
|
SHA512_CTX ctx;
|
148
150
|
SHA512_256_Init(&ctx);
|
149
|
-
|
150
|
-
|
151
|
+
SHA512_256_Update(&ctx, data, len);
|
152
|
+
SHA512_256_Final(out, &ctx);
|
151
153
|
OPENSSL_cleanse(&ctx, sizeof(ctx));
|
152
154
|
return out;
|
153
155
|
}
|
@@ -161,7 +163,8 @@ static void sha512_block_data_order(uint64_t *state, const uint8_t *in,
|
|
161
163
|
int SHA384_Final(uint8_t out[SHA384_DIGEST_LENGTH], SHA512_CTX *sha) {
|
162
164
|
// |SHA384_Init| sets |sha->md_len| to |SHA384_DIGEST_LENGTH|, so this has a
|
163
165
|
// |smaller output.
|
164
|
-
|
166
|
+
assert(sha->md_len == SHA384_DIGEST_LENGTH);
|
167
|
+
return sha512_final_impl(out, sha);
|
165
168
|
}
|
166
169
|
|
167
170
|
int SHA384_Update(SHA512_CTX *sha, const void *data, size_t len) {
|
@@ -172,11 +175,11 @@ int SHA512_256_Update(SHA512_CTX *sha, const void *data, size_t len) {
|
|
172
175
|
return SHA512_Update(sha, data, len);
|
173
176
|
}
|
174
177
|
|
175
|
-
int SHA512_256_Final(uint8_t out[SHA512_256_DIGEST_LENGTH],
|
176
|
-
SHA512_CTX *sha) {
|
178
|
+
int SHA512_256_Final(uint8_t out[SHA512_256_DIGEST_LENGTH], SHA512_CTX *sha) {
|
177
179
|
// |SHA512_256_Init| sets |sha->md_len| to |SHA512_256_DIGEST_LENGTH|, so this
|
178
180
|
// has a |smaller output.
|
179
|
-
|
181
|
+
assert(sha->md_len == SHA512_256_DIGEST_LENGTH);
|
182
|
+
return sha512_final_impl(out, sha);
|
180
183
|
}
|
181
184
|
|
182
185
|
void SHA512_Transform(SHA512_CTX *c, const uint8_t block[SHA512_CBLOCK]) {
|
@@ -232,6 +235,15 @@ int SHA512_Update(SHA512_CTX *c, const void *in_data, size_t len) {
|
|
232
235
|
}
|
233
236
|
|
234
237
|
int SHA512_Final(uint8_t out[SHA512_DIGEST_LENGTH], SHA512_CTX *sha) {
|
238
|
+
// Ideally we would assert |sha->md_len| is |SHA512_DIGEST_LENGTH| to match
|
239
|
+
// the size hint, but calling code often pairs |SHA384_Init| with
|
240
|
+
// |SHA512_Final| and expects |sha->md_len| to carry the over.
|
241
|
+
//
|
242
|
+
// TODO(davidben): Add an assert and fix code to match them up.
|
243
|
+
return sha512_final_impl(out, sha);
|
244
|
+
}
|
245
|
+
|
246
|
+
static int sha512_final_impl(uint8_t *out, SHA512_CTX *sha) {
|
235
247
|
uint8_t *p = sha->p;
|
236
248
|
size_t n = sha->num;
|
237
249
|
|
@@ -244,22 +256,8 @@ int SHA512_Final(uint8_t out[SHA512_DIGEST_LENGTH], SHA512_CTX *sha) {
|
|
244
256
|
}
|
245
257
|
|
246
258
|
OPENSSL_memset(p + n, 0, sizeof(sha->p) - 16 - n);
|
247
|
-
p
|
248
|
-
p
|
249
|
-
p[sizeof(sha->p) - 3] = (uint8_t)(sha->Nl >> 16);
|
250
|
-
p[sizeof(sha->p) - 4] = (uint8_t)(sha->Nl >> 24);
|
251
|
-
p[sizeof(sha->p) - 5] = (uint8_t)(sha->Nl >> 32);
|
252
|
-
p[sizeof(sha->p) - 6] = (uint8_t)(sha->Nl >> 40);
|
253
|
-
p[sizeof(sha->p) - 7] = (uint8_t)(sha->Nl >> 48);
|
254
|
-
p[sizeof(sha->p) - 8] = (uint8_t)(sha->Nl >> 56);
|
255
|
-
p[sizeof(sha->p) - 9] = (uint8_t)(sha->Nh);
|
256
|
-
p[sizeof(sha->p) - 10] = (uint8_t)(sha->Nh >> 8);
|
257
|
-
p[sizeof(sha->p) - 11] = (uint8_t)(sha->Nh >> 16);
|
258
|
-
p[sizeof(sha->p) - 12] = (uint8_t)(sha->Nh >> 24);
|
259
|
-
p[sizeof(sha->p) - 13] = (uint8_t)(sha->Nh >> 32);
|
260
|
-
p[sizeof(sha->p) - 14] = (uint8_t)(sha->Nh >> 40);
|
261
|
-
p[sizeof(sha->p) - 15] = (uint8_t)(sha->Nh >> 48);
|
262
|
-
p[sizeof(sha->p) - 16] = (uint8_t)(sha->Nh >> 56);
|
259
|
+
CRYPTO_store_u64_be(p + sizeof(sha->p) - 16, sha->Nh);
|
260
|
+
CRYPTO_store_u64_be(p + sizeof(sha->p) - 8, sha->Nl);
|
263
261
|
|
264
262
|
sha512_block_data_order(sha->h, p, 1);
|
265
263
|
|
@@ -356,12 +354,6 @@ static const uint64_t K512[80] = {
|
|
356
354
|
#define ROTR(x, s) (((x) >> s) | (x) << (64 - s))
|
357
355
|
#endif
|
358
356
|
|
359
|
-
static inline uint64_t load_u64_be(const void *ptr) {
|
360
|
-
uint64_t ret;
|
361
|
-
OPENSSL_memcpy(&ret, ptr, sizeof(ret));
|
362
|
-
return CRYPTO_bswap8(ret);
|
363
|
-
}
|
364
|
-
|
365
357
|
#define Sigma0(x) (ROTR((x), 28) ^ ROTR((x), 34) ^ ROTR((x), 39))
|
366
358
|
#define Sigma1(x) (ROTR((x), 14) ^ ROTR((x), 18) ^ ROTR((x), 41))
|
367
359
|
#define sigma0(x) (ROTR((x), 1) ^ ROTR((x), 8) ^ ((x) >> 7))
|
@@ -392,7 +384,7 @@ static void sha512_block_data_order(uint64_t *state, const uint8_t *in,
|
|
392
384
|
F[7] = state[7];
|
393
385
|
|
394
386
|
for (i = 0; i < 16; i++, F--) {
|
395
|
-
T =
|
387
|
+
T = CRYPTO_load_u64_be(in + i * 8);
|
396
388
|
F[0] = A;
|
397
389
|
F[4] = E;
|
398
390
|
F[8] = T;
|
@@ -464,37 +456,37 @@ static void sha512_block_data_order(uint64_t *state, const uint8_t *in,
|
|
464
456
|
g = state[6];
|
465
457
|
h = state[7];
|
466
458
|
|
467
|
-
T1 = X[0] =
|
459
|
+
T1 = X[0] = CRYPTO_load_u64_be(in);
|
468
460
|
ROUND_00_15(0, a, b, c, d, e, f, g, h);
|
469
|
-
T1 = X[1] =
|
461
|
+
T1 = X[1] = CRYPTO_load_u64_be(in + 8);
|
470
462
|
ROUND_00_15(1, h, a, b, c, d, e, f, g);
|
471
|
-
T1 = X[2] =
|
463
|
+
T1 = X[2] = CRYPTO_load_u64_be(in + 2 * 8);
|
472
464
|
ROUND_00_15(2, g, h, a, b, c, d, e, f);
|
473
|
-
T1 = X[3] =
|
465
|
+
T1 = X[3] = CRYPTO_load_u64_be(in + 3 * 8);
|
474
466
|
ROUND_00_15(3, f, g, h, a, b, c, d, e);
|
475
|
-
T1 = X[4] =
|
467
|
+
T1 = X[4] = CRYPTO_load_u64_be(in + 4 * 8);
|
476
468
|
ROUND_00_15(4, e, f, g, h, a, b, c, d);
|
477
|
-
T1 = X[5] =
|
469
|
+
T1 = X[5] = CRYPTO_load_u64_be(in + 5 * 8);
|
478
470
|
ROUND_00_15(5, d, e, f, g, h, a, b, c);
|
479
|
-
T1 = X[6] =
|
471
|
+
T1 = X[6] = CRYPTO_load_u64_be(in + 6 * 8);
|
480
472
|
ROUND_00_15(6, c, d, e, f, g, h, a, b);
|
481
|
-
T1 = X[7] =
|
473
|
+
T1 = X[7] = CRYPTO_load_u64_be(in + 7 * 8);
|
482
474
|
ROUND_00_15(7, b, c, d, e, f, g, h, a);
|
483
|
-
T1 = X[8] =
|
475
|
+
T1 = X[8] = CRYPTO_load_u64_be(in + 8 * 8);
|
484
476
|
ROUND_00_15(8, a, b, c, d, e, f, g, h);
|
485
|
-
T1 = X[9] =
|
477
|
+
T1 = X[9] = CRYPTO_load_u64_be(in + 9 * 8);
|
486
478
|
ROUND_00_15(9, h, a, b, c, d, e, f, g);
|
487
|
-
T1 = X[10] =
|
479
|
+
T1 = X[10] = CRYPTO_load_u64_be(in + 10 * 8);
|
488
480
|
ROUND_00_15(10, g, h, a, b, c, d, e, f);
|
489
|
-
T1 = X[11] =
|
481
|
+
T1 = X[11] = CRYPTO_load_u64_be(in + 11 * 8);
|
490
482
|
ROUND_00_15(11, f, g, h, a, b, c, d, e);
|
491
|
-
T1 = X[12] =
|
483
|
+
T1 = X[12] = CRYPTO_load_u64_be(in + 12 * 8);
|
492
484
|
ROUND_00_15(12, e, f, g, h, a, b, c, d);
|
493
|
-
T1 = X[13] =
|
485
|
+
T1 = X[13] = CRYPTO_load_u64_be(in + 13 * 8);
|
494
486
|
ROUND_00_15(13, d, e, f, g, h, a, b, c);
|
495
|
-
T1 = X[14] =
|
487
|
+
T1 = X[14] = CRYPTO_load_u64_be(in + 14 * 8);
|
496
488
|
ROUND_00_15(14, c, d, e, f, g, h, a, b);
|
497
|
-
T1 = X[15] =
|
489
|
+
T1 = X[15] = CRYPTO_load_u64_be(in + 15 * 8);
|
498
490
|
ROUND_00_15(15, b, c, d, e, f, g, h, a);
|
499
491
|
|
500
492
|
for (i = 16; i < 80; i += 16) {
|
@@ -17,9 +17,10 @@
|
|
17
17
|
|
18
18
|
#include <openssl/aead.h>
|
19
19
|
#include <openssl/bytestring.h>
|
20
|
+
#include <openssl/curve25519.h>
|
20
21
|
#include <openssl/digest.h>
|
21
22
|
#include <openssl/err.h>
|
22
|
-
#include <openssl/
|
23
|
+
#include <openssl/evp_errors.h>
|
23
24
|
#include <openssl/hkdf.h>
|
24
25
|
#include <openssl/sha.h>
|
25
26
|
|
@@ -31,9 +32,6 @@
|
|
31
32
|
|
32
33
|
#define KEM_CONTEXT_LEN (2 * X25519_PUBLIC_VALUE_LEN)
|
33
34
|
|
34
|
-
// HPKE KEM scheme IDs.
|
35
|
-
#define HPKE_DHKEM_X25519_HKDF_SHA256 0x0020
|
36
|
-
|
37
35
|
// This is strlen("HPKE") + 3 * sizeof(uint16_t).
|
38
36
|
#define HPKE_SUITE_ID_LEN 10
|
39
37
|
|
@@ -50,8 +48,8 @@ static int add_label_string(CBB *cbb, const char *label) {
|
|
50
48
|
// that the suite_id used outside of the KEM also includes the kdf_id and
|
51
49
|
// aead_id.
|
52
50
|
static const uint8_t kX25519SuiteID[] = {
|
53
|
-
'K', 'E', 'M',
|
54
|
-
|
51
|
+
'K', 'E', 'M', EVP_HPKE_DHKEM_X25519_HKDF_SHA256 >> 8,
|
52
|
+
EVP_HPKE_DHKEM_X25519_HKDF_SHA256 & 0x00ff};
|
55
53
|
|
56
54
|
// The suite_id for non-KEM pieces of HPKE is defined as concat("HPKE",
|
57
55
|
// I2OSP(kem_id, 2), I2OSP(kdf_id, 2), I2OSP(aead_id, 2)).
|
@@ -60,7 +58,7 @@ static int hpke_build_suite_id(uint8_t out[HPKE_SUITE_ID_LEN], uint16_t kdf_id,
|
|
60
58
|
CBB cbb;
|
61
59
|
int ret = CBB_init_fixed(&cbb, out, HPKE_SUITE_ID_LEN) &&
|
62
60
|
add_label_string(&cbb, "HPKE") &&
|
63
|
-
CBB_add_u16(&cbb,
|
61
|
+
CBB_add_u16(&cbb, EVP_HPKE_DHKEM_X25519_HKDF_SHA256) &&
|
64
62
|
CBB_add_u16(&cbb, kdf_id) &&
|
65
63
|
CBB_add_u16(&cbb, aead_id);
|
66
64
|
CBB_cleanup(&cbb);
|
@@ -125,11 +123,19 @@ static int hpke_extract_and_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
|
|
125
123
|
return 1;
|
126
124
|
}
|
127
125
|
|
126
|
+
uint16_t EVP_HPKE_CTX_get_aead_id(const EVP_HPKE_CTX *hpke) {
|
127
|
+
return hpke->aead_id;
|
128
|
+
}
|
129
|
+
|
130
|
+
uint16_t EVP_HPKE_CTX_get_kdf_id(const EVP_HPKE_CTX *hpke) {
|
131
|
+
return hpke->kdf_id;
|
132
|
+
}
|
133
|
+
|
128
134
|
const EVP_AEAD *EVP_HPKE_get_aead(uint16_t aead_id) {
|
129
135
|
switch (aead_id) {
|
130
|
-
case
|
136
|
+
case EVP_HPKE_AEAD_AES_128_GCM:
|
131
137
|
return EVP_aead_aes_128_gcm();
|
132
|
-
case
|
138
|
+
case EVP_HPKE_AEAD_AES_256_GCM:
|
133
139
|
return EVP_aead_aes_256_gcm();
|
134
140
|
case EVP_HPKE_AEAD_CHACHA20POLY1305:
|
135
141
|
return EVP_aead_chacha20_poly1305();
|
@@ -316,27 +322,44 @@ void EVP_HPKE_CTX_cleanup(EVP_HPKE_CTX *ctx) {
|
|
316
322
|
EVP_AEAD_CTX_cleanup(&ctx->aead_ctx);
|
317
323
|
}
|
318
324
|
|
319
|
-
int EVP_HPKE_CTX_setup_base_s_x25519(
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
325
|
+
int EVP_HPKE_CTX_setup_base_s_x25519(EVP_HPKE_CTX *hpke, uint8_t *out_enc,
|
326
|
+
size_t out_enc_len, uint16_t kdf_id,
|
327
|
+
uint16_t aead_id,
|
328
|
+
const uint8_t *peer_public_value,
|
329
|
+
size_t peer_public_value_len,
|
330
|
+
const uint8_t *info, size_t info_len) {
|
331
|
+
if (out_enc_len != X25519_PUBLIC_VALUE_LEN) {
|
332
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
|
333
|
+
return 0;
|
334
|
+
}
|
335
|
+
|
324
336
|
// The GenerateKeyPair() step technically belongs in the KEM's Encap()
|
325
337
|
// function, but we've moved it up a layer to make it easier for tests to
|
326
338
|
// inject an ephemeral keypair.
|
327
339
|
uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN];
|
328
340
|
X25519_keypair(out_enc, ephemeral_private);
|
329
341
|
return EVP_HPKE_CTX_setup_base_s_x25519_for_test(
|
330
|
-
hpke, kdf_id, aead_id, peer_public_value,
|
331
|
-
ephemeral_private, out_enc
|
342
|
+
hpke, kdf_id, aead_id, peer_public_value, peer_public_value_len, info,
|
343
|
+
info_len, ephemeral_private, sizeof(ephemeral_private), out_enc,
|
344
|
+
out_enc_len);
|
332
345
|
}
|
333
346
|
|
334
347
|
int EVP_HPKE_CTX_setup_base_s_x25519_for_test(
|
335
348
|
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
336
|
-
const uint8_t peer_public_value
|
337
|
-
const uint8_t *info, size_t info_len,
|
338
|
-
const uint8_t
|
339
|
-
|
349
|
+
const uint8_t *peer_public_value, size_t peer_public_value_len,
|
350
|
+
const uint8_t *info, size_t info_len, const uint8_t *ephemeral_private,
|
351
|
+
size_t ephemeral_private_len, const uint8_t *ephemeral_public,
|
352
|
+
size_t ephemeral_public_len) {
|
353
|
+
if (peer_public_value_len != X25519_PUBLIC_VALUE_LEN) {
|
354
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
|
355
|
+
return 0;
|
356
|
+
}
|
357
|
+
if (ephemeral_private_len != X25519_PRIVATE_KEY_LEN ||
|
358
|
+
ephemeral_public_len != X25519_PUBLIC_VALUE_LEN) {
|
359
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
|
360
|
+
return 0;
|
361
|
+
}
|
362
|
+
|
340
363
|
hpke->is_sender = 1;
|
341
364
|
hpke->kdf_id = kdf_id;
|
342
365
|
hpke->aead_id = aead_id;
|
@@ -355,12 +378,23 @@ int EVP_HPKE_CTX_setup_base_s_x25519_for_test(
|
|
355
378
|
return 1;
|
356
379
|
}
|
357
380
|
|
358
|
-
int EVP_HPKE_CTX_setup_base_r_x25519(
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
381
|
+
int EVP_HPKE_CTX_setup_base_r_x25519(EVP_HPKE_CTX *hpke, uint16_t kdf_id,
|
382
|
+
uint16_t aead_id, const uint8_t *enc,
|
383
|
+
size_t enc_len, const uint8_t *public_key,
|
384
|
+
size_t public_key_len,
|
385
|
+
const uint8_t *private_key,
|
386
|
+
size_t private_key_len,
|
387
|
+
const uint8_t *info, size_t info_len) {
|
388
|
+
if (enc_len != X25519_PUBLIC_VALUE_LEN) {
|
389
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
|
390
|
+
return 0;
|
391
|
+
}
|
392
|
+
if (public_key_len != X25519_PUBLIC_VALUE_LEN ||
|
393
|
+
private_key_len != X25519_PRIVATE_KEY_LEN) {
|
394
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
|
395
|
+
return 0;
|
396
|
+
}
|
397
|
+
|
364
398
|
hpke->is_sender = 0;
|
365
399
|
hpke->kdf_id = kdf_id;
|
366
400
|
hpke->aead_id = aead_id;
|
@@ -378,29 +412,47 @@ int EVP_HPKE_CTX_setup_base_r_x25519(
|
|
378
412
|
return 1;
|
379
413
|
}
|
380
414
|
|
381
|
-
int EVP_HPKE_CTX_setup_psk_s_x25519(
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
415
|
+
int EVP_HPKE_CTX_setup_psk_s_x25519(EVP_HPKE_CTX *hpke, uint8_t *out_enc,
|
416
|
+
size_t out_enc_len, uint16_t kdf_id,
|
417
|
+
uint16_t aead_id,
|
418
|
+
const uint8_t *peer_public_value,
|
419
|
+
size_t peer_public_value_len,
|
420
|
+
const uint8_t *info, size_t info_len,
|
421
|
+
const uint8_t *psk, size_t psk_len,
|
422
|
+
const uint8_t *psk_id, size_t psk_id_len) {
|
423
|
+
if (out_enc_len != X25519_PUBLIC_VALUE_LEN) {
|
424
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
|
425
|
+
return 0;
|
426
|
+
}
|
427
|
+
|
387
428
|
// The GenerateKeyPair() step technically belongs in the KEM's Encap()
|
388
429
|
// function, but we've moved it up a layer to make it easier for tests to
|
389
430
|
// inject an ephemeral keypair.
|
390
431
|
uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN];
|
391
432
|
X25519_keypair(out_enc, ephemeral_private);
|
392
433
|
return EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
|
393
|
-
hpke, kdf_id, aead_id, peer_public_value,
|
394
|
-
psk_id, psk_id_len, ephemeral_private,
|
434
|
+
hpke, kdf_id, aead_id, peer_public_value, peer_public_value_len, info,
|
435
|
+
info_len, psk, psk_len, psk_id, psk_id_len, ephemeral_private,
|
436
|
+
sizeof(ephemeral_private), out_enc, out_enc_len);
|
395
437
|
}
|
396
438
|
|
397
439
|
int EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
|
398
440
|
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
399
|
-
const uint8_t peer_public_value
|
441
|
+
const uint8_t *peer_public_value, size_t peer_public_value_len,
|
400
442
|
const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len,
|
401
|
-
const uint8_t *psk_id, size_t psk_id_len,
|
402
|
-
const uint8_t
|
403
|
-
|
443
|
+
const uint8_t *psk_id, size_t psk_id_len, const uint8_t *ephemeral_private,
|
444
|
+
size_t ephemeral_private_len, const uint8_t *ephemeral_public,
|
445
|
+
size_t ephemeral_public_len) {
|
446
|
+
if (peer_public_value_len != X25519_PUBLIC_VALUE_LEN) {
|
447
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
|
448
|
+
return 0;
|
449
|
+
}
|
450
|
+
if (ephemeral_private_len != X25519_PRIVATE_KEY_LEN ||
|
451
|
+
ephemeral_public_len != X25519_PUBLIC_VALUE_LEN) {
|
452
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
|
453
|
+
return 0;
|
454
|
+
}
|
455
|
+
|
404
456
|
hpke->is_sender = 1;
|
405
457
|
hpke->kdf_id = kdf_id;
|
406
458
|
hpke->aead_id = aead_id;
|
@@ -420,12 +472,21 @@ int EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
|
|
420
472
|
}
|
421
473
|
|
422
474
|
int EVP_HPKE_CTX_setup_psk_r_x25519(
|
423
|
-
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
424
|
-
const uint8_t
|
425
|
-
const uint8_t
|
426
|
-
const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
|
475
|
+
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id, const uint8_t *enc,
|
476
|
+
size_t enc_len, const uint8_t *public_key, size_t public_key_len,
|
477
|
+
const uint8_t *private_key, size_t private_key_len, const uint8_t *info,
|
427
478
|
size_t info_len, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id,
|
428
479
|
size_t psk_id_len) {
|
480
|
+
if (enc_len != X25519_PUBLIC_VALUE_LEN) {
|
481
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
|
482
|
+
return 0;
|
483
|
+
}
|
484
|
+
if (public_key_len != X25519_PUBLIC_VALUE_LEN ||
|
485
|
+
private_key_len != X25519_PRIVATE_KEY_LEN) {
|
486
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
|
487
|
+
return 0;
|
488
|
+
}
|
489
|
+
|
429
490
|
hpke->is_sender = 0;
|
430
491
|
hpke->kdf_id = kdf_id;
|
431
492
|
hpke->aead_id = aead_id;
|
@@ -33,9 +33,12 @@ extern "C" {
|
|
33
33
|
//
|
34
34
|
// See https://tools.ietf.org/html/draft-irtf-cfrg-hpke-07.
|
35
35
|
|
36
|
+
// EVP_HPKE_DHKEM_* are KEM identifiers.
|
37
|
+
#define EVP_HPKE_DHKEM_X25519_HKDF_SHA256 0x0020
|
38
|
+
|
36
39
|
// EVP_HPKE_AEAD_* are AEAD identifiers.
|
37
|
-
#define
|
38
|
-
#define
|
40
|
+
#define EVP_HPKE_AEAD_AES_128_GCM 0x0001
|
41
|
+
#define EVP_HPKE_AEAD_AES_256_GCM 0x0002
|
39
42
|
#define EVP_HPKE_AEAD_CHACHA20POLY1305 0x0003
|
40
43
|
|
41
44
|
// EVP_HPKE_HKDF_* are HKDF identifiers.
|
@@ -86,32 +89,35 @@ OPENSSL_EXPORT void EVP_HPKE_CTX_cleanup(EVP_HPKE_CTX *ctx);
|
|
86
89
|
// recipient's public key). It returns one on success, and zero otherwise. Note
|
87
90
|
// that this function will fail if |peer_public_value| is invalid.
|
88
91
|
//
|
89
|
-
// This function writes the encapsulated shared secret
|
92
|
+
// This function writes the encapsulated shared secret, a Diffie-Hellman public
|
93
|
+
// key, to |out_enc|. It will fail if the buffer's size in |out_enc_len| is not
|
94
|
+
// exactly |X25519_PUBLIC_VALUE_LEN|.
|
90
95
|
OPENSSL_EXPORT int EVP_HPKE_CTX_setup_base_s_x25519(
|
91
|
-
EVP_HPKE_CTX *hpke, uint8_t out_enc
|
92
|
-
uint16_t
|
93
|
-
const uint8_t
|
94
|
-
const uint8_t *info, size_t info_len);
|
96
|
+
EVP_HPKE_CTX *hpke, uint8_t *out_enc, size_t out_enc_len, uint16_t kdf_id,
|
97
|
+
uint16_t aead_id, const uint8_t *peer_public_value,
|
98
|
+
size_t peer_public_value_len, const uint8_t *info, size_t info_len);
|
95
99
|
|
96
100
|
// EVP_HPKE_CTX_setup_base_s_x25519_for_test behaves like
|
97
101
|
// |EVP_HPKE_CTX_setup_base_s_x25519|, but takes a pre-generated ephemeral
|
98
|
-
// sender key.
|
102
|
+
// sender key. The caller ensures that |ephemeral_public| and
|
103
|
+
// |ephemeral_private| are a valid keypair.
|
99
104
|
OPENSSL_EXPORT int EVP_HPKE_CTX_setup_base_s_x25519_for_test(
|
100
105
|
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
101
|
-
const uint8_t peer_public_value
|
102
|
-
const uint8_t *info, size_t info_len,
|
103
|
-
const uint8_t
|
104
|
-
|
106
|
+
const uint8_t *peer_public_value, size_t peer_public_value_len,
|
107
|
+
const uint8_t *info, size_t info_len, const uint8_t *ephemeral_private,
|
108
|
+
size_t ephemeral_private_len, const uint8_t *ephemeral_public,
|
109
|
+
size_t ephemeral_public_len);
|
105
110
|
|
106
111
|
// EVP_HPKE_CTX_setup_base_r_x25519 sets up |hpke| as a recipient context that
|
107
|
-
// can decrypt messages.
|
108
|
-
//
|
109
|
-
//
|
112
|
+
// can decrypt messages. It returns one on success, and zero otherwise.
|
113
|
+
//
|
114
|
+
// The recipient's keypair is composed of |public_key| and |private_key|, and
|
115
|
+
// |enc| is the encapsulated shared secret from the sender. If |enc| is invalid,
|
116
|
+
// this function will fail.
|
110
117
|
OPENSSL_EXPORT int EVP_HPKE_CTX_setup_base_r_x25519(
|
111
|
-
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
112
|
-
const uint8_t
|
113
|
-
const uint8_t
|
114
|
-
const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
|
118
|
+
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id, const uint8_t *enc,
|
119
|
+
size_t enc_len, const uint8_t *public_key, size_t public_key_len,
|
120
|
+
const uint8_t *private_key, size_t private_key_len, const uint8_t *info,
|
115
121
|
size_t info_len);
|
116
122
|
|
117
123
|
// EVP_HPKE_CTX_setup_psk_s_x25519 sets up |hpke| as a sender context that can
|
@@ -124,39 +130,44 @@ OPENSSL_EXPORT int EVP_HPKE_CTX_setup_base_r_x25519(
|
|
124
130
|
// must be nonempty (|psk_len| and |psk_id_len| must be non-zero), or this
|
125
131
|
// function will fail.
|
126
132
|
//
|
127
|
-
// This function writes the encapsulated shared secret
|
133
|
+
// This function writes the encapsulated shared secret, a Diffie-Hellman public
|
134
|
+
// key, to |out_enc|. It will fail if the buffer's size in |out_enc_len| is not
|
135
|
+
// exactly |X25519_PUBLIC_VALUE_LEN|.
|
128
136
|
OPENSSL_EXPORT int EVP_HPKE_CTX_setup_psk_s_x25519(
|
129
|
-
EVP_HPKE_CTX *hpke, uint8_t out_enc
|
130
|
-
uint16_t
|
131
|
-
const uint8_t
|
132
|
-
const uint8_t *
|
133
|
-
|
137
|
+
EVP_HPKE_CTX *hpke, uint8_t *out_enc, size_t out_enc_len, uint16_t kdf_id,
|
138
|
+
uint16_t aead_id, const uint8_t *peer_public_value,
|
139
|
+
size_t peer_public_value_len, const uint8_t *info, size_t info_len,
|
140
|
+
const uint8_t *psk, size_t psk_len, const uint8_t *psk_id,
|
141
|
+
size_t psk_id_len);
|
134
142
|
|
135
143
|
// EVP_HPKE_CTX_setup_psk_s_x25519_for_test behaves like
|
136
144
|
// |EVP_HPKE_CTX_setup_psk_s_x25519|, but takes a pre-generated ephemeral sender
|
137
|
-
// key.
|
145
|
+
// key. The caller ensures that |ephemeral_public| and |ephemeral_private| are a
|
146
|
+
// valid keypair.
|
138
147
|
OPENSSL_EXPORT int EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
|
139
148
|
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
140
|
-
const uint8_t peer_public_value
|
149
|
+
const uint8_t *peer_public_value, size_t peer_public_value_len,
|
141
150
|
const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len,
|
142
|
-
const uint8_t *psk_id, size_t psk_id_len,
|
143
|
-
const uint8_t
|
144
|
-
|
151
|
+
const uint8_t *psk_id, size_t psk_id_len, const uint8_t *ephemeral_private,
|
152
|
+
size_t ephemeral_private_len, const uint8_t *ephemeral_public,
|
153
|
+
size_t ephemeral_public_len);
|
145
154
|
|
146
155
|
// EVP_HPKE_CTX_setup_psk_r_x25519 sets up |hpke| as a recipient context that
|
147
156
|
// can decrypt messages. Future open (decrypt) operations will fail if the
|
148
|
-
// sender does not possess the PSK indicated by |psk| and |psk_id|.
|
149
|
-
//
|
150
|
-
//
|
157
|
+
// sender does not possess the PSK indicated by |psk| and |psk_id|. It returns
|
158
|
+
// one on success, and zero otherwise.
|
159
|
+
//
|
160
|
+
// The recipient's keypair is composed of |public_key| and |private_key|, and
|
161
|
+
// |enc| is the encapsulated shared secret from the sender. If |enc| is invalid,
|
162
|
+
// this function will fail.
|
151
163
|
//
|
152
164
|
// The PSK and its ID must be provided in |psk| and |psk_id|, respectively. Both
|
153
165
|
// must be nonempty (|psk_len| and |psk_id_len| must be non-zero), or this
|
154
166
|
// function will fail.
|
155
167
|
OPENSSL_EXPORT int EVP_HPKE_CTX_setup_psk_r_x25519(
|
156
|
-
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
157
|
-
const uint8_t
|
158
|
-
const uint8_t
|
159
|
-
const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
|
168
|
+
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id, const uint8_t *enc,
|
169
|
+
size_t enc_len, const uint8_t *public_key, size_t public_key_len,
|
170
|
+
const uint8_t *private_key, size_t private_key_len, const uint8_t *info,
|
160
171
|
size_t info_len, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id,
|
161
172
|
size_t psk_id_len);
|
162
173
|
|
@@ -216,6 +227,16 @@ OPENSSL_EXPORT int EVP_HPKE_CTX_export(const EVP_HPKE_CTX *hpke, uint8_t *out,
|
|
216
227
|
// set up as a sender.
|
217
228
|
OPENSSL_EXPORT size_t EVP_HPKE_CTX_max_overhead(const EVP_HPKE_CTX *hpke);
|
218
229
|
|
230
|
+
// EVP_HPKE_CTX_get_aead_id returns |hpke|'s configured AEAD. The returned value
|
231
|
+
// is one of the |EVP_HPKE_AEAD_*| constants, or zero if the context has not
|
232
|
+
// been set up.
|
233
|
+
OPENSSL_EXPORT uint16_t EVP_HPKE_CTX_get_aead_id(const EVP_HPKE_CTX *hpke);
|
234
|
+
|
235
|
+
// EVP_HPKE_CTX_get_aead_id returns |hpke|'s configured KDF. The returned value
|
236
|
+
// is one of the |EVP_HPKE_HKDF_*| constants, or zero if the context has not
|
237
|
+
// been set up.
|
238
|
+
OPENSSL_EXPORT uint16_t EVP_HPKE_CTX_get_kdf_id(const EVP_HPKE_CTX *hpke);
|
239
|
+
|
219
240
|
// EVP_HPKE_get_aead returns the AEAD corresponding to |aead_id|, or NULL if
|
220
241
|
// |aead_id| is not a known AEAD identifier.
|
221
242
|
OPENSSL_EXPORT const EVP_AEAD *EVP_HPKE_get_aead(uint16_t aead_id);
|