grpc-flamingo 1.11.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (452) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1150 -176
  3. data/etc/roots.pem +40 -196
  4. data/include/grpc/grpc.h +49 -8
  5. data/include/grpc/grpc_security.h +123 -2
  6. data/include/grpc/grpc_security_constants.h +6 -0
  7. data/include/grpc/impl/codegen/fork.h +4 -4
  8. data/include/grpc/impl/codegen/grpc_types.h +26 -5
  9. data/include/grpc/impl/codegen/log.h +112 -0
  10. data/include/grpc/impl/codegen/port_platform.h +55 -4
  11. data/include/grpc/module.modulemap +2 -0
  12. data/include/grpc/support/log.h +2 -80
  13. data/include/grpc/support/string_util.h +2 -0
  14. data/include/grpc/support/sync.h +0 -16
  15. data/src/boringssl/err_data.c +602 -588
  16. data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
  19. data/src/core/ext/filters/client_channel/client_channel.h +5 -0
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
  23. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  24. data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
  25. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
  41. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
  42. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
  45. data/src/core/ext/filters/client_channel/method_params.h +4 -0
  46. data/src/core/ext/filters/client_channel/resolver.h +10 -0
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
  55. data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
  58. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
  59. data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
  60. data/src/core/ext/filters/client_channel/subchannel.h +11 -0
  61. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
  62. data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
  63. data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
  64. data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
  65. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
  67. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  68. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
  70. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
  71. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
  74. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
  76. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
  77. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
  78. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
  79. data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
  80. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  81. data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
  82. data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
  83. data/src/core/lib/channel/channel_args.cc +28 -0
  84. data/src/core/lib/channel/channel_args.h +4 -0
  85. data/src/core/lib/channel/channel_stack.cc +22 -29
  86. data/src/core/lib/channel/channel_stack.h +2 -2
  87. data/src/core/lib/channel/channel_stack_builder.cc +0 -3
  88. data/src/core/lib/channel/channel_stack_builder.h +0 -2
  89. data/src/core/lib/channel/channel_trace.cc +28 -63
  90. data/src/core/lib/channel/channel_trace.h +13 -17
  91. data/src/core/lib/channel/channelz.cc +153 -0
  92. data/src/core/lib/channel/channelz.h +133 -0
  93. data/src/core/lib/channel/channelz_registry.cc +145 -0
  94. data/src/core/lib/channel/channelz_registry.h +120 -0
  95. data/src/core/lib/channel/connected_channel.cc +8 -1
  96. data/src/core/lib/channel/handshaker.cc +71 -0
  97. data/src/core/lib/channel/handshaker.h +4 -0
  98. data/src/core/lib/debug/stats.h +7 -0
  99. data/src/core/lib/debug/stats_data.cc +5 -0
  100. data/src/core/lib/debug/stats_data.h +120 -0
  101. data/src/core/lib/debug/trace.cc +2 -1
  102. data/src/core/lib/debug/trace.h +12 -1
  103. data/src/core/lib/gpr/alloc.h +28 -0
  104. data/src/core/lib/gpr/arena.cc +38 -45
  105. data/src/core/lib/gpr/log.cc +8 -2
  106. data/src/core/lib/gpr/log_android.cc +4 -0
  107. data/src/core/lib/gpr/log_linux.cc +4 -0
  108. data/src/core/lib/gpr/log_posix.cc +4 -0
  109. data/src/core/lib/gpr/log_windows.cc +5 -0
  110. data/src/core/lib/gpr/string.cc +28 -0
  111. data/src/core/lib/gpr/string.h +10 -0
  112. data/src/core/lib/gprpp/abstract.h +5 -2
  113. data/src/core/lib/gprpp/fork.cc +268 -0
  114. data/src/core/lib/gprpp/fork.h +88 -0
  115. data/src/core/lib/gprpp/inlined_vector.h +87 -37
  116. data/src/core/lib/gprpp/memory.h +12 -0
  117. data/src/core/lib/gprpp/mutex_lock.h +42 -0
  118. data/src/core/lib/gprpp/orphanable.h +10 -12
  119. data/src/core/lib/gprpp/ref_counted.h +10 -12
  120. data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
  121. data/src/core/lib/gprpp/thd.h +0 -3
  122. data/src/core/lib/gprpp/thd_posix.cc +5 -54
  123. data/src/core/lib/gprpp/thd_windows.cc +0 -7
  124. data/src/core/lib/http/httpcli_security_connector.cc +1 -3
  125. data/src/core/lib/iomgr/call_combiner.cc +13 -13
  126. data/src/core/lib/iomgr/call_combiner.h +84 -1
  127. data/src/core/lib/iomgr/closure.h +6 -5
  128. data/src/core/lib/iomgr/combiner.cc +30 -13
  129. data/src/core/lib/iomgr/combiner.h +1 -1
  130. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  131. data/src/core/lib/iomgr/error.cc +12 -0
  132. data/src/core/lib/iomgr/error.h +5 -0
  133. data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
  134. data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
  135. data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
  136. data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
  137. data/src/core/lib/iomgr/ev_posix.cc +88 -24
  138. data/src/core/lib/iomgr/ev_posix.h +48 -12
  139. data/src/core/lib/iomgr/exec_ctx.cc +15 -9
  140. data/src/core/lib/iomgr/exec_ctx.h +48 -20
  141. data/src/core/lib/iomgr/executor.cc +274 -142
  142. data/src/core/lib/iomgr/executor.h +82 -16
  143. data/src/core/lib/iomgr/fork_posix.cc +42 -19
  144. data/src/core/lib/iomgr/iocp_windows.cc +9 -4
  145. data/src/core/lib/iomgr/iomgr.cc +2 -0
  146. data/src/core/lib/iomgr/iomgr.h +5 -0
  147. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  148. data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
  149. data/src/core/lib/iomgr/lockfree_event.cc +5 -1
  150. data/src/core/lib/iomgr/polling_entity.cc +11 -2
  151. data/src/core/lib/iomgr/pollset_custom.cc +2 -2
  152. data/src/core/lib/iomgr/port.h +51 -1
  153. data/src/core/lib/iomgr/resolve_address.h +1 -1
  154. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  155. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  156. data/src/core/lib/iomgr/resource_quota.cc +89 -12
  157. data/src/core/lib/iomgr/resource_quota.h +16 -0
  158. data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
  159. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  160. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  161. data/src/core/lib/iomgr/socket_mutator.h +1 -1
  162. data/src/core/lib/iomgr/socket_utils.h +9 -0
  163. data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
  164. data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
  165. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
  166. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  167. data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
  168. data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
  169. data/src/core/lib/iomgr/socket_windows.cc +33 -0
  170. data/src/core/lib/iomgr/socket_windows.h +6 -0
  171. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
  173. data/src/core/lib/iomgr/tcp_custom.cc +11 -11
  174. data/src/core/lib/iomgr/tcp_posix.cc +49 -36
  175. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  176. data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
  177. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  178. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
  179. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
  180. data/src/core/lib/iomgr/tcp_uv.cc +3 -0
  181. data/src/core/lib/iomgr/tcp_windows.cc +18 -2
  182. data/src/core/lib/iomgr/tcp_windows.h +2 -0
  183. data/src/core/lib/iomgr/timer.h +4 -3
  184. data/src/core/lib/iomgr/timer_generic.cc +133 -51
  185. data/src/core/lib/iomgr/timer_manager.cc +12 -14
  186. data/src/core/lib/iomgr/timer_uv.cc +3 -0
  187. data/src/core/lib/iomgr/udp_server.cc +106 -52
  188. data/src/core/lib/iomgr/udp_server.h +8 -4
  189. data/src/core/lib/json/json.cc +12 -1
  190. data/src/core/lib/json/json.h +5 -0
  191. data/src/core/lib/profiling/basic_timers.cc +1 -0
  192. data/src/core/lib/security/context/security_context.cc +8 -8
  193. data/src/core/lib/security/context/security_context.h +6 -2
  194. data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
  195. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
  196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
  197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
  198. data/src/core/lib/security/credentials/credentials.h +1 -0
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
  200. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
  201. data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
  202. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
  203. data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
  204. data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
  205. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
  206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  207. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
  208. data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
  209. data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
  210. data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
  211. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
  212. data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
  213. data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
  214. data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
  215. data/src/core/lib/security/security_connector/security_connector.cc +79 -32
  216. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  217. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  218. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  219. data/src/core/lib/security/transport/security_handshaker.cc +7 -2
  220. data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
  221. data/src/core/lib/security/util/json_util.cc +4 -0
  222. data/src/core/lib/slice/slice.cc +6 -2
  223. data/src/core/lib/slice/slice_buffer.cc +27 -7
  224. data/src/core/lib/slice/slice_hash_table.h +4 -0
  225. data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
  226. data/src/core/lib/surface/call.cc +119 -58
  227. data/src/core/lib/surface/call.h +7 -0
  228. data/src/core/lib/surface/channel.cc +50 -18
  229. data/src/core/lib/surface/channel.h +4 -0
  230. data/src/core/lib/surface/completion_queue.cc +153 -18
  231. data/src/core/lib/surface/completion_queue.h +20 -2
  232. data/src/core/lib/surface/completion_queue_factory.cc +13 -4
  233. data/src/core/lib/surface/init.cc +7 -8
  234. data/src/core/lib/surface/init.h +0 -1
  235. data/src/core/lib/surface/server.cc +16 -0
  236. data/src/core/lib/surface/version.cc +1 -1
  237. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  238. data/src/core/lib/transport/bdp_estimator.h +2 -2
  239. data/src/core/lib/transport/byte_stream.cc +1 -1
  240. data/src/core/lib/transport/connectivity_state.cc +6 -7
  241. data/src/core/lib/transport/service_config.cc +2 -2
  242. data/src/core/lib/transport/service_config.h +3 -3
  243. data/src/core/lib/transport/transport.cc +22 -10
  244. data/src/core/lib/transport/transport.h +18 -18
  245. data/src/core/lib/transport/transport_op_string.cc +1 -8
  246. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
  247. data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
  248. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
  249. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
  250. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
  251. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
  252. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
  253. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
  254. data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
  255. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
  256. data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
  257. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
  258. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
  259. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  260. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
  261. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
  262. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
  263. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
  264. data/src/core/tsi/fake_transport_security.cc +1 -0
  265. data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
  266. data/src/core/tsi/local_transport_security.cc +209 -0
  267. data/src/core/tsi/local_transport_security.h +51 -0
  268. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  269. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
  270. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
  271. data/src/core/tsi/ssl_transport_security.cc +245 -116
  272. data/src/core/tsi/ssl_types.h +2 -0
  273. data/src/core/tsi/transport_security.cc +14 -0
  274. data/src/core/tsi/transport_security.h +2 -0
  275. data/src/core/tsi/transport_security_interface.h +11 -1
  276. data/src/ruby/bin/math_client.rb +17 -9
  277. data/src/ruby/ext/grpc/extconf.rb +1 -26
  278. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
  281. data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/generate_proto_ruby.sh +7 -1
  285. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
  286. data/src/ruby/spec/call_credentials_spec.rb +1 -1
  287. data/src/ruby/spec/call_spec.rb +1 -1
  288. data/src/ruby/spec/channel_credentials_spec.rb +1 -1
  289. data/src/ruby/spec/channel_spec.rb +1 -1
  290. data/src/ruby/spec/client_auth_spec.rb +1 -12
  291. data/src/ruby/spec/client_server_spec.rb +1 -1
  292. data/src/ruby/spec/compression_options_spec.rb +1 -1
  293. data/src/ruby/spec/error_sanity_spec.rb +1 -1
  294. data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
  295. data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
  296. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  297. data/src/ruby/spec/generic/service_spec.rb +1 -1
  298. data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
  299. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
  300. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  301. data/src/ruby/spec/server_credentials_spec.rb +1 -1
  302. data/src/ruby/spec/server_spec.rb +1 -1
  303. data/src/ruby/spec/spec_helper.rb +1 -0
  304. data/src/ruby/spec/support/services.rb +1 -1
  305. data/src/ruby/spec/time_consts_spec.rb +1 -1
  306. data/third_party/address_sorting/address_sorting.c +17 -11
  307. data/third_party/address_sorting/address_sorting_windows.c +43 -3
  308. data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
  309. data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
  310. data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
  311. data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
  312. data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
  313. data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
  314. data/third_party/boringssl/crypto/bio/fd.c +1 -0
  315. data/third_party/boringssl/crypto/bio/file.c +2 -0
  316. data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
  317. data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
  318. data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
  319. data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
  320. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
  321. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
  322. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
  323. data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
  324. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
  325. data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
  326. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
  327. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
  328. data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
  329. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
  330. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
  331. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
  332. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
  333. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
  334. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
  335. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
  336. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
  337. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
  338. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
  339. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
  340. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
  341. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
  342. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
  343. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
  344. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
  345. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
  346. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
  347. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
  348. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
  349. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
  350. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
  351. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
  352. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
  353. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
  354. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
  355. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
  356. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
  357. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
  358. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
  359. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
  360. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
  361. data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
  362. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
  363. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
  364. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
  365. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
  366. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
  367. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
  368. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
  369. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
  370. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
  371. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
  372. data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
  373. data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
  374. data/third_party/boringssl/crypto/internal.h +65 -2
  375. data/third_party/boringssl/crypto/mem.c +0 -2
  376. data/third_party/boringssl/crypto/obj/obj.c +6 -73
  377. data/third_party/boringssl/crypto/thread_pthread.c +35 -5
  378. data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
  379. data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
  380. data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
  381. data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
  382. data/third_party/boringssl/crypto/x509/x_name.c +13 -0
  383. data/third_party/boringssl/include/openssl/aead.h +10 -0
  384. data/third_party/boringssl/include/openssl/asn1.h +2 -3
  385. data/third_party/boringssl/include/openssl/base.h +5 -14
  386. data/third_party/boringssl/include/openssl/bio.h +1 -1
  387. data/third_party/boringssl/include/openssl/bn.h +62 -18
  388. data/third_party/boringssl/include/openssl/bytestring.h +53 -28
  389. data/third_party/boringssl/include/openssl/crypto.h +4 -0
  390. data/third_party/boringssl/include/openssl/ec.h +10 -4
  391. data/third_party/boringssl/include/openssl/ec_key.h +7 -6
  392. data/third_party/boringssl/include/openssl/err.h +9 -9
  393. data/third_party/boringssl/include/openssl/evp.h +1 -1
  394. data/third_party/boringssl/include/openssl/rsa.h +35 -10
  395. data/third_party/boringssl/include/openssl/ssl.h +167 -19
  396. data/third_party/boringssl/include/openssl/ssl3.h +0 -1
  397. data/third_party/boringssl/include/openssl/stack.h +1 -1
  398. data/third_party/boringssl/include/openssl/tls1.h +10 -2
  399. data/third_party/boringssl/include/openssl/x509.h +4 -0
  400. data/third_party/boringssl/include/openssl/x509v3.h +1 -0
  401. data/third_party/boringssl/ssl/d1_both.cc +16 -2
  402. data/third_party/boringssl/ssl/dtls_method.cc +1 -1
  403. data/third_party/boringssl/ssl/handoff.cc +285 -0
  404. data/third_party/boringssl/ssl/handshake.cc +26 -12
  405. data/third_party/boringssl/ssl/handshake_client.cc +101 -95
  406. data/third_party/boringssl/ssl/handshake_server.cc +14 -2
  407. data/third_party/boringssl/ssl/internal.h +132 -79
  408. data/third_party/boringssl/ssl/s3_both.cc +2 -2
  409. data/third_party/boringssl/ssl/s3_lib.cc +3 -1
  410. data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
  411. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
  412. data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
  413. data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
  414. data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
  415. data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
  416. data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
  417. data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
  418. data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
  419. data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
  420. data/third_party/boringssl/ssl/t1_enc.cc +73 -124
  421. data/third_party/boringssl/ssl/t1_lib.cc +367 -41
  422. data/third_party/boringssl/ssl/tls13_both.cc +8 -0
  423. data/third_party/boringssl/ssl/tls13_client.cc +98 -184
  424. data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
  425. data/third_party/boringssl/ssl/tls13_server.cc +91 -137
  426. data/third_party/boringssl/ssl/tls_method.cc +0 -17
  427. data/third_party/boringssl/ssl/tls_record.cc +1 -10
  428. data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
  429. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
  430. data/third_party/boringssl/third_party/fiat/internal.h +32 -20
  431. data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
  432. metadata +86 -71
  433. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
  434. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
  435. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
  436. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
  437. data/src/core/lib/channel/channel_trace_registry.cc +0 -80
  438. data/src/core/lib/channel/channel_trace_registry.h +0 -43
  439. data/src/core/lib/gpr/fork.cc +0 -78
  440. data/src/core/tsi/transport_security_adapter.cc +0 -235
  441. data/src/core/tsi/transport_security_adapter.h +0 -41
  442. data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
  443. data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
  444. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
  445. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
  446. data/src/ruby/pb/test/client.rb +0 -764
  447. data/src/ruby/pb/test/server.rb +0 -252
  448. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
  449. data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
  450. data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
  451. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
  452. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -4,21 +4,21 @@
