grpc 1.31.0.pre1 → 1.33.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.

Files changed (614) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +693 -16022
  3. data/include/grpc/grpc.h +0 -5
  4. data/include/grpc/grpc_security.h +47 -14
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +0 -5
  7. data/include/grpc/impl/codegen/port_platform.h +6 -1
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  9. data/src/core/ext/filters/client_channel/client_channel.cc +264 -186
  10. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  12. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  13. data/src/core/ext/filters/client_channel/config_selector.h +34 -5
  14. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
  16. data/src/core/ext/filters/client_channel/lb_policy.h +3 -1
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +9 -6
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +126 -119
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  24. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +21 -15
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +32 -13
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +8 -7
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -32
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -16
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +207 -129
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +453 -255
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +571 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +727 -0
  33. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +602 -58
  41. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  42. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -39
  43. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
  44. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +49 -47
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +5 -9
  46. data/src/core/ext/filters/client_channel/server_address.cc +120 -7
  47. data/src/core/ext/filters/client_channel/server_address.h +48 -21
  48. data/src/core/ext/filters/client_channel/service_config.cc +16 -13
  49. data/src/core/ext/filters/client_channel/service_config.h +7 -4
  50. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  51. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  52. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  53. data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
  54. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  55. data/src/core/ext/filters/client_channel/subchannel_interface.h +44 -0
  56. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  57. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  58. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  59. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  60. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  61. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  62. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
  63. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  64. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  65. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  66. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -287
  68. data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
  69. data/src/core/ext/transport/chttp2/transport/flow_control.h +10 -0
  70. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  71. data/src/core/ext/transport/chttp2/transport/internal.h +10 -1
  72. data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -30
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
  74. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  75. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
  76. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
  81. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  83. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
  87. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  107. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
  111. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  117. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  125. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  126. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
  127. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  128. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  129. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
  130. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
  131. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  132. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
  133. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  134. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  135. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
  136. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
  137. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  138. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  139. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
  140. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
  141. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
  142. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
  143. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
  144. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
  145. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  146. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  147. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  148. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  149. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
  150. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
  151. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  152. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  153. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  154. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  155. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  156. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  157. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  158. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  159. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  160. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  164. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  165. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  169. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
  170. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  173. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  174. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  175. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  176. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  177. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  178. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  179. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  180. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  181. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  182. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  183. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  184. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  185. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  186. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
  187. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  188. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  189. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  190. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  191. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  192. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
  193. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  194. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  195. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  196. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
  197. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  198. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
  199. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  200. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
  201. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  202. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
  203. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  204. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
  205. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  206. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
  207. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  208. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  209. data/src/core/ext/xds/certificate_provider_factory.h +59 -0
  210. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  211. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  212. data/src/core/ext/xds/certificate_provider_store.h +50 -0
  213. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +377 -0
  214. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +102 -0
  215. data/src/core/ext/xds/xds_api.cc +2596 -0
  216. data/src/core/ext/xds/xds_api.h +397 -0
  217. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
  218. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  219. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  220. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +541 -785
  221. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +114 -93
  222. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +20 -14
  223. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +36 -8
  224. data/src/core/lib/channel/channel_args.h +0 -1
  225. data/src/core/lib/channel/channelz.cc +24 -60
  226. data/src/core/lib/channel/channelz.h +12 -20
  227. data/src/core/lib/channel/channelz_registry.cc +15 -12
  228. data/src/core/lib/channel/channelz_registry.h +3 -0
  229. data/src/core/lib/gpr/sync_posix.cc +2 -8
  230. data/src/core/lib/gpr/time_precise.cc +2 -0
  231. data/src/core/lib/gpr/time_precise.h +6 -2
  232. data/src/core/lib/gprpp/dual_ref_counted.h +336 -0
  233. data/src/core/lib/gprpp/ref_counted.h +51 -22
  234. data/src/core/lib/gprpp/ref_counted_ptr.h +153 -0
  235. data/src/core/lib/iomgr/endpoint.cc +5 -1
  236. data/src/core/lib/iomgr/endpoint.h +7 -3
  237. data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
  238. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  239. data/src/core/lib/iomgr/exec_ctx.h +10 -8
  240. data/src/core/lib/iomgr/iomgr.cc +0 -10
  241. data/src/core/lib/iomgr/iomgr.h +0 -10
  242. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  243. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  244. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  245. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  246. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  247. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  248. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  249. data/src/core/lib/json/json_util.cc +58 -0
  250. data/src/core/lib/json/json_util.h +37 -0
  251. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  252. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  253. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  254. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  255. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  256. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  257. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  258. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  259. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  260. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  261. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  262. data/src/core/lib/security/certificate_provider.h +60 -0
  263. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  264. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +321 -0
  265. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +214 -0
  266. data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
  267. data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
  268. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -12
  269. data/src/core/lib/security/security_connector/ssl_utils.h +5 -0
  270. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  271. data/src/core/lib/surface/call.cc +12 -12
  272. data/src/core/lib/surface/call.h +2 -1
  273. data/src/core/lib/surface/channel.cc +37 -51
  274. data/src/core/lib/surface/channel.h +18 -3
  275. data/src/core/lib/surface/completion_queue.cc +10 -272
  276. data/src/core/lib/surface/completion_queue.h +0 -8
  277. data/src/core/lib/surface/init.cc +27 -12
  278. data/src/core/lib/surface/server.cc +1066 -1244
  279. data/src/core/lib/surface/server.h +363 -87
  280. data/src/core/lib/surface/version.cc +2 -2
  281. data/src/core/lib/transport/authority_override.cc +38 -0
  282. data/src/core/lib/transport/authority_override.h +32 -0
  283. data/src/core/lib/transport/bdp_estimator.h +2 -1
  284. data/src/core/lib/transport/connectivity_state.cc +18 -13
  285. data/src/core/lib/transport/connectivity_state.h +20 -8
  286. data/src/core/lib/transport/error_utils.cc +13 -0
  287. data/src/core/lib/transport/error_utils.h +6 -0
  288. data/src/core/lib/transport/metadata.cc +11 -1
  289. data/src/core/lib/transport/static_metadata.cc +295 -276
  290. data/src/core/lib/transport/static_metadata.h +80 -73
  291. data/src/core/lib/transport/transport.h +7 -0
  292. data/src/core/lib/uri/uri_parser.cc +23 -21
  293. data/src/core/lib/uri/uri_parser.h +3 -1
  294. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
  295. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
  296. data/src/core/tsi/ssl_transport_security.cc +2 -2
  297. data/src/ruby/bin/math_services_pb.rb +4 -4
  298. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
  300. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +7 -7
  301. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  302. data/src/ruby/lib/grpc/version.rb +1 -1
  303. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  304. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  305. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  306. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  307. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  308. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  309. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  310. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  311. data/src/ruby/spec/user_agent_spec.rb +74 -0
  312. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  313. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  314. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  315. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  316. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  317. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  318. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  319. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  320. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  321. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  322. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  323. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  324. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  325. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  326. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  327. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  328. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  329. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  330. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  331. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  332. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  333. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  334. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  335. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  336. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  337. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  338. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  339. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  340. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  341. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  342. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  343. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  344. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  345. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  346. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  347. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  348. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  349. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  350. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  351. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  352. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  353. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  354. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  355. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  356. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  357. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  358. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  359. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  360. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  361. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  362. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  363. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  364. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  365. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  366. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  367. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  368. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  369. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  370. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  371. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  372. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  373. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  374. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  375. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  376. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  377. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  378. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  379. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  380. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  381. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  382. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  383. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  384. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  385. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  386. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  387. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  388. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  389. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  390. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  391. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  392. data/third_party/boringssl-with-bazel/err_data.c +475 -467
  393. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  394. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  395. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  396. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -15
  404. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
  405. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
  406. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +44 -2
  407. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +221 -49
  408. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +64 -20
  409. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  410. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +0 -8
  411. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  412. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  428. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  434. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  435. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  436. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
  437. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  438. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  439. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  440. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  441. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  442. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +48 -9
  443. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  444. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +26 -6
  445. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
  446. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -43
  447. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  448. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  449. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  450. data/third_party/boringssl-with-bazel/src/ssl/internal.h +13 -9
  451. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  452. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  453. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
  454. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  455. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  456. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +4 -8
  457. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +7 -2
  458. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  459. data/third_party/re2/re2/bitmap256.h +117 -0
  460. data/third_party/re2/re2/bitstate.cc +385 -0
  461. data/third_party/re2/re2/compile.cc +1279 -0
  462. data/third_party/re2/re2/dfa.cc +2130 -0
  463. data/third_party/re2/re2/filtered_re2.cc +121 -0
  464. data/third_party/re2/re2/filtered_re2.h +109 -0
  465. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  466. data/third_party/re2/re2/nfa.cc +713 -0
  467. data/third_party/re2/re2/onepass.cc +623 -0
  468. data/third_party/re2/re2/parse.cc +2464 -0
  469. data/third_party/re2/re2/perl_groups.cc +119 -0
  470. data/third_party/re2/re2/pod_array.h +55 -0
  471. data/third_party/re2/re2/prefilter.cc +710 -0
  472. data/third_party/re2/re2/prefilter.h +108 -0
  473. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  474. data/third_party/re2/re2/prefilter_tree.h +139 -0
  475. data/third_party/re2/re2/prog.cc +988 -0
  476. data/third_party/re2/re2/prog.h +436 -0
  477. data/third_party/re2/re2/re2.cc +1362 -0
  478. data/third_party/re2/re2/re2.h +1002 -0
  479. data/third_party/re2/re2/regexp.cc +980 -0
  480. data/third_party/re2/re2/regexp.h +659 -0
  481. data/third_party/re2/re2/set.cc +154 -0
  482. data/third_party/re2/re2/set.h +80 -0
  483. data/third_party/re2/re2/simplify.cc +657 -0
  484. data/third_party/re2/re2/sparse_array.h +392 -0
  485. data/third_party/re2/re2/sparse_set.h +264 -0
  486. data/third_party/re2/re2/stringpiece.cc +65 -0
  487. data/third_party/re2/re2/stringpiece.h +210 -0
  488. data/third_party/re2/re2/tostring.cc +351 -0
  489. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  490. data/third_party/re2/re2/unicode_casefold.h +78 -0
  491. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  492. data/third_party/re2/re2/unicode_groups.h +67 -0
  493. data/third_party/re2/re2/walker-inl.h +246 -0
  494. data/third_party/re2/util/benchmark.h +156 -0
  495. data/third_party/re2/util/flags.h +26 -0
  496. data/third_party/re2/util/logging.h +109 -0
  497. data/third_party/re2/util/malloc_counter.h +19 -0
  498. data/third_party/re2/util/mix.h +41 -0
  499. data/third_party/re2/util/mutex.h +148 -0
  500. data/third_party/re2/util/pcre.cc +1025 -0
  501. data/third_party/re2/util/pcre.h +681 -0
  502. data/third_party/re2/util/rune.cc +260 -0
  503. data/third_party/re2/util/strutil.cc +149 -0
  504. data/third_party/re2/util/strutil.h +21 -0
  505. data/third_party/re2/util/test.h +50 -0
  506. data/third_party/re2/util/utf.h +44 -0
  507. data/third_party/re2/util/util.h +42 -0
  508. data/third_party/upb/upb/decode.c +64 -15
  509. data/third_party/upb/upb/encode.c +2 -2
  510. data/third_party/upb/upb/msg.h +2 -2
  511. data/third_party/upb/upb/port_def.inc +1 -1
  512. data/third_party/upb/upb/table.c +0 -11
  513. data/third_party/upb/upb/table.int.h +0 -9
  514. data/third_party/upb/upb/upb.c +16 -14
  515. data/third_party/upb/upb/upb.h +26 -0
  516. data/third_party/upb/upb/upb.hpp +2 -0
  517. metadata +340 -153
  518. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  519. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1142
  520. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
  521. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
  522. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  523. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  524. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  525. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  526. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  527. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  528. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  529. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  530. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  531. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  532. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  533. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  534. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  535. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  536. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  537. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  538. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  539. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  540. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  541. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  542. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  543. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  544. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  545. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  546. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  547. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  548. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  549. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  550. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  551. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  552. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  553. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  554. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  555. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  556. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  557. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  558. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  559. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  560. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  561. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  562. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  563. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  564. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  565. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  566. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  567. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  568. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  569. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  570. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  571. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  572. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  573. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  574. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  575. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  576. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  577. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  578. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  579. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  580. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  581. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  582. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  583. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  584. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  585. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  586. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  587. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  588. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  589. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  590. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  591. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  592. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  593. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  594. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  595. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  596. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  597. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  598. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  599. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  600. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  601. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  602. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  603. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  604. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  605. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  606. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  607. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  608. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -29
  609. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  610. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  611. data/src/core/lib/slice/slice_hash_table.h +0 -199
  612. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  613. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  614. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -0,0 +1,543 @@
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
+ #define HPKE_MODE_PSK 1
42
+
43
+ static const char kHpkeRfcId[] = "HPKE-05 ";
44
+
45
+ static int add_label_string(CBB *cbb, const char *label) {
46
+ return CBB_add_bytes(cbb, (const uint8_t *)label, strlen(label));
47
+ }
48
+
49
+ // The suite_id for the KEM is defined as concat("KEM", I2OSP(kem_id, 2)). Note
50
+ // that the suite_id used outside of the KEM also includes the kdf_id and
51
+ // aead_id.
52
+ static const uint8_t kX25519SuiteID[] = {
53
+ 'K', 'E', 'M', HPKE_DHKEM_X25519_HKDF_SHA256 >> 8,
54
+ HPKE_DHKEM_X25519_HKDF_SHA256 & 0x00ff};
55
+
56
+ // The suite_id for non-KEM pieces of HPKE is defined as concat("HPKE",
57
+ // I2OSP(kem_id, 2), I2OSP(kdf_id, 2), I2OSP(aead_id, 2)).
58
+ static int hpke_build_suite_id(uint8_t out[HPKE_SUITE_ID_LEN], uint16_t kdf_id,
59
+ uint16_t aead_id) {
60
+ CBB cbb;
61
+ int ret = CBB_init_fixed(&cbb, out, HPKE_SUITE_ID_LEN) &&
62
+ add_label_string(&cbb, "HPKE") &&
63
+ CBB_add_u16(&cbb, HPKE_DHKEM_X25519_HKDF_SHA256) &&
64
+ CBB_add_u16(&cbb, kdf_id) &&
65
+ CBB_add_u16(&cbb, aead_id);
66
+ CBB_cleanup(&cbb);
67
+ return ret;
68
+ }
69
+
70
+ static int hpke_labeled_extract(const EVP_MD *hkdf_md, uint8_t *out_key,
71
+ size_t *out_len, const uint8_t *salt,
72
+ size_t salt_len, const uint8_t *suite_id,
73
+ size_t suite_id_len, const char *label,
74
+ const uint8_t *ikm, size_t ikm_len) {
75
+ // labeledIKM = concat("RFCXXXX ", suite_id, label, IKM)
76
+ CBB labeled_ikm;
77
+ int ok = CBB_init(&labeled_ikm, 0) &&
78
+ add_label_string(&labeled_ikm, kHpkeRfcId) &&
79
+ CBB_add_bytes(&labeled_ikm, suite_id, suite_id_len) &&
80
+ add_label_string(&labeled_ikm, label) &&
81
+ CBB_add_bytes(&labeled_ikm, ikm, ikm_len) &&
82
+ HKDF_extract(out_key, out_len, hkdf_md, CBB_data(&labeled_ikm),
83
+ CBB_len(&labeled_ikm), salt, salt_len);
84
+ CBB_cleanup(&labeled_ikm);
85
+ return ok;
86
+ }
87
+
88
+ static int hpke_labeled_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
89
+ size_t out_len, const uint8_t *prk,
90
+ size_t prk_len, const uint8_t *suite_id,
91
+ size_t suite_id_len, const char *label,
92
+ const uint8_t *info, size_t info_len) {
93
+ // labeledInfo = concat(I2OSP(L, 2), "RFCXXXX ", suite_id, label, info)
94
+ CBB labeled_info;
95
+ int ok = CBB_init(&labeled_info, 0) &&
96
+ CBB_add_u16(&labeled_info, out_len) &&
97
+ add_label_string(&labeled_info, kHpkeRfcId) &&
98
+ CBB_add_bytes(&labeled_info, suite_id, suite_id_len) &&
99
+ add_label_string(&labeled_info, label) &&
100
+ CBB_add_bytes(&labeled_info, info, info_len) &&
101
+ HKDF_expand(out_key, out_len, hkdf_md, prk, prk_len,
102
+ CBB_data(&labeled_info), CBB_len(&labeled_info));
103
+ CBB_cleanup(&labeled_info);
104
+ return ok;
105
+ }
106
+
107
+ static int hpke_extract_and_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
108
+ size_t out_len,
109
+ const uint8_t dh[X25519_PUBLIC_VALUE_LEN],
110
+ const uint8_t kem_context[KEM_CONTEXT_LEN]) {
111
+ uint8_t prk[EVP_MAX_MD_SIZE];
112
+ size_t prk_len;
113
+ static const char kEaePrkLabel[] = "eae_prk";
114
+ if (!hpke_labeled_extract(hkdf_md, prk, &prk_len, NULL, 0, kX25519SuiteID,
115
+ sizeof(kX25519SuiteID), kEaePrkLabel, dh,
116
+ X25519_PUBLIC_VALUE_LEN)) {
117
+ return 0;
118
+ }
119
+ static const char kPRKExpandLabel[] = "shared_secret";
120
+ if (!hpke_labeled_expand(hkdf_md, out_key, out_len, prk, prk_len,
121
+ kX25519SuiteID, sizeof(kX25519SuiteID),
122
+ kPRKExpandLabel, kem_context, KEM_CONTEXT_LEN)) {
123
+ return 0;
124
+ }
125
+ return 1;
126
+ }
127
+
128
+ static const EVP_AEAD *hpke_get_aead(uint16_t aead_id) {
129
+ switch (aead_id) {
130
+ case EVP_HPKE_AEAD_AES_GCM_128:
131
+ return EVP_aead_aes_128_gcm();
132
+ case EVP_HPKE_AEAD_AES_GCM_256:
133
+ return EVP_aead_aes_256_gcm();
134
+ case EVP_HPKE_AEAD_CHACHA20POLY1305:
135
+ return EVP_aead_chacha20_poly1305();
136
+ }
137
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
138
+ return NULL;
139
+ }
140
+
141
+ static const EVP_MD *hpke_get_kdf(uint16_t kdf_id) {
142
+ switch (kdf_id) {
143
+ case EVP_HPKE_HKDF_SHA256:
144
+ return EVP_sha256();
145
+ case EVP_HPKE_HKDF_SHA384:
146
+ return EVP_sha384();
147
+ case EVP_HPKE_HKDF_SHA512:
148
+ return EVP_sha512();
149
+ }
150
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
151
+ return NULL;
152
+ }
153
+
154
+ static int hpke_key_schedule(EVP_HPKE_CTX *hpke, uint8_t mode,
155
+ const uint8_t *shared_secret,
156
+ size_t shared_secret_len, const uint8_t *info,
157
+ size_t info_len, const uint8_t *psk,
158
+ size_t psk_len, const uint8_t *psk_id,
159
+ size_t psk_id_len) {
160
+ // Verify the PSK inputs.
161
+ switch (mode) {
162
+ case HPKE_MODE_BASE:
163
+ // This is an internal error, unreachable from the caller.
164
+ assert(psk_len == 0 && psk_id_len == 0);
165
+ break;
166
+ case HPKE_MODE_PSK:
167
+ if (psk_len == 0 || psk_id_len == 0) {
168
+ OPENSSL_PUT_ERROR(EVP, EVP_R_EMPTY_PSK);
169
+ return 0;
170
+ }
171
+ break;
172
+ default:
173
+ return 0;
174
+ }
175
+
176
+ // Attempt to get an EVP_AEAD*.
177
+ const EVP_AEAD *aead = hpke_get_aead(hpke->aead_id);
178
+ if (aead == NULL) {
179
+ return 0;
180
+ }
181
+
182
+ uint8_t suite_id[HPKE_SUITE_ID_LEN];
183
+ if (!hpke_build_suite_id(suite_id, hpke->kdf_id, hpke->aead_id)) {
184
+ return 0;
185
+ }
186
+
187
+ // psk_id_hash = LabeledExtract("", "psk_id_hash", psk_id)
188
+ static const char kPskIdHashLabel[] = "psk_id_hash";
189
+ uint8_t psk_id_hash[EVP_MAX_MD_SIZE];
190
+ size_t psk_id_hash_len;
191
+ if (!hpke_labeled_extract(hpke->hkdf_md, psk_id_hash, &psk_id_hash_len, NULL,
192
+ 0, suite_id, sizeof(suite_id), kPskIdHashLabel,
193
+ psk_id, psk_id_len)) {
194
+ return 0;
195
+ }
196
+
197
+ // info_hash = LabeledExtract("", "info_hash", info)
198
+ static const char kInfoHashLabel[] = "info_hash";
199
+ uint8_t info_hash[EVP_MAX_MD_SIZE];
200
+ size_t info_hash_len;
201
+ if (!hpke_labeled_extract(hpke->hkdf_md, info_hash, &info_hash_len, NULL, 0,
202
+ suite_id, sizeof(suite_id), kInfoHashLabel, info,
203
+ info_len)) {
204
+ return 0;
205
+ }
206
+
207
+ // key_schedule_context = concat(mode, psk_id_hash, info_hash)
208
+ uint8_t context[sizeof(uint8_t) + 2 * EVP_MAX_MD_SIZE];
209
+ size_t context_len;
210
+ CBB context_cbb;
211
+ if (!CBB_init_fixed(&context_cbb, context, sizeof(context)) ||
212
+ !CBB_add_u8(&context_cbb, mode) ||
213
+ !CBB_add_bytes(&context_cbb, psk_id_hash, psk_id_hash_len) ||
214
+ !CBB_add_bytes(&context_cbb, info_hash, info_hash_len) ||
215
+ !CBB_finish(&context_cbb, NULL, &context_len)) {
216
+ return 0;
217
+ }
218
+
219
+ // psk_hash = LabeledExtract("", "psk_hash", psk)
220
+ static const char kPskHashLabel[] = "psk_hash";
221
+ uint8_t psk_hash[EVP_MAX_MD_SIZE];
222
+ size_t psk_hash_len;
223
+ if (!hpke_labeled_extract(hpke->hkdf_md, psk_hash, &psk_hash_len, NULL, 0,
224
+ suite_id, sizeof(suite_id), kPskHashLabel, psk,
225
+ psk_len)) {
226
+ return 0;
227
+ }
228
+
229
+ // secret = LabeledExtract(psk_hash, "secret", shared_secret)
230
+ static const char kSecretExtractLabel[] = "secret";
231
+ uint8_t secret[EVP_MAX_MD_SIZE];
232
+ size_t secret_len;
233
+ if (!hpke_labeled_extract(hpke->hkdf_md, secret, &secret_len, psk_hash,
234
+ psk_hash_len, suite_id, sizeof(suite_id),
235
+ kSecretExtractLabel, shared_secret,
236
+ shared_secret_len)) {
237
+ return 0;
238
+ }
239
+
240
+ // key = LabeledExpand(secret, "key", key_schedule_context, Nk)
241
+ static const char kKeyExpandLabel[] = "key";
242
+ uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
243
+ const size_t kKeyLen = EVP_AEAD_key_length(aead);
244
+ if (!hpke_labeled_expand(hpke->hkdf_md, key, kKeyLen, secret, secret_len,
245
+ suite_id, sizeof(suite_id), kKeyExpandLabel, context,
246
+ context_len)) {
247
+ return 0;
248
+ }
249
+
250
+ // Initialize the HPKE context's AEAD context, storing a copy of |key|.
251
+ if (!EVP_AEAD_CTX_init(&hpke->aead_ctx, aead, key, kKeyLen, 0, NULL)) {
252
+ return 0;
253
+ }
254
+
255
+ // nonce = LabeledExpand(secret, "nonce", key_schedule_context, Nn)
256
+ static const char kNonceExpandLabel[] = "nonce";
257
+ if (!hpke_labeled_expand(hpke->hkdf_md, hpke->nonce,
258
+ EVP_AEAD_nonce_length(aead), secret, secret_len,
259
+ suite_id, sizeof(suite_id), kNonceExpandLabel,
260
+ context, context_len)) {
261
+ return 0;
262
+ }
263
+
264
+ // exporter_secret = LabeledExpand(secret, "exp", key_schedule_context, Nh)
265
+ static const char kExporterSecretExpandLabel[] = "exp";
266
+ if (!hpke_labeled_expand(hpke->hkdf_md, hpke->exporter_secret,
267
+ EVP_MD_size(hpke->hkdf_md), secret, secret_len,
268
+ suite_id, sizeof(suite_id),
269
+ kExporterSecretExpandLabel, context, context_len)) {
270
+ return 0;
271
+ }
272
+
273
+ return 1;
274
+ }
275
+
276
+ // The number of bytes written to |out_shared_secret| is the size of the KEM's
277
+ // KDF (currently we only support SHA256).
278
+ static int hpke_encap(EVP_HPKE_CTX *hpke,
279
+ uint8_t out_shared_secret[SHA256_DIGEST_LENGTH],
280
+ const uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN],
281
+ const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
282
+ const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]) {
283
+ uint8_t dh[X25519_PUBLIC_VALUE_LEN];
284
+ if (!X25519(dh, ephemeral_private, public_key_r)) {
285
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
286
+ return 0;
287
+ }
288
+
289
+ uint8_t kem_context[KEM_CONTEXT_LEN];
290
+ OPENSSL_memcpy(kem_context, ephemeral_public, X25519_PUBLIC_VALUE_LEN);
291
+ OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, public_key_r,
292
+ X25519_PUBLIC_VALUE_LEN);
293
+ if (!hpke_extract_and_expand(EVP_sha256(), out_shared_secret,
294
+ SHA256_DIGEST_LENGTH, dh, kem_context)) {
295
+ return 0;
296
+ }
297
+ return 1;
298
+ }
299
+
300
+ static int hpke_decap(const EVP_HPKE_CTX *hpke,
301
+ uint8_t out_shared_secret[SHA256_DIGEST_LENGTH],
302
+ const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
303
+ const uint8_t public_key_r[X25519_PUBLIC_VALUE_LEN],
304
+ const uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN]) {
305
+ uint8_t dh[X25519_PUBLIC_VALUE_LEN];
306
+ if (!X25519(dh, secret_key_r, enc)) {
307
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
308
+ return 0;
309
+ }
310
+ uint8_t kem_context[KEM_CONTEXT_LEN];
311
+ OPENSSL_memcpy(kem_context, enc, X25519_PUBLIC_VALUE_LEN);
312
+ OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, public_key_r,
313
+ X25519_PUBLIC_VALUE_LEN);
314
+ if (!hpke_extract_and_expand(EVP_sha256(), out_shared_secret,
315
+ SHA256_DIGEST_LENGTH, dh, kem_context)) {
316
+ return 0;
317
+ }
318
+ return 1;
319
+ }
320
+
321
+ void EVP_HPKE_CTX_init(EVP_HPKE_CTX *ctx) {
322
+ OPENSSL_memset(ctx, 0, sizeof(EVP_HPKE_CTX));
323
+ EVP_AEAD_CTX_zero(&ctx->aead_ctx);
324
+ }
325
+
326
+ void EVP_HPKE_CTX_cleanup(EVP_HPKE_CTX *ctx) {
327
+ EVP_AEAD_CTX_cleanup(&ctx->aead_ctx);
328
+ }
329
+
330
+ int EVP_HPKE_CTX_setup_base_s_x25519(
331
+ EVP_HPKE_CTX *hpke, uint8_t out_enc[X25519_PUBLIC_VALUE_LEN],
332
+ uint16_t kdf_id, uint16_t aead_id,
333
+ const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
334
+ const uint8_t *info, size_t info_len) {
335
+ // The GenerateKeyPair() step technically belongs in the KEM's Encap()
336
+ // function, but we've moved it up a layer to make it easier for tests to
337
+ // inject an ephemeral keypair.
338
+ uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN];
339
+ X25519_keypair(out_enc, ephemeral_private);
340
+ return EVP_HPKE_CTX_setup_base_s_x25519_for_test(
341
+ hpke, kdf_id, aead_id, peer_public_value, info, info_len,
342
+ ephemeral_private, out_enc);
343
+ }
344
+
345
+ int EVP_HPKE_CTX_setup_base_s_x25519_for_test(
346
+ EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
347
+ const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
348
+ const uint8_t *info, size_t info_len,
349
+ const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
350
+ const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]) {
351
+ hpke->is_sender = 1;
352
+ hpke->kdf_id = kdf_id;
353
+ hpke->aead_id = aead_id;
354
+ hpke->hkdf_md = hpke_get_kdf(kdf_id);
355
+ if (hpke->hkdf_md == NULL) {
356
+ return 0;
357
+ }
358
+ uint8_t shared_secret[SHA256_DIGEST_LENGTH];
359
+ if (!hpke_encap(hpke, shared_secret, peer_public_value, ephemeral_private,
360
+ ephemeral_public) ||
361
+ !hpke_key_schedule(hpke, HPKE_MODE_BASE, shared_secret,
362
+ sizeof(shared_secret), info, info_len, NULL, 0, NULL,
363
+ 0)) {
364
+ return 0;
365
+ }
366
+ return 1;
367
+ }
368
+
369
+ int EVP_HPKE_CTX_setup_base_r_x25519(
370
+ EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
371
+ const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
372
+ const uint8_t public_key[X25519_PUBLIC_VALUE_LEN],
373
+ const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
374
+ size_t info_len) {
375
+ hpke->is_sender = 0;
376
+ hpke->kdf_id = kdf_id;
377
+ hpke->aead_id = aead_id;
378
+ hpke->hkdf_md = hpke_get_kdf(kdf_id);
379
+ if (hpke->hkdf_md == NULL) {
380
+ return 0;
381
+ }
382
+ uint8_t shared_secret[SHA256_DIGEST_LENGTH];
383
+ if (!hpke_decap(hpke, shared_secret, enc, public_key, private_key) ||
384
+ !hpke_key_schedule(hpke, HPKE_MODE_BASE, shared_secret,
385
+ sizeof(shared_secret), info, info_len, NULL, 0, NULL,
386
+ 0)) {
387
+ return 0;
388
+ }
389
+ return 1;
390
+ }
391
+
392
+ int EVP_HPKE_CTX_setup_psk_s_x25519(
393
+ EVP_HPKE_CTX *hpke, uint8_t out_enc[X25519_PUBLIC_VALUE_LEN],
394
+ uint16_t kdf_id, uint16_t aead_id,
395
+ const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
396
+ const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len,
397
+ const uint8_t *psk_id, size_t psk_id_len) {
398
+ // The GenerateKeyPair() step technically belongs in the KEM's Encap()
399
+ // function, but we've moved it up a layer to make it easier for tests to
400
+ // inject an ephemeral keypair.
401
+ uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN];
402
+ X25519_keypair(out_enc, ephemeral_private);
403
+ return EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
404
+ hpke, kdf_id, aead_id, peer_public_value, info, info_len, psk, psk_len,
405
+ psk_id, psk_id_len, ephemeral_private, out_enc);
406
+ }
407
+
408
+ int EVP_HPKE_CTX_setup_psk_s_x25519_for_test(
409
+ EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
410
+ const uint8_t peer_public_value[X25519_PUBLIC_VALUE_LEN],
411
+ const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len,
412
+ const uint8_t *psk_id, size_t psk_id_len,
413
+ const uint8_t ephemeral_private[X25519_PRIVATE_KEY_LEN],
414
+ const uint8_t ephemeral_public[X25519_PUBLIC_VALUE_LEN]) {
415
+ hpke->is_sender = 1;
416
+ hpke->kdf_id = kdf_id;
417
+ hpke->aead_id = aead_id;
418
+ hpke->hkdf_md = hpke_get_kdf(kdf_id);
419
+ if (hpke->hkdf_md == NULL) {
420
+ return 0;
421
+ }
422
+ uint8_t shared_secret[SHA256_DIGEST_LENGTH];
423
+ if (!hpke_encap(hpke, shared_secret, peer_public_value, ephemeral_private,
424
+ ephemeral_public) ||
425
+ !hpke_key_schedule(hpke, HPKE_MODE_PSK, shared_secret,
426
+ sizeof(shared_secret), info, info_len, psk, psk_len,
427
+ psk_id, psk_id_len)) {
428
+ return 0;
429
+ }
430
+ return 1;
431
+ }
432
+
433
+ int EVP_HPKE_CTX_setup_psk_r_x25519(
434
+ EVP_HPKE_CTX *hpke, uint16_t kdf_id, uint16_t aead_id,
435
+ const uint8_t enc[X25519_PUBLIC_VALUE_LEN],
436
+ const uint8_t public_key[X25519_PUBLIC_VALUE_LEN],
437
+ const uint8_t private_key[X25519_PRIVATE_KEY_LEN], const uint8_t *info,
438
+ size_t info_len, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id,
439
+ size_t psk_id_len) {
440
+ hpke->is_sender = 0;
441
+ hpke->kdf_id = kdf_id;
442
+ hpke->aead_id = aead_id;
443
+ hpke->hkdf_md = hpke_get_kdf(kdf_id);
444
+ if (hpke->hkdf_md == NULL) {
445
+ return 0;
446
+ }
447
+ uint8_t shared_secret[SHA256_DIGEST_LENGTH];
448
+ if (!hpke_decap(hpke, shared_secret, enc, public_key, private_key) ||
449
+ !hpke_key_schedule(hpke, HPKE_MODE_PSK, shared_secret,
450
+ sizeof(shared_secret), info, info_len, psk, psk_len,
451
+ psk_id, psk_id_len)) {
452
+ return 0;
453
+ }
454
+ return 1;
455
+ }
456
+
457
+ static void hpke_nonce(const EVP_HPKE_CTX *hpke, uint8_t *out_nonce,
458
+ size_t nonce_len) {
459
+ assert(nonce_len >= 8);
460
+
461
+ // Write padded big-endian bytes of |hpke->seq| to |out_nonce|.
462
+ OPENSSL_memset(out_nonce, 0, nonce_len);
463
+ uint64_t seq_copy = hpke->seq;
464
+ for (size_t i = 0; i < 8; i++) {
465
+ out_nonce[nonce_len - i - 1] = seq_copy & 0xff;
466
+ seq_copy >>= 8;
467
+ }
468
+
469
+ // XOR the encoded sequence with the |hpke->nonce|.
470
+ for (size_t i = 0; i < nonce_len; i++) {
471
+ out_nonce[i] ^= hpke->nonce[i];
472
+ }
473
+ }
474
+
475
+ size_t EVP_HPKE_CTX_max_overhead(const EVP_HPKE_CTX *hpke) {
476
+ assert(hpke->is_sender);
477
+ return EVP_AEAD_max_overhead(hpke->aead_ctx.aead);
478
+ }
479
+
480
+ int EVP_HPKE_CTX_open(EVP_HPKE_CTX *hpke, uint8_t *out, size_t *out_len,
481
+ size_t max_out_len, const uint8_t *in, size_t in_len,
482
+ const uint8_t *ad, size_t ad_len) {
483
+ if (hpke->is_sender) {
484
+ OPENSSL_PUT_ERROR(EVP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
485
+ return 0;
486
+ }
487
+ if (hpke->seq == UINT64_MAX) {
488
+ OPENSSL_PUT_ERROR(EVP, ERR_R_OVERFLOW);
489
+ return 0;
490
+ }
491
+
492
+ uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
493
+ const size_t nonce_len = EVP_AEAD_nonce_length(hpke->aead_ctx.aead);
494
+ hpke_nonce(hpke, nonce, nonce_len);
495
+
496
+ if (!EVP_AEAD_CTX_open(&hpke->aead_ctx, out, out_len, max_out_len, nonce,
497
+ nonce_len, in, in_len, ad, ad_len)) {
498
+ return 0;
499
+ }
500
+ hpke->seq++;
501
+ return 1;
502
+ }
503
+
504
+ int EVP_HPKE_CTX_seal(EVP_HPKE_CTX *hpke, uint8_t *out, size_t *out_len,
505
+ size_t max_out_len, const uint8_t *in, size_t in_len,
506
+ const uint8_t *ad, size_t ad_len) {
507
+ if (!hpke->is_sender) {
508
+ OPENSSL_PUT_ERROR(EVP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
509
+ return 0;
510
+ }
511
+ if (hpke->seq == UINT64_MAX) {
512
+ OPENSSL_PUT_ERROR(EVP, ERR_R_OVERFLOW);
513
+ return 0;
514
+ }
515
+
516
+ uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
517
+ const size_t nonce_len = EVP_AEAD_nonce_length(hpke->aead_ctx.aead);
518
+ hpke_nonce(hpke, nonce, nonce_len);
519
+
520
+ if (!EVP_AEAD_CTX_seal(&hpke->aead_ctx, out, out_len, max_out_len, nonce,
521
+ nonce_len, in, in_len, ad, ad_len)) {
522
+ return 0;
523
+ }
524
+ hpke->seq++;
525
+ return 1;
526
+ }
527
+
528
+ int EVP_HPKE_CTX_export(const EVP_HPKE_CTX *hpke, uint8_t *out,
529
+ size_t secret_len, const uint8_t *context,
530
+ size_t context_len) {
531
+ uint8_t suite_id[HPKE_SUITE_ID_LEN];
532
+ if (!hpke_build_suite_id(suite_id, hpke->kdf_id, hpke->aead_id)) {
533
+ return 0;
534
+ }
535
+ static const char kExportExpandLabel[] = "sec";
536
+ if (!hpke_labeled_expand(hpke->hkdf_md, out, secret_len,
537
+ hpke->exporter_secret, EVP_MD_size(hpke->hkdf_md),
538
+ suite_id, sizeof(suite_id), kExportExpandLabel,
539
+ context, context_len)) {
540
+ return 0;
541
+ }
542
+ return 1;
543
+ }