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.

Files changed (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +595 -15723
  3. data/include/grpc/grpc_security.h +31 -14
  4. data/include/grpc/impl/codegen/README.md +22 -0
  5. data/include/grpc/impl/codegen/port_platform.h +6 -1
  6. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  7. data/src/core/ext/filters/client_channel/client_channel.cc +64 -20
  8. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  9. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
  11. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
  12. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  13. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  14. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +20 -13
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
  21. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +20 -9
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +54 -56
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  27. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  29. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  30. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  31. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +363 -14
  32. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
  33. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +5 -4
  34. data/src/core/ext/filters/client_channel/server_address.cc +40 -7
  35. data/src/core/ext/filters/client_channel/server_address.h +42 -4
  36. data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
  37. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  38. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  39. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  40. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  41. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  44. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  45. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  46. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  47. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +239 -277
  48. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  50. data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
  51. data/src/core/ext/transport/chttp2/transport/parsing.cc +1 -28
  52. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
  53. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  54. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  55. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  56. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  57. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  58. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  59. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  60. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  61. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  62. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  63. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  66. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  68. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  69. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  70. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  71. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  72. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  73. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  74. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  75. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  76. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  77. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  78. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  79. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  80. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  81. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  82. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  83. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  84. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  86. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  87. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  88. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  89. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  90. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  91. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  92. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  93. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  94. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  95. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  96. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  97. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  98. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  99. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  100. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  101. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  102. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  103. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  104. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  105. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  106. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  107. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  108. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  109. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  110. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  111. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  112. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  113. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  117. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  118. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  119. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  120. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  121. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  122. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  123. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  124. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  125. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  126. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  127. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  128. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  129. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  130. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  131. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  132. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  133. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  134. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  135. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  136. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  137. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  138. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  139. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  140. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  141. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  142. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  143. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  144. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  145. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  146. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  147. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  148. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  149. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  150. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  151. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  152. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  153. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  154. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  155. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  156. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  157. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  158. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  159. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  160. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  161. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  162. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  163. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  164. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  165. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  166. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  167. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  168. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.cc +1045 -767
  169. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +114 -99
  170. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
  171. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  172. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
  173. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
  174. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
  175. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +85 -417
  176. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
  177. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
  178. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +3 -3
  179. data/src/core/lib/channel/channelz.cc +14 -15
  180. data/src/core/lib/channel/channelz.h +1 -1
  181. data/src/core/lib/channel/channelz_registry.cc +3 -1
  182. data/src/core/lib/gpr/sync_posix.cc +2 -8
  183. data/src/core/lib/iomgr/endpoint.cc +5 -1
  184. data/src/core/lib/iomgr/endpoint.h +7 -3
  185. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
  186. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  187. data/src/core/lib/iomgr/iomgr.cc +0 -10
  188. data/src/core/lib/iomgr/iomgr.h +0 -10
  189. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  190. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  191. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  192. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  193. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  194. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  195. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  196. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  197. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  198. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  199. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  200. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  201. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  202. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  203. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  204. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  205. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  206. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  207. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -2
  209. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  210. data/src/core/lib/surface/call.cc +12 -12
  211. data/src/core/lib/surface/call.h +2 -1
  212. data/src/core/lib/surface/channel.cc +28 -20
  213. data/src/core/lib/surface/channel.h +12 -2
  214. data/src/core/lib/surface/completion_queue.cc +10 -272
  215. data/src/core/lib/surface/completion_queue.h +0 -8
  216. data/src/core/lib/surface/init.cc +1 -3
  217. data/src/core/lib/surface/server.cc +1066 -1244
  218. data/src/core/lib/surface/server.h +363 -87
  219. data/src/core/lib/surface/version.cc +2 -2
  220. data/src/core/lib/transport/authority_override.cc +38 -0
  221. data/src/core/lib/transport/authority_override.h +32 -0
  222. data/src/core/lib/transport/connectivity_state.cc +18 -13
  223. data/src/core/lib/transport/connectivity_state.h +18 -6
  224. data/src/core/lib/transport/error_utils.cc +13 -0
  225. data/src/core/lib/transport/error_utils.h +6 -0
  226. data/src/core/lib/transport/static_metadata.cc +295 -276
  227. data/src/core/lib/transport/static_metadata.h +80 -73
  228. data/src/core/lib/transport/transport.h +7 -0
  229. data/src/core/lib/uri/uri_parser.cc +23 -21
  230. data/src/core/lib/uri/uri_parser.h +3 -1
  231. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
  232. data/src/core/tsi/ssl_transport_security.cc +3 -9
  233. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  234. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
  235. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
  236. data/src/ruby/lib/grpc/version.rb +1 -1
  237. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  238. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  239. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  240. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  241. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  242. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  243. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  244. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  245. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  246. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  247. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  248. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  249. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  250. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  251. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  252. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  253. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  254. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  255. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  256. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  257. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  258. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  259. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  260. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  261. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  262. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  263. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  264. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  265. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  266. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  267. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  268. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  269. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  270. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  271. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  272. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  273. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  274. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  275. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  276. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  277. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  278. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  279. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  280. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  281. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  282. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  283. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  284. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  285. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  286. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  287. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  288. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  289. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  290. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  291. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  292. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  293. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  294. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  295. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  296. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  297. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  298. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  299. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  300. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  301. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  302. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  303. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  304. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  305. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  306. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  307. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  308. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  309. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  310. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  311. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  312. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  313. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  314. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  315. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  316. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  317. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  318. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  319. data/third_party/boringssl-with-bazel/err_data.c +263 -257
  320. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  321. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  323. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  325. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  326. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +39 -7
  327. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  328. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +11 -0
  329. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
  332. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  333. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -0
  334. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  335. data/third_party/upb/upb/decode.c +64 -15
  336. data/third_party/upb/upb/encode.c +2 -2
  337. data/third_party/upb/upb/msg.h +2 -2
  338. data/third_party/upb/upb/port_def.inc +1 -1
  339. data/third_party/upb/upb/table.c +0 -11
  340. data/third_party/upb/upb/table.int.h +0 -9
  341. data/third_party/upb/upb/upb.c +16 -14
  342. data/third_party/upb/upb/upb.h +26 -0
  343. data/third_party/upb/upb/upb.hpp +2 -0
  344. metadata +257 -155
  345. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  346. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  347. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  348. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  349. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  350. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  351. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  352. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  353. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  354. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  355. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  356. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  357. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  358. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  359. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  360. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  361. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  362. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  363. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  364. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  365. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  366. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  367. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  368. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  369. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  370. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  371. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  372. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  373. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  374. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  375. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  376. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  377. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  378. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  379. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  380. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  381. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  382. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  383. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  384. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  385. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  386. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  387. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  388. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  389. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  390. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  391. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  392. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  393. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  394. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  395. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  396. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  397. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  398. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  399. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  400. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  401. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  402. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  403. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  404. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  405. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  406. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  407. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  408. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  409. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  410. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  411. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  412. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  413. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  414. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  415. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  416. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  417. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  418. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  419. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  420. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  421. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  422. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  423. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  424. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  425. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  426. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  427. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  428. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  429. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  430. data/src/core/lib/slice/slice_hash_table.h +0 -199
  431. 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
+ }