4
4
  * This package is an SSL implementation written
5
5
  * by Eric Young (eay@cryptsoft.com).
6
6
  * The implementation was written so as to conform with Netscapes SSL.
7
- *
7
+ *
8
8
  * This library is free for commercial and non-commercial use as long as
9
9
  * the following conditions are aheared to. The following conditions
10
10
  * apply to all code found in this distribution, be it the RC4, RSA,
11
11
  * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12
12
  * included with this distribution is covered by the same copyright terms
13
13
  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14
- *
14
+ *
15
15
  * Copyright remains Eric Young's, and as such any Copyright notices in
16
16
  * the code are not to be removed.
17
17
  * If this package is used in a product, Eric Young should be given attribution
18
18
  * as the author of the parts of the library used.
19
19
  * This can be in the form of a textual message at program startup or
20
20
  * in documentation (online or textual) provided with the package.
21
- *
21
+ *
22
22
  * Redistribution and use in source and binary forms, with or without
23
23
  * modification, are permitted provided that the following conditions
24
24
  * are met:
@@ -33,10 +33,10 @@
33
33
  * Eric Young (eay@cryptsoft.com)"
34
34
  * The word 'cryptographic' can be left out if the rouines from the library
35
35
  * being used are not cryptographic related :-).
36
- * 4. If you include any Windows specific code (or a derivative thereof) from
36
+ * 4. If you include any Windows specific code (or a derivative thereof) from
37
37
  * the apps directory (application code) you must include an acknowledgement:
