grpc 1.31.1 → 1.32.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 +595 -15723
- data/include/grpc/grpc_security.h +31 -14
- data/include/grpc/impl/codegen/README.md +22 -0
- data/include/grpc/impl/codegen/port_platform.h +6 -1
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +64 -20
- data/src/core/ext/filters/client_channel/client_channel.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +20 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +20 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +54 -56
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
- 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/fake/fake_resolver.cc +1 -1
- 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 +363 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +5 -4
- data/src/core/ext/filters/client_channel/server_address.cc +40 -7
- data/src/core/ext/filters/client_channel/server_address.h +42 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
- data/src/core/ext/filters/client_channel/subchannel.h +16 -4
- data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +239 -277
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +1 -28
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
- data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
- data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
- data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
- data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
- data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
- data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
- data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.cc +1045 -767
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +114 -99
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +85 -417
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +3 -3
- data/src/core/lib/channel/channelz.cc +14 -15
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/channelz_registry.cc +3 -1
- data/src/core/lib/gpr/sync_posix.cc +2 -8
- data/src/core/lib/iomgr/endpoint.cc +5 -1
- data/src/core/lib/iomgr/endpoint.h +7 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
- data/src/core/lib/iomgr/ev_posix.cc +0 -2
- data/src/core/lib/iomgr/iomgr.cc +0 -10
- data/src/core/lib/iomgr/iomgr.h +0 -10
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
- data/src/core/lib/iomgr/tcp_custom.cc +32 -16
- data/src/core/lib/iomgr/tcp_posix.cc +31 -13
- data/src/core/lib/iomgr/tcp_windows.cc +26 -10
- data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
- data/src/core/lib/security/authorization/authorization_engine.h +84 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
- data/src/core/lib/security/authorization/evaluate_args.h +59 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
- data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -2
- data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
- data/src/core/lib/surface/call.cc +12 -12
- data/src/core/lib/surface/call.h +2 -1
- data/src/core/lib/surface/channel.cc +28 -20
- data/src/core/lib/surface/channel.h +12 -2
- data/src/core/lib/surface/completion_queue.cc +10 -272
- data/src/core/lib/surface/completion_queue.h +0 -8
- data/src/core/lib/surface/init.cc +1 -3
- data/src/core/lib/surface/server.cc +1066 -1244
- data/src/core/lib/surface/server.h +363 -87
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +38 -0
- data/src/core/lib/transport/authority_override.h +32 -0
- data/src/core/lib/transport/connectivity_state.cc +18 -13
- data/src/core/lib/transport/connectivity_state.h +18 -6
- data/src/core/lib/transport/error_utils.cc +13 -0
- data/src/core/lib/transport/error_utils.h +6 -0
- data/src/core/lib/transport/static_metadata.cc +295 -276
- data/src/core/lib/transport/static_metadata.h +80 -73
- data/src/core/lib/transport/transport.h +7 -0
- data/src/core/lib/uri/uri_parser.cc +23 -21
- data/src/core/lib/uri/uri_parser.h +3 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
- data/src/core/tsi/ssl_transport_security.cc +3 -9
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
- data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
- data/third_party/abseil-cpp/absl/status/status.cc +447 -0
- data/third_party/abseil-cpp/absl/status/status.h +428 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
- data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
- data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
- data/third_party/abseil-cpp/absl/types/variant.h +861 -0
- data/third_party/boringssl-with-bazel/err_data.c +263 -257
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +39 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +11 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
- data/third_party/upb/upb/decode.c +64 -15
- data/third_party/upb/upb/encode.c +2 -2
- data/third_party/upb/upb/msg.h +2 -2
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +0 -11
- data/third_party/upb/upb/table.int.h +0 -9
- data/third_party/upb/upb/upb.c +16 -14
- data/third_party/upb/upb/upb.h +26 -0
- data/third_party/upb/upb/upb.hpp +2 -0
- metadata +257 -155
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
- data/src/core/lib/security/transport/target_authority_table.cc +0 -75
- data/src/core/lib/security/transport/target_authority_table.h +0 -40
- data/src/core/lib/slice/slice_hash_table.h +0 -199
- data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
@@ -407,6 +407,10 @@ EVP_PKEY *d2i_PUBKEY(EVP_PKEY **out, const uint8_t **inp, long len) {
|
|
407
407
|
}
|
408
408
|
|
409
409
|
int i2d_PUBKEY(const EVP_PKEY *pkey, uint8_t **outp) {
|
410
|
+
if (pkey == NULL) {
|
411
|
+
return 0;
|
412
|
+
}
|
413
|
+
|
410
414
|
CBB cbb;
|
411
415
|
if (!CBB_init(&cbb, 128) ||
|
412
416
|
!EVP_marshal_public_key(&cbb, pkey)) {
|
@@ -440,6 +444,10 @@ RSA *d2i_RSA_PUBKEY(RSA **out, const uint8_t **inp, long len) {
|
|
440
444
|
}
|
441
445
|
|
442
446
|
int i2d_RSA_PUBKEY(const RSA *rsa, uint8_t **outp) {
|
447
|
+
if (rsa == NULL) {
|
448
|
+
return 0;
|
449
|
+
}
|
450
|
+
|
443
451
|
int ret = -1;
|
444
452
|
EVP_PKEY *pkey = EVP_PKEY_new();
|
445
453
|
if (pkey == NULL ||
|
@@ -478,6 +486,10 @@ DSA *d2i_DSA_PUBKEY(DSA **out, const uint8_t **inp, long len) {
|
|
478
486
|
}
|
479
487
|
|
480
488
|
int i2d_DSA_PUBKEY(const DSA *dsa, uint8_t **outp) {
|
489
|
+
if (dsa == NULL) {
|
490
|
+
return 0;
|
491
|
+
}
|
492
|
+
|
481
493
|
int ret = -1;
|
482
494
|
EVP_PKEY *pkey = EVP_PKEY_new();
|
483
495
|
if (pkey == NULL ||
|
@@ -516,6 +528,10 @@ EC_KEY *d2i_EC_PUBKEY(EC_KEY **out, const uint8_t **inp, long len) {
|
|
516
528
|
}
|
517
529
|
|
518
530
|
int i2d_EC_PUBKEY(const EC_KEY *ec_key, uint8_t **outp) {
|
531
|
+
if (ec_key == NULL) {
|
532
|
+
return 0;
|
533
|
+
}
|
534
|
+
|
519
535
|
int ret = -1;
|
520
536
|
EVP_PKEY *pkey = EVP_PKEY_new();
|
521
537
|
if (pkey == NULL ||
|
@@ -0,0 +1,456 @@
|
|
1
|
+
/* Copyright (c) 2020, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include <assert.h>
|
16
|
+
#include <string.h>
|
17
|
+
|
18
|
+
#include <openssl/aead.h>
|
19
|
+
#include <openssl/bytestring.h>
|
20
|
+
#include <openssl/digest.h>
|
21
|
+
#include <openssl/err.h>
|
22
|
+
#include <openssl/evp.h>
|
23
|
+
#include <openssl/hkdf.h>
|
24
|
+
#include <openssl/sha.h>
|
25
|
+
|
26
|
+
#include "../internal.h"
|
27
|
+
#include "internal.h"
|
28
|
+
|
29
|
+
|
30
|
+
// This file implements draft-irtf-cfrg-hpke-05.
|
31
|
+
|
32
|
+
#define KEM_CONTEXT_LEN (2 * X25519_PUBLIC_VALUE_LEN)
|
33
|
+
|
34
|
+
// HPKE KEM scheme IDs.
|
35
|
+
#define HPKE_DHKEM_X25519_HKDF_SHA256 0x0020
|
36
|
+
|
37
|
+
// This is strlen("HPKE") + 3 * sizeof(uint16_t).
|
38
|
+
#define HPKE_SUITE_ID_LEN 10
|
39
|
+
|
40
|
+
#define HPKE_MODE_BASE 0
|
41
|
+
|
42
|
+
static const char kHpkeRfcId[] = "HPKE-05 ";
|
43
|
+
|
44
|
+
static int add_label_string(CBB *cbb, const char *label) {
|
45
|
+
return CBB_add_bytes(cbb, (const uint8_t *)label, strlen(label));
|
46
|
+
}
|
47
|
+
|
48
|
+
// The suite_id for the KEM is defined as concat("KEM", I2OSP(kem_id, 2)). Note
|
49
|
+
// that the suite_id used outside of the KEM also includes the kdf_id and
|
50
|
+
// aead_id.
|
51
|
+
static const uint8_t kX25519SuiteID[] = {
|
52
|
+
'K', 'E', 'M', HPKE_DHKEM_X25519_HKDF_SHA256 >> 8,
|
53
|
+
HPKE_DHKEM_X25519_HKDF_SHA256 & 0x00ff};
|
54
|
+
|
55
|
+
// The suite_id for non-KEM pieces of HPKE is defined as concat("HPKE",
|
56
|
+
// I2OSP(kem_id, 2), I2OSP(kdf_id, 2), I2OSP(aead_id, 2)).
|
57
|
+
static int hpke_build_suite_id(uint8_t out[HPKE_SUITE_ID_LEN], uint16_t kdf_id,
|
58
|
+
uint16_t aead_id) {
|
59
|
+
CBB cbb;
|
60
|
+
int ret = CBB_init_fixed(&cbb, out, HPKE_SUITE_ID_LEN) &&
|
61
|
+
add_label_string(&cbb, "HPKE") &&
|
62
|
+
CBB_add_u16(&cbb, HPKE_DHKEM_X25519_HKDF_SHA256) &&
|
63
|
+
CBB_add_u16(&cbb, kdf_id) &&
|
64
|
+
CBB_add_u16(&cbb, aead_id);
|
65
|
+
CBB_cleanup(&cbb);
|
66
|
+
return ret;
|
67
|
+
}
|
68
|
+
|
69
|
+
static int hpke_labeled_extract(const EVP_MD *hkdf_md, uint8_t *out_key,
|
70
|
+
size_t *out_len, const uint8_t *salt,
|
71
|
+
size_t salt_len, const uint8_t *suite_id,
|
72
|
+
size_t suite_id_len, const char *label,
|
73
|
+
const uint8_t *ikm, size_t ikm_len) {
|
74
|
+
// labeledIKM = concat("RFCXXXX ", suite_id, label, IKM)
|
75
|
+
CBB labeled_ikm;
|
76
|
+
int ok = CBB_init(&labeled_ikm, 0) &&
|
77
|
+
add_label_string(&labeled_ikm, kHpkeRfcId) &&
|
78
|
+
CBB_add_bytes(&labeled_ikm, suite_id, suite_id_len) &&
|
79
|
+
add_label_string(&labeled_ikm, label) &&
|
80
|
+
CBB_add_bytes(&labeled_ikm, ikm, ikm_len) &&
|
81
|
+
HKDF_extract(out_key, out_len, hkdf_md, CBB_data(&labeled_ikm),
|
82
|
+
CBB_len(&labeled_ikm), salt, salt_len);
|
83
|
+
CBB_cleanup(&labeled_ikm);
|
84
|
+
return ok;
|
85
|
+
}
|
86
|
+
|
87
|
+
static int hpke_labeled_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
|
88
|
+
size_t out_len, const uint8_t *prk,
|
89
|
+
size_t prk_len, const uint8_t *suite_id,
|
90
|
+
size_t suite_id_len, const char *label,
|
91
|
+
const uint8_t *info, size_t info_len) {
|
92
|
+
// labeledInfo = concat(I2OSP(L, 2), "RFCXXXX ", suite_id, label, info)
|
93
|
+
CBB labeled_info;
|
94
|
+
int ok = CBB_init(&labeled_info, 0) &&
|
95
|
+
CBB_add_u16(&labeled_info, out_len) &&
|
96
|
+
add_label_string(&labeled_info, kHpkeRfcId) &&
|
97
|
+
CBB_add_bytes(&labeled_info, suite_id, suite_id_len) &&
|
98
|
+
add_label_string(&labeled_info, label) &&
|
99
|
+
CBB_add_bytes(&labeled_info, info, info_len) &&
|
100
|
+
HKDF_expand(out_key, out_len, hkdf_md, prk, prk_len,
|
101
|
+
CBB_data(&labeled_info), CBB_len(&labeled_info));
|
102
|
+
CBB_cleanup(&labeled_info);
|
103
|
+
return ok;
|
104
|
+
}
|
105
|
+
|
106
|
+
static int hpke_extract_and_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
|
107
|
+
size_t out_len,
|
108
|
+
const uint8_t dh[X25519_PUBLIC_VALUE_LEN],
|
109
|
+
const uint8_t kem_context[KEM_CONTEXT_LEN]) {
|
110
|
+
uint8_t prk[EVP_MAX_MD_SIZE];
|
111
|
+
size_t prk_len;
|
112
|
+
static const char kEaePrkLabel[] = "eae_prk";
|
113
|
+
if (!hpke_labeled_extract(hkdf_md, prk, &prk_len, NULL, 0, kX25519SuiteID,
|
114
|
+
sizeof(kX25519SuiteID), kEaePrkLabel, dh,
|
115
|
+
X25519_PUBLIC_VALUE_LEN)) {
|
116
|
+
return 0;
|
117
|
+
}
|
118
|
+
const char kPRKExpandLabel[] = "shared_secret";
|
119
|
+
if (!hpke_labeled_expand(hkdf_md, out_key, out_len, prk, prk_len,
|
120
|
+
kX25519SuiteID, sizeof(kX25519SuiteID),
|
121
|
+
kPRKExpandLabel, kem_context, KEM_CONTEXT_LEN)) {
|
122
|
+
return 0;
|
123
|
+
}
|
124
|
+
return 1;
|
125
|
+
}
|
126
|
+
|
127
|
+
static const EVP_AEAD *hpke_get_aead(uint16_t aead_id) {
|
128
|
+
switch (aead_id) {
|
129
|
+
case EVP_HPKE_AEAD_AES_GCM_128:
|
130
|
+
return EVP_aead_aes_128_gcm();
|
131
|
+
case EVP_HPKE_AEAD_AES_GCM_256:
|
132
|
+
return EVP_aead_aes_256_gcm();
|
133
|
+
case EVP_HPKE_AEAD_CHACHA20POLY1305:
|
134
|
+
return EVP_aead_chacha20_poly1305();
|
135
|
+
}
|
136
|
+
OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
|
137
|
+
return NULL;
|
138
|
+
}
|
139
|
+
|
140
|
+
static const EVP_MD *hpke_get_kdf(uint16_t kdf_id) {
|
141
|
+
switch (kdf_id) {
|
142
|
+
case EVP_HPKE_HKDF_SHA256:
|
143
|
+
return EVP_sha256();
|
144
|
+
case EVP_HPKE_HKDF_SHA384:
|
145
|
+
return EVP_sha384();
|
146
|
+
case EVP_HPKE_HKDF_SHA512:
|
147
|
+
return EVP_sha512();
|
148
|
+
}
|
149
|
+
OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
|
150
|
+
return NULL;
|
151
|
+
}
|
152
|
+
|
153
|
+
static int hpke_key_schedule(EVP_HPKE_CTX *hpke, const uint8_t *shared_secret,
|
154
|
+
size_t shared_secret_len, const uint8_t *info,
|
155
|
+
size_t info_len) {
|
156
|
+
// Attempt to get an EVP_AEAD*.
|
157
|
+
const EVP_AEAD *aead = hpke_get_aead(hpke->aead_id);
|
158
|
+
if (aead == NULL) {
|
159
|
+
return 0;
|
160
|
+
}
|
161
|
+
|
162
|
+
uint8_t suite_id[HPKE_SUITE_ID_LEN];
|
163
|
+
if (!hpke_build_suite_id(suite_id, hpke->kdf_id, hpke->aead_id)) {
|
164
|
+
return 0;
|
165
|
+
}
|
166
|
+
|
167
|
+
// psk_id_hash = LabeledExtract("", "psk_id_hash", psk_id)
|
168
|
+
static const char kPskIdHashLabel[] = "psk_id_hash";
|
169
|
+
uint8_t psk_id_hash[EVP_MAX_MD_SIZE];
|
170
|
+
size_t psk_id_hash_len;
|
171
|
+
if (!hpke_labeled_extract(hpke->hkdf_md, psk_id_hash, &psk_id_hash_len, NULL,
|
172
|
+
0, suite_id, sizeof(suite_id), kPskIdHashLabel,
|
173
|
+
NULL, 0)) {
|
174
|
+
return 0;
|
175
|
+
}
|
176
|
+
|
177
|
+
// info_hash = LabeledExtract("", "info_hash", info)
|
178
|
+
static const char kInfoHashLabel[] = "info_hash";
|
179
|
+
uint8_t info_hash[EVP_MAX_MD_SIZE];
|
180
|
+
size_t info_hash_len;
|
181
|
+
if (!hpke_labeled_extract(hpke->hkdf_md, info_hash, &info_hash_len, NULL, 0,
|
182
|
+
suite_id, sizeof(suite_id), kInfoHashLabel, info,
|
183
|
+
info_len)) {
|
184
|
+
return 0;
|
185
|
+
}
|
186
|
+
|
187
|
+
// key_schedule_context = concat(mode, psk_id_hash, info_hash)
|
188
|
+
uint8_t context[sizeof(uint8_t) + 2 * EVP_MAX_MD_SIZE];
|
189
|
+
size_t context_len;
|
190
|
+
CBB context_cbb;
|
191
|
+
if (!CBB_init_fixed(&context_cbb, context, sizeof(context)) ||
|
192
|
+
!CBB_add_u8(&context_cbb, HPKE_MODE_BASE) ||
|
193
|
+
!CBB_add_bytes(&context_cbb, psk_id_hash, psk_id_hash_len) ||
|
194
|
+
!CBB_add_bytes(&context_cbb, info_hash, info_hash_len) ||
|
195
|
+
!CBB_finish(&context_cbb, NULL, &context_len)) {
|
196
|
+
return 0;
|
197
|
+
}
|
198
|
+
|
199
|
+
// psk_hash = LabeledExtract("", "psk_hash", psk)
|
200
|
+
static const char kPskHashLabel[] = "psk_hash";
|
201
|
+
uint8_t psk_hash[EVP_MAX_MD_SIZE];
|
202
|
+
size_t psk_hash_len;
|
203
|
+
if (!hpke_labeled_extract(hpke->hkdf_md, psk_hash, &psk_hash_len, NULL, 0,
|
204
|
+
suite_id, sizeof(suite_id), kPskHashLabel, NULL,
|
205
|
+
0)) {
|
206
|
+
return 0;
|
207
|
+
}
|
208
|
+
|
209
|
+
// secret = LabeledExtract(psk_hash, "secret", shared_secret)
|
210
|
+
static const char kSecretExtractLabel[] = "secret";
|
211
|
+
uint8_t secret[EVP_MAX_MD_SIZE];
|
212
|
+
size_t secret_len;
|
213
|
+
if (!hpke_labeled_extract(hpke->hkdf_md, secret, &secret_len, psk_hash,
|
214
|
+
psk_hash_len, suite_id, sizeof(suite_id),
|
215
|
+
kSecretExtractLabel, shared_secret,
|
216
|
+
shared_secret_len)) {
|
217
|
+
return 0;
|
218
|
+
}
|
219
|
+
|
220
|
+
// key = LabeledExpand(secret, "key", key_schedule_context, Nk)
|
221
|
+
static const char kKeyExpandLabel[] = "key";
|
222
|
+
uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
|
223
|
+
const size_t kKeyLen = EVP_AEAD_key_length(aead);
|
224
|
+
if (!hpke_labeled_expand(hpke->hkdf_md, key, kKeyLen, secret, secret_len,
|
225
|
+
suite_id, sizeof(suite_id), kKeyExpandLabel, context,
|
226
|
+
context_len)) {
|
227
|
+
return 0;
|
228
|
+
}
|
229
|
+
|
230
|
+
// Initialize the HPKE context's AEAD context, storing a copy of |key|.
|
231
|
+
if (!EVP_AEAD_CTX_init(&hpke->aead_ctx, aead, key, kKeyLen, 0, NULL)) {
|
232
|
+
return 0;
|
233
|
+
}
|
234
|
+
|
235
|
+
// nonce = LabeledExpand(secret, "nonce", key_schedule_context, Nn)
|
236
|
+
static const char kNonceExpandLabel[] = "nonce";
|
237
|
+
if (!hpke_labeled_expand(hpke->hkdf_md, hpke->nonce,
|
238
|
+
EVP_AEAD_nonce_length(aead), secret, secret_len,
|
239
|
+
suite_id, sizeof(suite_id), kNonceExpandLabel,
|
240
|
+
context, context_len)) {
|
241
|
+
return 0;
|
242
|
+
}
|
243
|
+
|
244
|
+
// exporter_secret = LabeledExpand(secret, "exp", key_schedule_context, Nh)
|
245
|
+
static const char kExporterSecretExpandLabel[] = "exp";
|
246
|
+
if (!hpke_labeled_expand(hpke->hkdf_md, hpke->exporter_secret,
|
247
|
+
EVP_MD_size(hpke->hkdf_md), secret, secret_len,
|
248
|
+
suite_id, sizeof(suite_id),
|
249
|
+
kExporterSecretExpandLabel, context, context_len)) {
|
250
|
+
return 0;
|
251
|
+
}
|
252
|
+
|
253
|
+
return 1;
|
254
|
+
}
|
255
|
+
|
256
|
+
// The number of bytes written to |out_shared_secret| is the size of the KEM's
|
257
|
+
// KDF (currently we only support SHA256).
|
258
|
+
static int hpke_encap(EVP_HPKE_CTX *hpke,
|
259
|
+
uint8_t out_shared_secret[SHA256_DIGEST_LENGTH],
|
260
|
+
const uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN],
|
261
|
+
const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
|
262
|
+
const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]) {
|
263
|
+
uint8_t dh[X25519_PUBLIC_VALUE_LEN];
|
264
|
+
if (!X25519(dh, ephemeral_private, public_key_r)) {
|
265
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
|
266
|
+
return 0;
|
267
|
+
}
|
268
|
+
|
269
|
+
uint8_t kem_context[KEM_CONTEXT_LEN];
|
270
|
+
OPENSSL_memcpy(kem_context, ephemeral_public, X25519_PUBLIC_VALUE_LEN);
|
271
|
+
OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, public_key_r,
|
272
|
+
X25519_PUBLIC_VALUE_LEN);
|
273
|
+
if (!hpke_extract_and_expand(EVP_sha256(), out_shared_secret,
|
274
|
+
SHA256_DIGEST_LENGTH, dh, kem_context)) {
|
275
|
+
return 0;
|
276
|
+
}
|
277
|
+
return 1;
|
278
|
+
}
|
279
|
+
|
280
|
+
static int hpke_decap(const EVP_HPKE_CTX *hpke,
|
281
|
+
uint8_t out_shared_secret[SHA256_DIGEST_LENGTH],
|
282
|
+
const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
|
283
|
+
const uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN],
|
284
|
+
const uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN]) {
|
285
|
+
uint8_t dh[X25519_PUBLIC_VALUE_LEN];
|
286
|
+
if (!X25519(dh, secret_key_r, enc)) {
|
287
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
|
288
|
+
return 0;
|
289
|
+
}
|
290
|
+
uint8_t kem_context[KEM_CONTEXT_LEN];
|
291
|
+
OPENSSL_memcpy(kem_context, enc, X25519_PUBLIC_VALUE_LEN);
|
292
|
+
OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, public_key_r,
|
293
|
+
X25519_PUBLIC_VALUE_LEN);
|
294
|
+
if (!hpke_extract_and_expand(EVP_sha256(), out_shared_secret,
|
295
|
+
SHA256_DIGEST_LENGTH, dh, kem_context)) {
|
296
|
+
return 0;
|
297
|
+
}
|
298
|
+
return 1;
|
299
|
+
}
|
300
|
+
|
301
|
+
void EVP_HPKE_CTX_init(EVP_HPKE_CTX *ctx) {
|
302
|
+
OPENSSL_memset(ctx, 0, sizeof(EVP_HPKE_CTX));
|
303
|
+
EVP_AEAD_CTX_zero(&ctx->aead_ctx);
|
304
|
+
}
|
305
|
+
|
306
|
+
void EVP_HPKE_CTX_cleanup(EVP_HPKE_CTX *ctx) {
|
307
|
+
EVP_AEAD_CTX_cleanup(&ctx->aead_ctx);
|
308
|
+
}
|
309
|
+
|
310
|
+
int EVP_HPKE_CTX_setup_base_s_x25519(
|
311
|
+
EVP_HPKE_CTX *hpke, uint8_t out_enc[X25519_PUBLIC_VALUE_LEN],
|
312
|
+
uint16_t kdf_id, uint16_t aead_id,
|
313
|
+
const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
|
314
|
+
const uint8_t *info, size_t info_len) {
|
315
|
+
// The GenerateKeyPair() step technically belongs in the KEM's Encap()
|
316
|
+
// function, but we've moved it up a layer to make it easier for tests to
|
317
|
+
// inject an ephemeral keypair.
|
318
|
+
uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN];
|
319
|
+
X25519_keypair(out_enc, ephemeral_private);
|
320
|
+
return EVP_HPKE_CTX_setup_base_s_x25519_for_test(
|
321
|
+
hpke, kdf_id, aead_id, peer_public_value, info, info_len,
|
322
|
+
ephemeral_private, out_enc);
|
323
|
+
}
|
324
|
+
|
325
|
+
int EVP_HPKE_CTX_setup_base_s_x25519_for_test(
|
326
|
+
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
327
|
+
const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
|
328
|
+
const uint8_t *info, size_t info_len,
|
329
|
+
const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
|
330
|
+
const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]) {
|
331
|
+
hpke->is_sender = 1;
|
332
|
+
hpke->kdf_id = kdf_id;
|
333
|
+
hpke->aead_id = aead_id;
|
334
|
+
hpke->hkdf_md = hpke_get_kdf(kdf_id);
|
335
|
+
if (hpke->hkdf_md == NULL) {
|
336
|
+
return 0;
|
337
|
+
}
|
338
|
+
uint8_t shared_secret[SHA256_DIGEST_LENGTH];
|
339
|
+
if (!hpke_encap(hpke, shared_secret, peer_public_value, ephemeral_private,
|
340
|
+
ephemeral_public) ||
|
341
|
+
!hpke_key_schedule(hpke, shared_secret, sizeof(shared_secret), info,
|
342
|
+
info_len)) {
|
343
|
+
return 0;
|
344
|
+
}
|
345
|
+
return 1;
|
346
|
+
}
|
347
|
+
|
348
|
+
int EVP_HPKE_CTX_setup_base_r_x25519(
|
349
|
+
EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
|
350
|
+
const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
|
351
|
+
const uint8_t public_key[X25519_PUBLIC_VALUE_LEN],
|
352
|
+
const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
|
353
|
+
size_t info_len) {
|
354
|
+
hpke->is_sender = 0;
|
355
|
+
hpke->kdf_id = kdf_id;
|
356
|
+
hpke->aead_id = aead_id;
|
357
|
+
hpke->hkdf_md = hpke_get_kdf(kdf_id);
|
358
|
+
if (hpke->hkdf_md == NULL) {
|
359
|
+
return 0;
|
360
|
+
}
|
361
|
+
uint8_t shared_secret[SHA256_DIGEST_LENGTH];
|
362
|
+
if (!hpke_decap(hpke, shared_secret, enc, public_key, private_key) ||
|
363
|
+
!hpke_key_schedule(hpke, shared_secret, sizeof(shared_secret), info,
|
364
|
+
info_len)) {
|
365
|
+
return 0;
|
366
|
+
}
|
367
|
+
return 1;
|
368
|
+
}
|
369
|
+
|
370
|
+
static void hpke_nonce(const EVP_HPKE_CTX *hpke, uint8_t *out_nonce,
|
371
|
+
size_t nonce_len) {
|
372
|
+
assert(nonce_len >= 8);
|
373
|
+
|
374
|
+
// Write padded big-endian bytes of |hpke->seq| to |out_nonce|.
|
375
|
+
OPENSSL_memset(out_nonce, 0, nonce_len);
|
376
|
+
uint64_t seq_copy = hpke->seq;
|
377
|
+
for (size_t i = 0; i < 8; i++) {
|
378
|
+
out_nonce[nonce_len - i - 1] = seq_copy & 0xff;
|
379
|
+
seq_copy >>= 8;
|
380
|
+
}
|
381
|
+
|
382
|
+
// XOR the encoded sequence with the |hpke->nonce|.
|
383
|
+
for (size_t i = 0; i < nonce_len; i++) {
|
384
|
+
out_nonce[i] ^= hpke->nonce[i];
|
385
|
+
}
|
386
|
+
}
|
387
|
+
|
388
|
+
size_t EVP_HPKE_CTX_max_overhead(const EVP_HPKE_CTX *hpke) {
|
389
|
+
assert(hpke->is_sender);
|
390
|
+
return EVP_AEAD_max_overhead(hpke->aead_ctx.aead);
|
391
|
+
}
|
392
|
+
|
393
|
+
int EVP_HPKE_CTX_open(EVP_HPKE_CTX *hpke, uint8_t *out, size_t *out_len,
|
394
|
+
size_t max_out_len, const uint8_t *in, size_t in_len,
|
395
|
+
const uint8_t *ad, size_t ad_len) {
|
396
|
+
if (hpke->is_sender) {
|
397
|
+
OPENSSL_PUT_ERROR(EVP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
398
|
+
return 0;
|
399
|
+
}
|
400
|
+
if (hpke->seq == UINT64_MAX) {
|
401
|
+
OPENSSL_PUT_ERROR(EVP, ERR_R_OVERFLOW);
|
402
|
+
return 0;
|
403
|
+
}
|
404
|
+
|
405
|
+
uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
|
406
|
+
const size_t nonce_len = EVP_AEAD_nonce_length(hpke->aead_ctx.aead);
|
407
|
+
hpke_nonce(hpke, nonce, nonce_len);
|
408
|
+
|
409
|
+
if (!EVP_AEAD_CTX_open(&hpke->aead_ctx, out, out_len, max_out_len, nonce,
|
410
|
+
nonce_len, in, in_len, ad, ad_len)) {
|
411
|
+
return 0;
|
412
|
+
}
|
413
|
+
hpke->seq++;
|
414
|
+
return 1;
|
415
|
+
}
|
416
|
+
|
417
|
+
int EVP_HPKE_CTX_seal(EVP_HPKE_CTX *hpke, uint8_t *out, size_t *out_len,
|
418
|
+
size_t max_out_len, const uint8_t *in, size_t in_len,
|
419
|
+
const uint8_t *ad, size_t ad_len) {
|
420
|
+
if (!hpke->is_sender) {
|
421
|
+
OPENSSL_PUT_ERROR(EVP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
422
|
+
return 0;
|
423
|
+
}
|
424
|
+
if (hpke->seq == UINT64_MAX) {
|
425
|
+
OPENSSL_PUT_ERROR(EVP, ERR_R_OVERFLOW);
|
426
|
+
return 0;
|
427
|
+
}
|
428
|
+
|
429
|
+
uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
|
430
|
+
const size_t nonce_len = EVP_AEAD_nonce_length(hpke->aead_ctx.aead);
|
431
|
+
hpke_nonce(hpke, nonce, nonce_len);
|
432
|
+
|
433
|
+
if (!EVP_AEAD_CTX_seal(&hpke->aead_ctx, out, out_len, max_out_len, nonce,
|
434
|
+
nonce_len, in, in_len, ad, ad_len)) {
|
435
|
+
return 0;
|
436
|
+
}
|
437
|
+
hpke->seq++;
|
438
|
+
return 1;
|
439
|
+
}
|
440
|
+
|
441
|
+
int EVP_HPKE_CTX_export(const EVP_HPKE_CTX *hpke, uint8_t *out,
|
442
|
+
size_t secret_len, const uint8_t *context,
|
443
|
+
size_t context_len) {
|
444
|
+
uint8_t suite_id[HPKE_SUITE_ID_LEN];
|
445
|
+
if (!hpke_build_suite_id(suite_id, hpke->kdf_id, hpke->aead_id)) {
|
446
|
+
return 0;
|
447
|
+
}
|
448
|
+
static const char kExportExpandLabel[] = "sec";
|
449
|
+
if (!hpke_labeled_expand(hpke->hkdf_md, out, secret_len,
|
450
|
+
hpke->exporter_secret, EVP_MD_size(hpke->hkdf_md),
|
451
|
+
suite_id, sizeof(suite_id), kExportExpandLabel,
|
452
|
+
context, context_len)) {
|
453
|
+
return 0;
|
454
|
+
}
|
455
|
+
return 1;
|
456
|
+
}
|