38
38
  * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39
- *
39
+ *
40
40
  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41
41
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
42
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -48,7 +48,7 @@
48
48
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49
49
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50
50
  * SUCH DAMAGE.
51
- *
51
+ *
52
52
  * The licence and distribution terms for any publically available version or
53
53
  * derivative of this code cannot be changed. i.e. this code cannot simply be
54
54
  * copied and put under another distribution licence
@@ -62,7 +62,7 @@
62
62
  * are met:
63
63
  *
64
64
  * 1. Redistributions of source code must retain the above copyright
65
- * notice, this list of conditions and the following disclaimer.
65
+ * notice, this list of conditions and the following disclaimer.
66
66
  *
67
67
  * 2. Redistributions in binary form must reproduce the above copyright
68
68
  * notice, this list of conditions and the following disclaimer in
@@ -116,6 +116,7 @@
116
116
  #include <utility>
117
117
 
118
118
  #include <openssl/bytestring.h>
119
+ #include <openssl/chacha.h>
119
120
  #include <openssl/digest.h>
120
121
  #include <openssl/err.h>
121
122
  #include <openssl/evp.h>
@@ -463,29 +464,30 @@ static const uint16_t kSignSignatureAlgorithms[] = {
463
464
  SSL_SIGN_RSA_PKCS1_SHA1,
464
465
  };
465
466
 
466
- int tls12_add_verify_sigalgs(const SSL *ssl, CBB *out) {
467
- const uint16_t *sigalgs = kVerifySignatureAlgorithms;
468
- size_t num_sigalgs = OPENSSL_ARRAY_SIZE(kVerifySignatureAlgorithms);
469
- if (ssl->ctx->num_verify_sigalgs != 0) {
470
- sigalgs = ssl->ctx->verify_sigalgs;
471
- num_sigalgs = ssl->ctx->num_verify_sigalgs;
467
+ bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out) {
468
+ bool use_default = ssl->ctx->num_verify_sigalgs == 0;
469
+ Span<const uint16_t> sigalgs = kVerifySignatureAlgorithms;
470
+ if (!use_default) {
471
+ sigalgs = MakeConstSpan(ssl->ctx->verify_sigalgs,
472
+ ssl->ctx->num_verify_sigalgs);
472
473
  }
473
474
 
474
- for (size_t i = 0; i < num_sigalgs; i++) {
475
- if (sigalgs == kVerifySignatureAlgorithms &&
476
- sigalgs[i] == SSL_SIGN_ED25519 &&
475
+ for (uint16_t sigalg : sigalgs) {
476
+ if (use_default &&
477
+ sigalg == SSL_SIGN_ED25519 &&
477
478
  !ssl->ctx->ed25519_enabled) {
478
479
  continue;
479
480
  }
480
- if (!CBB_add_u16(out, sigalgs[i])) {
481
- return 0;
481
+ if (!CBB_add_u16(out, sigalg)) {
482
+ return false;
482
483
  }
483
484
  }
484
485
 
485
- return 1;
486
+ return true;
486
487
  }
487
488
 
488
- int tls12_check_peer_sigalg(SSL *ssl, uint8_t *out_alert, uint16_t sigalg) {
489
+ bool tls12_check_peer_sigalg(const SSL *ssl, uint8_t *out_alert,
490
+ uint16_t sigalg) {
489
491
  const uint16_t *sigalgs = kVerifySignatureAlgorithms;
490
492
  size_t num_sigalgs = OPENSSL_ARRAY_SIZE(kVerifySignatureAlgorithms);
491
493
  if (ssl->ctx->num_verify_sigalgs != 0) {
@@ -500,13 +502,13 @@ int tls12_check_peer_sigalg(SSL *ssl, uint8_t *out_alert, uint16_t sigalg) {
500
502
  continue;
501
503
  }
502
504
  if (sigalg == sigalgs[i]) {
503
- return 1;
505
+ return true;
504
506
  }
505
507
  }
506
508
 
507
509
  OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_SIGNATURE_TYPE);
508
510
  *out_alert = SSL_AD_ILLEGAL_PARAMETER;
509
- return 0;
511
+ return false;
510
512
  }
511
513
 
512
514
  // tls_extension represents a TLS extension that is handled internally. The
@@ -1810,7 +1812,6 @@ static bool ext_pre_shared_key_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1810
1812
  // selected cipher in HelloRetryRequest does not match. This avoids performing
1811
1813
  // the transcript hash transformation for multiple hashes.
1812
1814
  if (hs->received_hello_retry_request &&
1813
- ssl_is_draft21(ssl->version) &&
1814
1815
  ssl->session->cipher->algorithm_prf != hs->new_cipher->algorithm_prf) {
1815
1816
  return true;
1816
1817
  }
@@ -2033,7 +2034,7 @@ static bool ext_early_data_parse_serverhello(SSL_HANDSHAKE *hs,
2033
2034
  return false;
2034
2035
  }
2035
2036
 
2036
- ssl->early_data_accepted = true;
2037
+ ssl->s3->early_data_accepted = true;
2037
2038
  return true;
2038
2039
  }
2039
2040
 
@@ -2055,7 +2056,7 @@ static bool ext_early_data_parse_clienthello(SSL_HANDSHAKE *hs,
2055
2056
  }
2056
2057
 
2057
2058
  static bool ext_early_data_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2058
- if (!hs->ssl->early_data_accepted) {
2059
+ if (!hs->ssl->s3->early_data_accepted) {
2059
2060
  return true;
2060
2061
  }
2061
2062
 
@@ -2103,7 +2104,7 @@ static bool ext_key_share_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2103
2104
  // Add a fake group. See draft-davidben-tls-grease-01.
2104
2105
  if (ssl->ctx->grease_enabled &&
2105
2106
  (!CBB_add_u16(&kse_bytes,
2106
- ssl_get_grease_value(ssl, ssl_grease_group)) ||
2107
+ ssl_get_grease_value(hs, ssl_grease_group)) ||
2107
2108
  !CBB_add_u16(&kse_bytes, 1 /* length */) ||
2108
2109
  !CBB_add_u8(&kse_bytes, 0 /* one byte key share */))) {
2109
2110
  return false;
@@ -2273,7 +2274,7 @@ static bool ext_supported_versions_add_clienthello(SSL_HANDSHAKE *hs, CBB *out)
2273
2274
 
2274
2275
  // Add a fake version. See draft-davidben-tls-grease-01.
2275
2276
  if (ssl->ctx->grease_enabled &&
2276
- !CBB_add_u16(&versions, ssl_get_grease_value(ssl, ssl_grease_version))) {
2277
+ !CBB_add_u16(&versions, ssl_get_grease_value(hs, ssl_grease_version))) {
2277
2278
  return false;
2278
2279
  }
2279
2280
 
@@ -2310,6 +2311,79 @@ static bool ext_cookie_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2310
2311
  }
2311
2312
 
2312
2313
 
2314
+ // Dummy PQ Padding extension
2315
+ //
2316
+ // Dummy post-quantum padding invovles the client (and later server) sending
2317
+ // useless, random-looking bytes in an extension in their ClientHello or
2318
+ // ServerHello. These extensions are sized to simulate a post-quantum
2319
+ // key-exchange and so enable measurement of the latency impact of the
2320
+ // additional bandwidth.
2321
+
2322
+ static bool ext_dummy_pq_padding_add(CBB *out, size_t len) {
2323
+ CBB contents;
2324
+ uint8_t *buffer;
2325
+ if (!CBB_add_u16(out, TLSEXT_TYPE_dummy_pq_padding) ||
2326
+ !CBB_add_u16_length_prefixed(out, &contents) ||
2327
+ !CBB_add_space(&contents, &buffer, len)) {
2328
+ return false;
2329
+ }
2330
+
2331
+ // The length is used as the nonce so that different length extensions have
2332
+ // different contents. There's no reason this has to be the case, it just
2333
+ // makes things a little more obvious in a packet dump.
2334
+ uint8_t nonce[12] = {0};
2335
+ memcpy(nonce, &len, sizeof(len));
2336
+
2337
+ memset(buffer, 0, len);
2338
+ static const uint8_t kZeroKey[32] = {0};
2339
+ CRYPTO_chacha_20(buffer, buffer, len, kZeroKey, nonce, 0);
2340
+
2341
+ return CBB_flush(out);
2342
+ }
2343
+
2344
+ static bool ext_dummy_pq_padding_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2345
+ const size_t len = hs->ssl->dummy_pq_padding_len;
2346
+ if (len == 0) {
2347
+ return true;
2348
+ }
2349
+
2350
+ return ext_dummy_pq_padding_add(out, len);
2351
+ }
2352
+
2353
+ static bool ext_dummy_pq_padding_parse_serverhello(SSL_HANDSHAKE *hs,
2354
+ uint8_t *out_alert,
2355
+ CBS *contents) {
2356
+ if (contents == nullptr) {
2357
+ return true;
2358
+ }
2359
+
2360
+ if (CBS_len(contents) != hs->ssl->dummy_pq_padding_len) {
2361
+ return false;
2362
+ }
2363
+
2364
+ hs->ssl->did_dummy_pq_padding = true;
2365
+ return true;
2366
+ }
2367
+
2368
+ static bool ext_dummy_pq_padding_parse_clienthello(SSL_HANDSHAKE *hs,
2369
+ uint8_t *out_alert,
2370
+ CBS *contents) {
2371
+ if (contents != nullptr &&
2372
+ 0 < CBS_len(contents) && CBS_len(contents) < (1 << 12)) {
2373
+ hs->dummy_pq_padding_len = CBS_len(contents);
2374
+ }
2375
+
2376
+ return true;
2377
+ }
2378
+
2379
+ static bool ext_dummy_pq_padding_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2380
+ if (!hs->dummy_pq_padding_len) {
2381
+ return true;
2382
+ }
2383
+
2384
+ return ext_dummy_pq_padding_add(out, hs->dummy_pq_padding_len);
2385
+ }
2386
+
2313
2387
  // Negotiated Groups
2314
2388
  //
2315
2389
  // https://tools.ietf.org/html/rfc4492#section-5.1.2
@@ -2327,7 +2401,7 @@ static bool ext_supported_groups_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2327
2401
  // Add a fake group. See draft-davidben-tls-grease-01.
2328
2402
  if (ssl->ctx->grease_enabled &&
2329
2403
  !CBB_add_u16(&groups_bytes,
2330
- ssl_get_grease_value(ssl, ssl_grease_group))) {
2404
+ ssl_get_grease_value(hs, ssl_grease_group))) {
2331
2405
  return false;
2332
2406
  }
2333
2407
 
@@ -2389,6 +2463,224 @@ static bool ext_supported_groups_parse_clienthello(SSL_HANDSHAKE *hs,
2389
2463
  return true;
2390
2464
  }
2391
2465
 
2466
+ // Token Binding
2467
+ //
2468
+ // https://tools.ietf.org/html/draft-ietf-tokbind-negotiation-10
2469
+
2470
+ // The Token Binding version number currently matches the draft number of
2471
+ // draft-ietf-tokbind-protocol, and when published as an RFC it will be 0x0100.
2472
+ // Since there are no wire changes to the protocol from draft 13 through the
2473
+ // current draft (16), this implementation supports all versions in that range.
2474
+ static uint16_t kTokenBindingMaxVersion = 16;
2475
+ static uint16_t kTokenBindingMinVersion = 13;
2476
+
2477
+ static bool ext_token_binding_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2478
+ SSL *const ssl = hs->ssl;
2479
+ if (ssl->token_binding_params == nullptr || SSL_is_dtls(ssl)) {
2480
+ return true;
2481
+ }
2482
+
2483
+ CBB contents, params;
2484
+ if (!CBB_add_u16(out, TLSEXT_TYPE_token_binding) ||
2485
+ !CBB_add_u16_length_prefixed(out, &contents) ||
2486
+ !CBB_add_u16(&contents, kTokenBindingMaxVersion) ||
2487
+ !CBB_add_u8_length_prefixed(&contents, &params) ||
2488
+ !CBB_add_bytes(&params, ssl->token_binding_params,
2489
+ ssl->token_binding_params_len) ||
2490
+ !CBB_flush(out)) {
2491
+ return false;
2492
+ }
2493
+
2494
+ return true;
2495
+ }
2496
+
2497
+ static bool ext_token_binding_parse_serverhello(SSL_HANDSHAKE *hs,
2498
+ uint8_t *out_alert,
2499
+ CBS *contents) {
2500
+ SSL *const ssl = hs->ssl;
2501
+ if (contents == nullptr) {
2502
+ return true;
2503
+ }
2504
+
2505
+ CBS params_list;
2506
+ uint16_t version;
2507
+ uint8_t param;
2508
+ if (!CBS_get_u16(contents, &version) ||
2509
+ !CBS_get_u8_length_prefixed(contents, &params_list) ||
2510
+ !CBS_get_u8(&params_list, &param) ||
2511
+ CBS_len(&params_list) > 0 ||
2512
+ CBS_len(contents) > 0) {
2513
+ *out_alert = SSL_AD_DECODE_ERROR;
2514
+ return false;
2515
+ }
2516
+
2517
+ // The server-negotiated version must be less than or equal to our version.
2518
+ if (version > kTokenBindingMaxVersion) {
2519
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
2520
+ return false;
2521
+ }
2522
+
2523
+ // If the server-selected version is less than what we support, then Token
2524
+ // Binding wasn't negotiated (but the extension was parsed successfully).
2525
+ if (version < kTokenBindingMinVersion) {
2526
+ return true;
2527
+ }
2528
+
2529
+ for (size_t i = 0; i < ssl->token_binding_params_len; ++i) {
2530
+ if (param == ssl->token_binding_params[i]) {
2531
+ ssl->negotiated_token_binding_param = param;
2532
+ ssl->token_binding_negotiated = true;
2533
+ return true;
2534
+ }
2535
+ }
2536
+
2537
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
2538
+ return false;
2539
+ }
2540
+
2541
+ // select_tb_param looks for the first token binding param in
2542
+ // |ssl->token_binding_params| that is also in |params| and puts it in
2543
+ // |ssl->negotiated_token_binding_param|. It returns true if a token binding
2544
+ // param is found, and false otherwise.
2545
+ static bool select_tb_param(SSL *ssl, Span<const uint8_t> peer_params) {
2546
+ for (size_t i = 0; i < ssl->token_binding_params_len; ++i) {
2547
+ uint8_t tb_param = ssl->token_binding_params[i];
2548
+ for (uint8_t peer_param : peer_params) {
2549
+ if (tb_param == peer_param) {
2550
+ ssl->negotiated_token_binding_param = tb_param;
2551
+ return true;
2552
+ }
2553
+ }
2554
+ }
2555
+ return false;
2556
+ }
2557
+
2558
+ static bool ext_token_binding_parse_clienthello(SSL_HANDSHAKE *hs,
2559
+ uint8_t *out_alert,
2560
+ CBS *contents) {
2561
+ SSL *const ssl = hs->ssl;
2562
+ if (contents == nullptr || ssl->token_binding_params == nullptr) {
2563
+ return true;
2564
+ }
2565
+
2566
+ CBS params;
2567
+ uint16_t version;
2568
+ if (!CBS_get_u16(contents, &version) ||
2569
+ !CBS_get_u8_length_prefixed(contents, &params) ||
2570
+ CBS_len(&params) == 0 ||
2571
+ CBS_len(contents) > 0) {
2572
+ *out_alert = SSL_AD_DECODE_ERROR;
2573
+ return false;
2574
+ }
2575
+
2576
+ // If the client-selected version is less than what we support, then Token
2577
+ // Binding wasn't negotiated (but the extension was parsed successfully).
2578
+ if (version < kTokenBindingMinVersion) {
2579
+ return true;
2580
+ }
2581
+
2582
+ // If the client-selected version is higher than we support, use our max
2583
+ // version. Otherwise, use the client's version.
2584
+ hs->negotiated_token_binding_version =
2585
+ std::min(version, kTokenBindingMaxVersion);
2586
+ if (!select_tb_param(ssl, params)) {
2587
+ return true;
2588
+ }
2589
+
2590
+ ssl->token_binding_negotiated = true;
2591
+ return true;
2592
+ }
2593
+
2594
+ static bool ext_token_binding_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2595
+ SSL *const ssl = hs->ssl;
2596
+
2597
+ if (!ssl->token_binding_negotiated) {
2598
+ return true;
2599
+ }
2600
+
2601
+ CBB contents, params;
2602
+ if (!CBB_add_u16(out, TLSEXT_TYPE_token_binding) ||
2603
+ !CBB_add_u16_length_prefixed(out, &contents) ||
2604
+ !CBB_add_u16(&contents, hs->negotiated_token_binding_version) ||
2605
+ !CBB_add_u8_length_prefixed(&contents, &params) ||
2606
+ !CBB_add_u8(&params, ssl->negotiated_token_binding_param) ||
2607
+ !CBB_flush(out)) {
2608
+ return false;
2609
+ }
2610
+
2611
+ return true;
2612
+ }
2613
+
2614
+ // QUIC Transport Parameters
2615
+
2616
+ static bool ext_quic_transport_params_add_clienthello(SSL_HANDSHAKE *hs,
2617
+ CBB *out) {
2618
+ SSL *const ssl = hs->ssl;
2619
+ if (!ssl->quic_transport_params || hs->max_version <= TLS1_2_VERSION) {
2620
+ return true;
2621
+ }
2622
+
2623
+ CBB contents;
2624
+ if (!CBB_add_u16(out, TLSEXT_TYPE_quic_transport_parameters) ||
2625
+ !CBB_add_u16_length_prefixed(out, &contents) ||
2626
+ !CBB_add_bytes(&contents, ssl->quic_transport_params,
2627
+ ssl->quic_transport_params_len) ||
2628
+ !CBB_flush(out)) {
2629
+ return false;
2630
+ }
2631
+ return true;
2632
+ }
2633
+
2634
+ static bool ext_quic_transport_params_parse_serverhello(SSL_HANDSHAKE *hs,
2635
+ uint8_t *out_alert,
2636
+ CBS *contents) {
2637
+ SSL *const ssl = hs->ssl;
2638
+ if (contents == nullptr) {
2639
+ return true;
2640
+ }
2641
+ // QUIC requires TLS 1.3.
2642
+ if (ssl_protocol_version(ssl) < TLS1_3_VERSION) {
2643
+ *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
2644
+ return false;
2645
+ }
2646
+
2647
+ return ssl->s3->peer_quic_transport_params.CopyFrom(*contents);
2648
+ }
2649
+
2650
+ static bool ext_quic_transport_params_parse_clienthello(SSL_HANDSHAKE *hs,
2651
+ uint8_t *out_alert,
2652
+ CBS *contents) {
2653
+ SSL *const ssl = hs->ssl;
2654
+ if (!contents || !ssl->quic_transport_params) {
2655
+ return true;
2656
+ }
2657
+ // Ignore the extension before TLS 1.3.
2658
+ if (ssl_protocol_version(ssl) < TLS1_3_VERSION) {
2659
+ return true;
2660
+ }
2661
+
2662
+ return ssl->s3->peer_quic_transport_params.CopyFrom(*contents);
2663
+ }
2664
+
2665
+ static bool ext_quic_transport_params_add_serverhello(SSL_HANDSHAKE *hs,
2666
+ CBB *out) {
2667
+ SSL *const ssl = hs->ssl;
2668
+ if (!ssl->quic_transport_params) {
2669
+ return true;
2670
+ }
2671
+
2672
+ CBB contents;
2673
+ if (!CBB_add_u16(out, TLSEXT_TYPE_quic_transport_parameters) ||
2674
+ !CBB_add_u16_length_prefixed(out, &contents) ||
2675
+ !CBB_add_bytes(&contents, ssl->quic_transport_params,
2676
+ ssl->quic_transport_params_len) ||
2677
+ !CBB_flush(out)) {
2678
+ return false;
2679
+ }
2680
+
2681
+ return true;
2682
+ }
2683
+
2392
2684
 
2393
2685
  // kExtensions contains all the supported extensions.
2394
2686
  static const struct tls_extension kExtensions[] = {
@@ -2530,6 +2822,22 @@ static const struct tls_extension kExtensions[] = {
2530
2822
  ignore_parse_clienthello,
2531
2823
  dont_add_serverhello,
2532
2824
  },
2825
+ {
2826
+ TLSEXT_TYPE_dummy_pq_padding,
2827
+ NULL,
2828
+ ext_dummy_pq_padding_add_clienthello,
2829
+ ext_dummy_pq_padding_parse_serverhello,
2830
+ ext_dummy_pq_padding_parse_clienthello,
2831
+ ext_dummy_pq_padding_add_serverhello,
2832
+ },
2833
+ {
2834
+ TLSEXT_TYPE_quic_transport_parameters,
2835
+ NULL,
2836
+ ext_quic_transport_params_add_clienthello,
2837
+ ext_quic_transport_params_parse_serverhello,
2838
+ ext_quic_transport_params_parse_clienthello,
2839
+ ext_quic_transport_params_add_serverhello,
2840
+ },
2533
2841
  // The final extension must be non-empty. WebSphere Application Server 7.0 is
2534
2842
  // intolerant to the last extension being zero-length. See
2535
2843
  // https://crbug.com/363583.
@@ -2541,6 +2849,14 @@ static const struct tls_extension kExtensions[] = {
2541
2849
  ext_supported_groups_parse_clienthello,
2542
2850
  dont_add_serverhello,
2543
2851
  },
2852
+ {
2853
+ TLSEXT_TYPE_token_binding,
2854
+ NULL,
2855
+ ext_token_binding_add_clienthello,
2856
+ ext_token_binding_parse_serverhello,
2857
+ ext_token_binding_parse_clienthello,
2858
+ ext_token_binding_add_serverhello,
2859
+ },
2544
2860
  };
2545
2861
 
2546
2862
  #define kNumExtensions (sizeof(kExtensions) / sizeof(struct tls_extension))
@@ -2591,7 +2907,7 @@ int ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out, size_t header_len) {
2591
2907
  uint16_t grease_ext1 = 0;
2592
2908
  if (ssl->ctx->grease_enabled) {
2593
2909
  // Add a fake empty extension. See draft-davidben-tls-grease-01.
2594
- grease_ext1 = ssl_get_grease_value(ssl, ssl_grease_extension1);
2910
+ grease_ext1 = ssl_get_grease_value(hs, ssl_grease_extension1);
2595
2911
  if (!CBB_add_u16(&extensions, grease_ext1) ||
2596
2912
  !CBB_add_u16(&extensions, 0 /* zero length */)) {
2597
2913
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
@@ -2619,7 +2935,7 @@ int ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out, size_t header_len) {
2619
2935
 
2620
2936
  if (ssl->ctx->grease_enabled) {
2621
2937
  // Add a fake non-empty extension. See draft-davidben-tls-grease-01.
2622
- uint16_t grease_ext2 = ssl_get_grease_value(ssl, ssl_grease_extension2);
2938
+ uint16_t grease_ext2 = ssl_get_grease_value(hs, ssl_grease_extension2);
2623
2939
 
2624
2940
  // The two fake extensions must not have the same value. GREASE values are
2625
2941
  // of the form 0x1a1a, 0x2a2a, 0x3a3a, etc., so XOR to generate a different
@@ -2903,6 +3219,15 @@ static int ssl_scan_serverhello_tlsext(SSL_HANDSHAKE *hs, CBS *cbs,
2903
3219
 
2904
3220
  static int ssl_check_clienthello_tlsext(SSL_HANDSHAKE *hs) {
2905
3221
  SSL *const ssl = hs->ssl;
3222
+
3223
+ if (ssl->token_binding_negotiated &&
3224
+ !(SSL_get_secure_renegotiation_support(ssl) &&
3225
+ SSL_get_extms_support(ssl))) {
3226
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI);
3227
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
3228
+ return -1;
3229
+ }
3230
+
2906
3231
  int ret = SSL_TLSEXT_ERR_NOACK;
2907
3232
  int al = SSL_AD_UNRECOGNIZED_NAME;
2908
3233
 
@@ -3138,29 +3463,29 @@ enum ssl_ticket_aead_result_t ssl_process_ticket(
3138
3463
  return ssl_ticket_aead_success;
3139
3464
  }
3140
3465
 
3141
- int tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *in_sigalgs) {
3466
+ bool tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *in_sigalgs) {
3142
3467
  // Extension ignored for inappropriate versions
3143
3468
  if (ssl_protocol_version(hs->ssl) < TLS1_2_VERSION) {
3144
- return 1;
3469
+ return true;
3145
3470
  }
3146
3471
 
3147
3472
  return parse_u16_array(in_sigalgs, &hs->peer_sigalgs);
3148
3473
  }
3149
3474
 
3150
- int tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey) {
3475
+ bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey) {
3151
3476
  switch (EVP_PKEY_id(pkey)) {
3152
3477
  case EVP_PKEY_RSA:
3153
3478
  *out = SSL_SIGN_RSA_PKCS1_MD5_SHA1;
3154
- return 1;
3479
+ return true;
3155
3480
  case EVP_PKEY_EC:
3156
3481
  *out = SSL_SIGN_ECDSA_SHA1;
3157
- return 1;
3482
+ return true;
3158
3483
  default:
3159
- return 0;
3484
+ return false;
3160
3485
  }
3161
3486
  }
3162
3487
 
3163
- int tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out) {
3488
+ bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out) {
3164
3489
  SSL *const ssl = hs->ssl;
3165
3490
  CERT *cert = ssl->cert;
3166
3491
 
@@ -3169,9 +3494,9 @@ int tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out) {
3169
3494
  if (ssl_protocol_version(ssl) < TLS1_2_VERSION) {
3170
3495
  if (!tls1_get_legacy_signature_algorithm(out, hs->local_pubkey.get())) {
3171
3496
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_COMMON_SIGNATURE_ALGORITHMS);
3172
- return 0;
3497
+ return false;
3173
3498
  }
3174
- return 1;
3499
+ return true;
3175
3500
  }
3176
3501
 
3177
3502
  Span<const uint16_t> sigalgs = kSignSignatureAlgorithms;
@@ -3200,13 +3525,13 @@ int tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out) {
3200
3525
  for (uint16_t peer_sigalg : peer_sigalgs) {
3201
3526
  if (sigalg == peer_sigalg) {
3202
3527
  *out = sigalg;
3203
- return 1;
3528
+ return true;
3204
3529
  }
3205
3530
  }
3206
3531
  }
3207
3532
 
3208
3533
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_COMMON_SIGNATURE_ALGORITHMS);
3209
- return 0;
3534
+ return false;
3210
3535
  }
3211
3536
 
3212
3537
  int tls1_verify_channel_id(SSL_HANDSHAKE *hs, const SSLMessage &msg) {
@@ -3264,6 +3589,7 @@ int tls1_verify_channel_id(SSL_HANDSHAKE *hs, const SSLMessage &msg) {
3264
3589
  int sig_ok = ECDSA_do_verify(digest, digest_len, sig.get(), key.get());
3265
3590
  #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
3266
3591
  sig_ok = 1;
3592
+ ERR_clear_error();
3267
3593
  #endif
3268
3594
  if (!sig_ok) {
3269
3595
  OPENSSL_PUT_ERROR(SSL, SSL_R_CHANNEL_ID_SIGNATURE_INVALID);