grpc 1.4.5 → 1.6.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 (928) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1235 -1100
  3. data/etc/roots.pem +0 -412
  4. data/include/grpc/byte_buffer.h +10 -25
  5. data/include/grpc/byte_buffer_reader.h +10 -25
  6. data/include/grpc/census.h +10 -25
  7. data/include/grpc/compression.h +10 -25
  8. data/include/grpc/grpc.h +15 -26
  9. data/include/grpc/grpc_cronet.h +10 -25
  10. data/include/grpc/grpc_posix.h +10 -25
  11. data/include/grpc/grpc_security.h +10 -25
  12. data/include/grpc/grpc_security_constants.h +10 -25
  13. data/include/grpc/impl/codegen/atm.h +11 -25
  14. data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
  15. data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
  16. data/include/grpc/impl/codegen/atm_windows.h +10 -25
  17. data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
  18. data/include/grpc/impl/codegen/compression_types.h +12 -27
  19. data/include/grpc/impl/codegen/connectivity_state.h +10 -25
  20. data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
  21. data/include/grpc/impl/codegen/gpr_slice.h +10 -25
  22. data/include/grpc/impl/codegen/gpr_types.h +10 -25
  23. data/include/grpc/impl/codegen/grpc_types.h +42 -43
  24. data/include/grpc/impl/codegen/port_platform.h +10 -25
  25. data/include/grpc/impl/codegen/propagation_bits.h +10 -25
  26. data/include/grpc/impl/codegen/slice.h +13 -28
  27. data/include/grpc/impl/codegen/status.h +10 -25
  28. data/include/grpc/impl/codegen/sync.h +10 -25
  29. data/include/grpc/impl/codegen/sync_generic.h +10 -25
  30. data/include/grpc/impl/codegen/sync_posix.h +10 -25
  31. data/include/grpc/impl/codegen/sync_windows.h +10 -25
  32. data/include/grpc/load_reporting.h +10 -25
  33. data/include/grpc/slice.h +10 -25
  34. data/include/grpc/slice_buffer.h +10 -25
  35. data/include/grpc/status.h +10 -25
  36. data/include/grpc/support/alloc.h +10 -25
  37. data/include/grpc/support/atm.h +10 -25
  38. data/include/grpc/support/atm_gcc_atomic.h +10 -25
  39. data/include/grpc/support/atm_gcc_sync.h +10 -25
  40. data/include/grpc/support/atm_windows.h +10 -25
  41. data/include/grpc/support/avl.h +46 -49
  42. data/include/grpc/support/cmdline.h +10 -25
  43. data/include/grpc/support/cpu.h +10 -25
  44. data/include/grpc/support/histogram.h +10 -25
  45. data/include/grpc/support/host_port.h +10 -25
  46. data/include/grpc/support/log.h +10 -25
  47. data/include/grpc/support/log_windows.h +10 -25
  48. data/include/grpc/support/port_platform.h +10 -25
  49. data/include/grpc/support/string_util.h +10 -25
  50. data/include/grpc/support/subprocess.h +10 -25
  51. data/include/grpc/support/sync.h +10 -25
  52. data/include/grpc/support/sync_generic.h +10 -25
  53. data/include/grpc/support/sync_posix.h +10 -25
  54. data/include/grpc/support/sync_windows.h +10 -25
  55. data/include/grpc/support/thd.h +10 -25
  56. data/include/grpc/support/time.h +10 -25
  57. data/include/grpc/support/tls.h +10 -25
  58. data/include/grpc/support/tls_gcc.h +10 -25
  59. data/include/grpc/support/tls_msvc.h +10 -25
  60. data/include/grpc/support/tls_pthread.h +10 -25
  61. data/include/grpc/support/useful.h +10 -25
  62. data/include/grpc/support/workaround_list.h +11 -26
  63. data/src/boringssl/err_data.c +277 -259
  64. data/src/core/ext/census/aggregation.h +10 -25
  65. data/src/core/ext/census/base_resources.c +10 -25
  66. data/src/core/ext/census/base_resources.h +10 -25
  67. data/src/core/ext/census/census_interface.h +10 -25
  68. data/src/core/ext/census/census_rpc_stats.h +10 -25
  69. data/src/core/ext/census/context.c +10 -25
  70. data/src/core/ext/census/gen/census.pb.c +10 -25
  71. data/src/core/ext/census/gen/census.pb.h +10 -25
  72. data/src/core/ext/census/gen/trace_context.pb.c +10 -25
  73. data/src/core/ext/census/gen/trace_context.pb.h +10 -25
  74. data/src/core/ext/census/grpc_context.c +10 -25
  75. data/src/core/ext/census/grpc_filter.c +11 -26
  76. data/src/core/ext/census/grpc_filter.h +10 -25
  77. data/src/core/ext/census/grpc_plugin.c +10 -25
  78. data/src/core/ext/census/initialize.c +10 -25
  79. data/src/core/ext/census/intrusive_hash_map.c +10 -25
  80. data/src/core/ext/census/intrusive_hash_map.h +10 -25
  81. data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
  82. data/src/core/ext/census/mlog.c +10 -25
  83. data/src/core/ext/census/mlog.h +10 -25
  84. data/src/core/ext/census/operation.c +10 -25
  85. data/src/core/ext/census/placeholders.c +10 -25
  86. data/src/core/ext/census/resource.c +10 -25
  87. data/src/core/ext/census/resource.h +10 -25
  88. data/src/core/ext/census/rpc_metric_id.h +10 -25
  89. data/src/core/ext/census/trace_context.c +10 -25
  90. data/src/core/ext/census/trace_context.h +10 -25
  91. data/src/core/ext/census/trace_label.h +10 -25
  92. data/src/core/ext/census/trace_propagation.h +10 -25
  93. data/src/core/ext/census/trace_status.h +10 -25
  94. data/src/core/ext/census/trace_string.h +10 -25
  95. data/src/core/ext/census/tracing.c +10 -26
  96. data/src/core/ext/census/tracing.h +10 -25
  97. data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
  98. data/src/core/ext/filters/client_channel/client_channel.c +617 -520
  99. data/src/core/ext/filters/client_channel/client_channel.h +15 -28
  100. data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
  101. data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
  102. data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
  103. data/src/core/ext/filters/client_channel/connector.c +10 -25
  104. data/src/core/ext/filters/client_channel/connector.h +10 -25
  105. data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
  106. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
  107. data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
  108. data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
  109. data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
  110. data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
  113. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
  114. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
  115. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
  116. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
  117. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
  118. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
  119. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
  120. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
  121. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
  122. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
  123. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
  124. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
  125. data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
  126. data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
  127. data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
  128. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
  129. data/src/core/ext/filters/client_channel/parse_address.c +10 -25
  130. data/src/core/ext/filters/client_channel/parse_address.h +10 -25
  131. data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
  132. data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
  133. data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
  134. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
  135. data/src/core/ext/filters/client_channel/resolver.c +33 -38
  136. data/src/core/ext/filters/client_channel/resolver.h +19 -30
  137. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
  143. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
  144. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
  145. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
  146. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
  147. data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
  148. data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
  149. data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
  150. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
  151. data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
  152. data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
  153. data/src/core/ext/filters/client_channel/subchannel.c +33 -55
  154. data/src/core/ext/filters/client_channel/subchannel.h +16 -26
  155. data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
  156. data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
  157. data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
  158. data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
  159. data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
  160. data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
  161. data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
  162. data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
  163. data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
  164. data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
  165. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
  166. data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
  167. data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
  168. data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
  169. data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
  170. data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
  171. data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
  172. data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
  173. data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
  174. data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
  175. data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
  176. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
  177. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
  178. data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
  179. data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
  180. data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
  181. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
  182. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
  183. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
  184. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
  185. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
  186. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
  187. data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
  188. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
  189. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
  190. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
  191. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
  192. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
  193. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
  194. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
  195. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
  196. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
  197. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
  199. data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
  200. data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
  201. data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
  202. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
  203. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
  204. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
  205. data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
  206. data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
  207. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
  208. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
  209. data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
  210. data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
  211. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
  213. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
  214. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
  215. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
  216. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
  217. data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
  218. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
  219. data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
  220. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
  221. data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
  222. data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
  223. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
  224. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
  225. data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
  226. data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
  227. data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
  228. data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
  229. data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
  230. data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
  231. data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
  232. data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
  233. data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
  234. data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
  235. data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
  236. data/src/core/lib/channel/channel_args.c +52 -27
  237. data/src/core/lib/channel/channel_args.h +18 -27
  238. data/src/core/lib/channel/channel_stack.c +11 -26
  239. data/src/core/lib/channel/channel_stack.h +12 -27
  240. data/src/core/lib/channel/channel_stack_builder.c +11 -26
  241. data/src/core/lib/channel/channel_stack_builder.h +10 -25
  242. data/src/core/lib/channel/connected_channel.c +10 -25
  243. data/src/core/lib/channel/connected_channel.h +10 -25
  244. data/src/core/lib/channel/context.h +10 -25
  245. data/src/core/lib/channel/handshaker.c +14 -29
  246. data/src/core/lib/channel/handshaker.h +10 -25
  247. data/src/core/lib/channel/handshaker_factory.c +10 -25
  248. data/src/core/lib/channel/handshaker_factory.h +10 -25
  249. data/src/core/lib/channel/handshaker_registry.c +10 -25
  250. data/src/core/lib/channel/handshaker_registry.h +10 -25
  251. data/src/core/lib/compression/algorithm_metadata.h +10 -25
  252. data/src/core/lib/compression/compression.c +10 -25
  253. data/src/core/lib/compression/message_compress.c +10 -25
  254. data/src/core/lib/compression/message_compress.h +10 -25
  255. data/src/core/lib/compression/stream_compression.c +191 -0
  256. data/src/core/lib/compression/stream_compression.h +90 -0
  257. data/src/core/lib/debug/trace.c +28 -29
  258. data/src/core/lib/debug/trace.h +16 -30
  259. data/src/core/lib/http/format_request.c +10 -25
  260. data/src/core/lib/http/format_request.h +10 -25
  261. data/src/core/lib/http/httpcli.c +19 -35
  262. data/src/core/lib/http/httpcli.h +10 -25
  263. data/src/core/lib/http/httpcli_security_connector.c +17 -30
  264. data/src/core/lib/http/parser.c +11 -26
  265. data/src/core/lib/http/parser.h +10 -25
  266. data/src/core/lib/iomgr/closure.c +62 -25
  267. data/src/core/lib/iomgr/closure.h +81 -26
  268. data/src/core/lib/iomgr/combiner.c +103 -200
  269. data/src/core/lib/iomgr/combiner.h +14 -32
  270. data/src/core/lib/iomgr/endpoint.c +10 -29
  271. data/src/core/lib/iomgr/endpoint.h +10 -29
  272. data/src/core/lib/iomgr/endpoint_pair.h +10 -25
  273. data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
  274. data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
  275. data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
  276. data/src/core/lib/iomgr/error.c +45 -46
  277. data/src/core/lib/iomgr/error.h +21 -34
  278. data/src/core/lib/iomgr/error_internal.h +10 -25
  279. data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
  280. data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
  281. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
  282. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
  283. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
  284. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
  285. data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
  286. data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
  287. data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
  288. data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
  289. data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
  290. data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
  291. data/src/core/lib/iomgr/ev_posix.c +25 -56
  292. data/src/core/lib/iomgr/ev_posix.h +15 -44
  293. data/src/core/lib/iomgr/ev_windows.c +11 -26
  294. data/src/core/lib/iomgr/exec_ctx.c +36 -45
  295. data/src/core/lib/iomgr/exec_ctx.h +10 -25
  296. data/src/core/lib/iomgr/executor.c +152 -127
  297. data/src/core/lib/iomgr/executor.h +18 -26
  298. data/src/core/lib/iomgr/gethostname.h +26 -0
  299. data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
  300. data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
  301. data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
  302. data/src/core/lib/iomgr/iocp_windows.c +10 -25
  303. data/src/core/lib/iomgr/iocp_windows.h +10 -25
  304. data/src/core/lib/iomgr/iomgr.c +17 -28
  305. data/src/core/lib/iomgr/iomgr.h +12 -27
  306. data/src/core/lib/iomgr/iomgr_internal.h +10 -25
  307. data/src/core/lib/iomgr/iomgr_posix.c +11 -26
  308. data/src/core/lib/iomgr/iomgr_posix.h +10 -25
  309. data/src/core/lib/iomgr/iomgr_uv.c +19 -26
  310. data/src/core/lib/iomgr/iomgr_uv.h +37 -0
  311. data/src/core/lib/iomgr/iomgr_windows.c +10 -25
  312. data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
  313. data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
  314. data/src/core/lib/iomgr/load_file.c +10 -25
  315. data/src/core/lib/iomgr/load_file.h +10 -25
  316. data/src/core/lib/iomgr/lockfree_event.c +22 -35
  317. data/src/core/lib/iomgr/lockfree_event.h +13 -27
  318. data/src/core/lib/iomgr/nameser.h +104 -0
  319. data/src/core/lib/iomgr/network_status_tracker.c +10 -25
  320. data/src/core/lib/iomgr/network_status_tracker.h +10 -25
  321. data/src/core/lib/iomgr/polling_entity.c +10 -25
  322. data/src/core/lib/iomgr/polling_entity.h +14 -34
  323. data/src/core/lib/iomgr/pollset.h +14 -25
  324. data/src/core/lib/iomgr/pollset_set.h +10 -25
  325. data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
  326. data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
  327. data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
  328. data/src/core/lib/iomgr/pollset_uv.c +25 -26
  329. data/src/core/lib/iomgr/pollset_uv.h +10 -25
  330. data/src/core/lib/iomgr/pollset_windows.c +17 -27
  331. data/src/core/lib/iomgr/pollset_windows.h +10 -25
  332. data/src/core/lib/iomgr/port.h +24 -25
  333. data/src/core/lib/iomgr/resolve_address.h +10 -25
  334. data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
  335. data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
  336. data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
  337. data/src/core/lib/iomgr/resource_quota.c +52 -67
  338. data/src/core/lib/iomgr/resource_quota.h +10 -25
  339. data/src/core/lib/iomgr/sockaddr.h +10 -25
  340. data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
  341. data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
  342. data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
  343. data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
  344. data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
  345. data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
  346. data/src/core/lib/iomgr/socket_mutator.c +14 -31
  347. data/src/core/lib/iomgr/socket_mutator.h +10 -25
  348. data/src/core/lib/iomgr/socket_utils.h +10 -25
  349. data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
  350. data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
  351. data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
  352. data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
  353. data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
  354. data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
  355. data/src/core/lib/iomgr/socket_windows.c +12 -27
  356. data/src/core/lib/iomgr/socket_windows.h +10 -25
  357. data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
  358. data/src/core/lib/iomgr/tcp_client.h +10 -25
  359. data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
  360. data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
  361. data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
  362. data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
  363. data/src/core/lib/iomgr/tcp_posix.c +36 -55
  364. data/src/core/lib/iomgr/tcp_posix.h +10 -25
  365. data/src/core/lib/iomgr/tcp_server.h +10 -25
  366. data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
  367. data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
  368. data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
  369. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
  370. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
  371. data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
  372. data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
  373. data/src/core/lib/iomgr/tcp_uv.c +41 -45
  374. data/src/core/lib/iomgr/tcp_uv.h +10 -25
  375. data/src/core/lib/iomgr/tcp_windows.c +39 -53
  376. data/src/core/lib/iomgr/tcp_windows.h +10 -25
  377. data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
  378. data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
  379. data/src/core/lib/iomgr/timer.h +18 -27
  380. data/src/core/lib/iomgr/timer_generic.c +91 -87
  381. data/src/core/lib/iomgr/timer_generic.h +10 -25
  382. data/src/core/lib/iomgr/timer_heap.c +10 -25
  383. data/src/core/lib/iomgr/timer_heap.h +10 -25
  384. data/src/core/lib/iomgr/timer_manager.c +178 -100
  385. data/src/core/lib/iomgr/timer_manager.h +10 -25
  386. data/src/core/lib/iomgr/timer_uv.c +23 -33
  387. data/src/core/lib/iomgr/timer_uv.h +10 -25
  388. data/src/core/lib/iomgr/udp_server.c +17 -32
  389. data/src/core/lib/iomgr/udp_server.h +10 -25
  390. data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
  391. data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
  392. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
  393. data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
  394. data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
  395. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
  396. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
  397. data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
  398. data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
  399. data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
  400. data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
  401. data/src/core/lib/json/json.c +10 -25
  402. data/src/core/lib/json/json.h +10 -25
  403. data/src/core/lib/json/json_common.h +10 -25
  404. data/src/core/lib/json/json_reader.c +11 -25
  405. data/src/core/lib/json/json_reader.h +10 -25
  406. data/src/core/lib/json/json_string.c +10 -25
  407. data/src/core/lib/json/json_writer.c +10 -25
  408. data/src/core/lib/json/json_writer.h +10 -25
  409. data/src/core/lib/profiling/basic_timers.c +10 -25
  410. data/src/core/lib/profiling/stap_timers.c +10 -25
  411. data/src/core/lib/profiling/timers.h +10 -25
  412. data/src/core/lib/security/context/security_context.c +32 -40
  413. data/src/core/lib/security/context/security_context.h +15 -26
  414. data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
  415. data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
  416. data/src/core/lib/security/credentials/credentials.c +29 -49
  417. data/src/core/lib/security/credentials/credentials.h +48 -61
  418. data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
  419. data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
  420. data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
  421. data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
  422. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
  423. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
  424. data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
  425. data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
  426. data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
  427. data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
  428. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
  429. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
  430. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
  431. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
  432. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
  433. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
  434. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
  435. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
  436. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
  437. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
  438. data/src/core/lib/security/transport/auth_filters.h +10 -25
  439. data/src/core/lib/security/transport/client_auth_filter.c +217 -112
  440. data/src/core/lib/security/transport/lb_targets_info.c +16 -32
  441. data/src/core/lib/security/transport/lb_targets_info.h +10 -25
  442. data/src/core/lib/security/transport/secure_endpoint.c +29 -43
  443. data/src/core/lib/security/transport/secure_endpoint.h +10 -25
  444. data/src/core/lib/security/transport/security_connector.c +80 -61
  445. data/src/core/lib/security/transport/security_connector.h +35 -35
  446. data/src/core/lib/security/transport/security_handshaker.c +18 -33
  447. data/src/core/lib/security/transport/security_handshaker.h +10 -25
  448. data/src/core/lib/security/transport/server_auth_filter.c +62 -116
  449. data/src/core/lib/security/transport/tsi_error.c +10 -25
  450. data/src/core/lib/security/transport/tsi_error.h +10 -25
  451. data/src/core/lib/security/util/json_util.c +10 -25
  452. data/src/core/lib/security/util/json_util.h +10 -25
  453. data/src/core/lib/slice/b64.c +10 -25
  454. data/src/core/lib/slice/b64.h +10 -25
  455. data/src/core/lib/slice/percent_encoding.c +10 -25
  456. data/src/core/lib/slice/percent_encoding.h +10 -25
  457. data/src/core/lib/slice/slice.c +10 -25
  458. data/src/core/lib/slice/slice_buffer.c +10 -25
  459. data/src/core/lib/slice/slice_hash_table.c +48 -26
  460. data/src/core/lib/slice/slice_hash_table.h +26 -28
  461. data/src/core/lib/slice/slice_intern.c +10 -25
  462. data/src/core/lib/slice/slice_internal.h +10 -25
  463. data/src/core/lib/slice/slice_string_helpers.c +10 -25
  464. data/src/core/lib/slice/slice_string_helpers.h +10 -25
  465. data/src/core/lib/support/alloc.c +10 -25
  466. data/src/core/lib/support/arena.c +12 -27
  467. data/src/core/lib/support/arena.h +10 -25
  468. data/src/core/lib/support/atm.c +17 -32
  469. data/src/core/lib/support/atomic.h +10 -25
  470. data/src/core/lib/support/atomic_with_atm.h +10 -25
  471. data/src/core/lib/support/atomic_with_std.h +10 -25
  472. data/src/core/lib/support/avl.c +101 -101
  473. data/src/core/lib/support/backoff.c +10 -25
  474. data/src/core/lib/support/backoff.h +10 -25
  475. data/src/core/lib/support/block_annotate.h +10 -25
  476. data/src/core/lib/support/cmdline.c +10 -25
  477. data/src/core/lib/support/cpu_iphone.c +10 -25
  478. data/src/core/lib/support/cpu_linux.c +10 -25
  479. data/src/core/lib/support/cpu_posix.c +10 -25
  480. data/src/core/lib/support/cpu_windows.c +10 -25
  481. data/src/core/lib/support/env.h +16 -25
  482. data/src/core/lib/support/env_linux.c +30 -37
  483. data/src/core/lib/support/env_posix.c +15 -25
  484. data/src/core/lib/support/env_windows.c +15 -25
  485. data/src/core/lib/support/histogram.c +10 -25
  486. data/src/core/lib/support/host_port.c +10 -25
  487. data/src/core/lib/support/log.c +20 -29
  488. data/src/core/lib/support/log_android.c +10 -25
  489. data/src/core/lib/support/log_linux.c +13 -26
  490. data/src/core/lib/support/log_posix.c +10 -25
  491. data/src/core/lib/support/log_windows.c +10 -25
  492. data/src/core/lib/support/memory.h +10 -25
  493. data/src/core/lib/support/mpscq.c +11 -49
  494. data/src/core/lib/support/mpscq.h +11 -50
  495. data/src/core/lib/support/murmur_hash.c +12 -25
  496. data/src/core/lib/support/murmur_hash.h +10 -25
  497. data/src/core/lib/support/spinlock.h +10 -25
  498. data/src/core/lib/support/stack_lockfree.c +10 -25
  499. data/src/core/lib/support/stack_lockfree.h +10 -25
  500. data/src/core/lib/support/string.c +10 -25
  501. data/src/core/lib/support/string.h +10 -25
  502. data/src/core/lib/support/string_posix.c +10 -25
  503. data/src/core/lib/support/string_util_windows.c +10 -25
  504. data/src/core/lib/support/string_windows.c +10 -25
  505. data/src/core/lib/support/string_windows.h +10 -25
  506. data/src/core/lib/support/subprocess_posix.c +10 -25
  507. data/src/core/lib/support/subprocess_windows.c +10 -25
  508. data/src/core/lib/support/sync.c +10 -25
  509. data/src/core/lib/support/sync_posix.c +10 -25
  510. data/src/core/lib/support/sync_windows.c +10 -25
  511. data/src/core/lib/support/thd.c +10 -25
  512. data/src/core/lib/support/thd_internal.h +10 -25
  513. data/src/core/lib/support/thd_posix.c +10 -25
  514. data/src/core/lib/support/thd_windows.c +10 -25
  515. data/src/core/lib/support/time.c +10 -25
  516. data/src/core/lib/support/time_posix.c +10 -25
  517. data/src/core/lib/support/time_precise.c +18 -33
  518. data/src/core/lib/support/time_precise.h +10 -25
  519. data/src/core/lib/support/time_windows.c +10 -25
  520. data/src/core/lib/support/tls_pthread.c +10 -25
  521. data/src/core/lib/support/tmpfile.h +10 -25
  522. data/src/core/lib/support/tmpfile_msys.c +10 -25
  523. data/src/core/lib/support/tmpfile_posix.c +10 -25
  524. data/src/core/lib/support/tmpfile_windows.c +10 -25
  525. data/src/core/lib/support/wrap_memcpy.c +10 -25
  526. data/src/core/lib/surface/alarm.c +78 -35
  527. data/src/core/lib/surface/alarm_internal.h +40 -0
  528. data/src/core/lib/surface/api_trace.c +11 -26
  529. data/src/core/lib/surface/api_trace.h +10 -25
  530. data/src/core/lib/surface/byte_buffer.c +10 -25
  531. data/src/core/lib/surface/byte_buffer_reader.c +10 -25
  532. data/src/core/lib/surface/call.c +64 -84
  533. data/src/core/lib/surface/call.h +11 -26
  534. data/src/core/lib/surface/call_details.c +10 -25
  535. data/src/core/lib/surface/call_log_batch.c +10 -25
  536. data/src/core/lib/surface/call_test_only.h +10 -25
  537. data/src/core/lib/surface/channel.c +11 -26
  538. data/src/core/lib/surface/channel.h +11 -26
  539. data/src/core/lib/surface/channel_init.c +10 -25
  540. data/src/core/lib/surface/channel_init.h +10 -25
  541. data/src/core/lib/surface/channel_ping.c +12 -27
  542. data/src/core/lib/surface/channel_stack_type.c +10 -25
  543. data/src/core/lib/surface/channel_stack_type.h +10 -25
  544. data/src/core/lib/surface/completion_queue.c +442 -331
  545. data/src/core/lib/surface/completion_queue.h +16 -33
  546. data/src/core/lib/surface/completion_queue_factory.c +10 -25
  547. data/src/core/lib/surface/completion_queue_factory.h +10 -25
  548. data/src/core/lib/surface/event_string.c +10 -25
  549. data/src/core/lib/surface/event_string.h +10 -25
  550. data/src/core/lib/surface/init.c +38 -47
  551. data/src/core/lib/surface/init.h +10 -25
  552. data/src/core/lib/surface/init_secure.c +20 -27
  553. data/src/core/lib/surface/lame_client.cc +14 -29
  554. data/src/core/lib/surface/lame_client.h +10 -25
  555. data/src/core/lib/surface/metadata_array.c +10 -25
  556. data/src/core/lib/surface/server.c +128 -81
  557. data/src/core/lib/surface/server.h +10 -25
  558. data/src/core/lib/surface/validate_metadata.c +10 -25
  559. data/src/core/lib/surface/validate_metadata.h +10 -25
  560. data/src/core/lib/surface/version.c +11 -26
  561. data/src/core/lib/transport/bdp_estimator.c +19 -29
  562. data/src/core/lib/transport/bdp_estimator.h +16 -29
  563. data/src/core/lib/transport/byte_stream.c +127 -36
  564. data/src/core/lib/transport/byte_stream.h +88 -46
  565. data/src/core/lib/transport/connectivity_state.c +17 -31
  566. data/src/core/lib/transport/connectivity_state.h +10 -25
  567. data/src/core/lib/transport/error_utils.c +10 -25
  568. data/src/core/lib/transport/error_utils.h +10 -25
  569. data/src/core/lib/transport/http2_errors.h +10 -25
  570. data/src/core/lib/transport/metadata.c +87 -85
  571. data/src/core/lib/transport/metadata.h +15 -28
  572. data/src/core/lib/transport/metadata_batch.c +10 -25
  573. data/src/core/lib/transport/metadata_batch.h +10 -25
  574. data/src/core/lib/transport/pid_controller.c +10 -25
  575. data/src/core/lib/transport/pid_controller.h +10 -25
  576. data/src/core/lib/transport/service_config.c +11 -26
  577. data/src/core/lib/transport/service_config.h +10 -25
  578. data/src/core/lib/transport/static_metadata.c +12 -26
  579. data/src/core/lib/transport/static_metadata.h +10 -25
  580. data/src/core/lib/transport/status_conversion.c +10 -25
  581. data/src/core/lib/transport/status_conversion.h +10 -25
  582. data/src/core/lib/transport/timeout_encoding.c +10 -25
  583. data/src/core/lib/transport/timeout_encoding.h +10 -25
  584. data/src/core/lib/transport/transport.c +60 -53
  585. data/src/core/lib/transport/transport.h +36 -34
  586. data/src/core/lib/transport/transport_impl.h +10 -25
  587. data/src/core/lib/transport/transport_op_string.c +10 -28
  588. data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
  589. data/src/core/tsi/fake_transport_security.c +199 -94
  590. data/src/core/tsi/fake_transport_security.h +11 -26
  591. data/src/core/tsi/gts_transport_security.c +40 -0
  592. data/src/core/tsi/gts_transport_security.h +37 -0
  593. data/src/core/tsi/ssl_transport_security.c +13 -32
  594. data/src/core/tsi/ssl_transport_security.h +10 -25
  595. data/src/core/tsi/ssl_types.h +10 -25
  596. data/src/core/tsi/transport_security.c +48 -78
  597. data/src/core/tsi/transport_security.h +18 -27
  598. data/src/core/tsi/transport_security_adapter.c +17 -29
  599. data/src/core/tsi/transport_security_adapter.h +10 -25
  600. data/src/core/tsi/transport_security_grpc.c +64 -0
  601. data/src/core/tsi/transport_security_grpc.h +80 -0
  602. data/src/core/tsi/transport_security_interface.h +21 -27
  603. data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
  604. data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
  605. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
  606. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
  607. data/src/ruby/bin/math_client.rb +10 -25
  608. data/src/ruby/bin/math_server.rb +10 -25
  609. data/src/ruby/bin/math_services_pb.rb +10 -25
  610. data/src/ruby/bin/noproto_client.rb +10 -25
  611. data/src/ruby/bin/noproto_server.rb +10 -25
  612. data/src/ruby/ext/grpc/extconf.rb +10 -25
  613. data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
  614. data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
  615. data/src/ruby/ext/grpc/rb_call.c +44 -25
  616. data/src/ruby/ext/grpc/rb_call.h +10 -25
  617. data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
  618. data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
  619. data/src/ruby/ext/grpc/rb_channel.c +10 -25
  620. data/src/ruby/ext/grpc/rb_channel.h +10 -25
  621. data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
  622. data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
  623. data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
  624. data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
  625. data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
  626. data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
  627. data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
  628. data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
  629. data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
  630. data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
  631. data/src/ruby/ext/grpc/rb_grpc.c +10 -25
  632. data/src/ruby/ext/grpc/rb_grpc.h +10 -25
  633. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
  634. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
  635. data/src/ruby/ext/grpc/rb_loader.c +10 -25
  636. data/src/ruby/ext/grpc/rb_loader.h +10 -25
  637. data/src/ruby/ext/grpc/rb_server.c +10 -25
  638. data/src/ruby/ext/grpc/rb_server.h +10 -25
  639. data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
  640. data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
  641. data/src/ruby/lib/grpc.rb +10 -25
  642. data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
  643. data/src/ruby/lib/grpc/errors.rb +16 -30
  644. data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
  645. data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
  646. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
  647. data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
  648. data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
  649. data/src/ruby/lib/grpc/generic/service.rb +10 -25
  650. data/src/ruby/lib/grpc/grpc.rb +10 -25
  651. data/src/ruby/lib/grpc/logconfig.rb +10 -25
  652. data/src/ruby/lib/grpc/notifier.rb +10 -25
  653. data/src/ruby/lib/grpc/version.rb +11 -26
  654. data/src/ruby/pb/generate_proto_ruby.sh +10 -25
  655. data/src/ruby/pb/grpc/health/checker.rb +10 -25
  656. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
  657. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
  658. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
  659. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
  660. data/src/ruby/pb/test/client.rb +10 -25
  661. data/src/ruby/pb/test/server.rb +10 -25
  662. data/src/ruby/spec/call_credentials_spec.rb +10 -25
  663. data/src/ruby/spec/call_spec.rb +43 -25
  664. data/src/ruby/spec/channel_connection_spec.rb +10 -25
  665. data/src/ruby/spec/channel_credentials_spec.rb +11 -26
  666. data/src/ruby/spec/channel_spec.rb +10 -25
  667. data/src/ruby/spec/client_auth_spec.rb +10 -25
  668. data/src/ruby/spec/client_server_spec.rb +66 -25
  669. data/src/ruby/spec/compression_options_spec.rb +10 -25
  670. data/src/ruby/spec/error_sanity_spec.rb +10 -25
  671. data/src/ruby/spec/generic/active_call_spec.rb +10 -25
  672. data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
  673. data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
  674. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
  675. data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
  676. data/src/ruby/spec/generic/service_spec.rb +10 -25
  677. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
  678. data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
  679. data/src/ruby/spec/server_credentials_spec.rb +10 -25
  680. data/src/ruby/spec/server_spec.rb +10 -25
  681. data/src/ruby/spec/spec_helper.rb +10 -25
  682. data/src/ruby/spec/time_consts_spec.rb +10 -25
  683. data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
  684. data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
  685. data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
  686. data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
  687. data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
  688. data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
  689. data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
  690. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
  691. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
  692. data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
  693. data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
  694. data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
  695. data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
  696. data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
  697. data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
  698. data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
  699. data/third_party/boringssl/crypto/base64/base64.c +7 -5
  700. data/third_party/boringssl/crypto/bio/bio.c +24 -10
  701. data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
  702. data/third_party/boringssl/crypto/bio/connect.c +7 -18
  703. data/third_party/boringssl/crypto/bio/fd.c +3 -6
  704. data/third_party/boringssl/crypto/bio/file.c +6 -6
  705. data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
  706. data/third_party/boringssl/crypto/bio/pair.c +30 -344
  707. data/third_party/boringssl/crypto/bio/socket.c +6 -7
  708. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
  709. data/third_party/boringssl/crypto/bn/add.c +1 -1
  710. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
  711. data/third_party/boringssl/crypto/bn/bn.c +6 -20
  712. data/third_party/boringssl/crypto/bn/cmp.c +14 -0
  713. data/third_party/boringssl/crypto/bn/convert.c +73 -2
  714. data/third_party/boringssl/crypto/bn/ctx.c +3 -1
  715. data/third_party/boringssl/crypto/bn/div.c +108 -51
  716. data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
  717. data/third_party/boringssl/crypto/bn/gcd.c +29 -22
  718. data/third_party/boringssl/crypto/bn/generic.c +71 -67
  719. data/third_party/boringssl/crypto/bn/internal.h +19 -6
  720. data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
  721. data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
  722. data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
  723. data/third_party/boringssl/crypto/bn/mul.c +11 -9
  724. data/third_party/boringssl/crypto/bn/random.c +6 -3
  725. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
  726. data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
  727. data/third_party/boringssl/crypto/bn/shift.c +9 -1
  728. data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
  729. data/third_party/boringssl/crypto/buf/buf.c +6 -4
  730. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
  731. data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
  732. data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
  733. data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
  734. data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
  735. data/third_party/boringssl/crypto/cipher/aead.c +3 -3
  736. data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
  737. data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
  738. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
  739. data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
  740. data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
  741. data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
  742. data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
  743. data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
  744. data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
  745. data/third_party/boringssl/crypto/conf/conf.c +6 -3
  746. data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
  747. data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
  748. data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
  749. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
  750. data/third_party/boringssl/crypto/des/des.c +1 -1
  751. data/third_party/boringssl/crypto/des/internal.h +58 -46
  752. data/third_party/boringssl/crypto/dh/dh.c +4 -8
  753. data/third_party/boringssl/crypto/digest/digest.c +5 -2
  754. data/third_party/boringssl/crypto/digest/digests.c +70 -33
  755. data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
  756. data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
  757. data/third_party/boringssl/crypto/ec/ec.c +1 -1
  758. data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
  759. data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
  760. data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
  761. data/third_party/boringssl/crypto/ec/oct.c +2 -14
  762. data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
  763. data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
  764. data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
  765. data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
  766. data/third_party/boringssl/crypto/ec/simple.c +2 -1
  767. data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
  768. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
  769. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
  770. data/third_party/boringssl/crypto/engine/engine.c +3 -1
  771. data/third_party/boringssl/crypto/err/err.c +5 -5
  772. data/third_party/boringssl/crypto/evp/evp.c +1 -1
  773. data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
  774. data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
  775. data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
  776. data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
  777. data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
  778. data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
  779. data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
  780. data/third_party/boringssl/crypto/internal.h +81 -0
  781. data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
  782. data/third_party/boringssl/crypto/md4/md4.c +20 -18
  783. data/third_party/boringssl/crypto/md5/md5.c +31 -21
  784. data/third_party/boringssl/crypto/mem.c +4 -10
  785. data/third_party/boringssl/crypto/modes/cbc.c +2 -6
  786. data/third_party/boringssl/crypto/modes/cfb.c +2 -2
  787. data/third_party/boringssl/crypto/modes/ctr.c +1 -1
  788. data/third_party/boringssl/crypto/modes/gcm.c +117 -334
  789. data/third_party/boringssl/crypto/modes/internal.h +107 -84
  790. data/third_party/boringssl/crypto/modes/ofb.c +3 -3
  791. data/third_party/boringssl/crypto/modes/polyval.c +94 -0
  792. data/third_party/boringssl/crypto/obj/obj.c +13 -8
  793. data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
  794. data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
  795. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
  796. data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
  797. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
  798. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
  799. data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
  800. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
  801. data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
  802. data/third_party/boringssl/crypto/pool/pool.c +200 -0
  803. data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
  804. data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
  805. data/third_party/boringssl/crypto/rand/rand.c +7 -7
  806. data/third_party/boringssl/crypto/rand/urandom.c +136 -22
  807. data/third_party/boringssl/crypto/rand/windows.c +2 -2
  808. data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
  809. data/third_party/boringssl/crypto/rsa/padding.c +11 -11
  810. data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
  811. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
  812. data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
  813. data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
  814. data/third_party/boringssl/crypto/sha/sha1.c +60 -42
  815. data/third_party/boringssl/crypto/sha/sha256.c +4 -2
  816. data/third_party/boringssl/crypto/sha/sha512.c +9 -7
  817. data/third_party/boringssl/crypto/stack/stack.c +10 -7
  818. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  819. data/third_party/boringssl/crypto/thread_win.c +2 -2
  820. data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
  821. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
  822. data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
  823. data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
  824. data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
  825. data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
  826. data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
  827. data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
  828. data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
  829. data/third_party/boringssl/crypto/x509/x509name.c +4 -1
  830. data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
  831. data/third_party/boringssl/crypto/x509/x_name.c +23 -13
  832. data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
  833. data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
  834. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  835. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  836. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
  837. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
  838. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
  839. data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
  840. data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
  841. data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
  842. data/third_party/boringssl/include/openssl/aead.h +9 -20
  843. data/third_party/boringssl/include/openssl/aes.h +21 -9
  844. data/third_party/boringssl/include/openssl/asn1.h +9 -1
  845. data/third_party/boringssl/include/openssl/base.h +33 -6
  846. data/third_party/boringssl/include/openssl/bio.h +10 -103
  847. data/third_party/boringssl/include/openssl/bn.h +58 -42
  848. data/third_party/boringssl/include/openssl/bytestring.h +17 -0
  849. data/third_party/boringssl/include/openssl/cipher.h +4 -3
  850. data/third_party/boringssl/include/openssl/conf.h +4 -1
  851. data/third_party/boringssl/include/openssl/curve25519.h +13 -0
  852. data/third_party/boringssl/include/openssl/digest.h +5 -3
  853. data/third_party/boringssl/include/openssl/dsa.h +5 -5
  854. data/third_party/boringssl/include/openssl/ec.h +2 -2
  855. data/third_party/boringssl/include/openssl/ecdh.h +3 -4
  856. data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
  857. data/third_party/boringssl/include/openssl/err.h +5 -5
  858. data/third_party/boringssl/include/openssl/evp.h +11 -7
  859. data/third_party/boringssl/include/openssl/lhash.h +2 -3
  860. data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
  861. data/third_party/boringssl/include/openssl/nid.h +2949 -2916
  862. data/third_party/boringssl/include/openssl/obj.h +1 -1
  863. data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
  864. data/third_party/boringssl/include/openssl/pool.h +87 -0
  865. data/third_party/boringssl/include/openssl/rand.h +1 -1
  866. data/third_party/boringssl/include/openssl/rsa.h +4 -2
  867. data/third_party/boringssl/include/openssl/sha.h +0 -4
  868. data/third_party/boringssl/include/openssl/ssl.h +327 -662
  869. data/third_party/boringssl/include/openssl/ssl3.h +1 -21
  870. data/third_party/boringssl/include/openssl/stack.h +1 -0
  871. data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
  872. data/third_party/boringssl/include/openssl/tls1.h +23 -52
  873. data/third_party/boringssl/include/openssl/type_check.h +4 -0
  874. data/third_party/boringssl/include/openssl/x509.h +10 -59
  875. data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
  876. data/third_party/boringssl/include/openssl/x509v3.h +4 -4
  877. data/third_party/boringssl/ssl/bio_ssl.c +175 -0
  878. data/third_party/boringssl/ssl/custom_extensions.c +24 -21
  879. data/third_party/boringssl/ssl/d1_both.c +259 -289
  880. data/third_party/boringssl/ssl/d1_lib.c +8 -20
  881. data/third_party/boringssl/ssl/d1_pkt.c +6 -15
  882. data/third_party/boringssl/ssl/dtls_method.c +22 -8
  883. data/third_party/boringssl/ssl/dtls_record.c +27 -2
  884. data/third_party/boringssl/ssl/handshake_client.c +460 -579
  885. data/third_party/boringssl/ssl/handshake_server.c +662 -644
  886. data/third_party/boringssl/ssl/internal.h +1009 -375
  887. data/third_party/boringssl/ssl/s3_both.c +312 -162
  888. data/third_party/boringssl/ssl/s3_lib.c +12 -128
  889. data/third_party/boringssl/ssl/s3_pkt.c +22 -30
  890. data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
  891. data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
  892. data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
  893. data/third_party/boringssl/ssl/ssl_cert.c +417 -219
  894. data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
  895. data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
  896. data/third_party/boringssl/ssl/ssl_file.c +0 -11
  897. data/third_party/boringssl/ssl/ssl_lib.c +325 -652
  898. data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
  899. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
  900. data/third_party/boringssl/ssl/ssl_session.c +206 -95
  901. data/third_party/boringssl/ssl/ssl_stat.c +18 -84
  902. data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
  903. data/third_party/boringssl/ssl/ssl_x509.c +815 -0
  904. data/third_party/boringssl/ssl/t1_enc.c +188 -174
  905. data/third_party/boringssl/ssl/t1_lib.c +1064 -764
  906. data/third_party/boringssl/ssl/tls13_both.c +290 -96
  907. data/third_party/boringssl/ssl/tls13_client.c +344 -314
  908. data/third_party/boringssl/ssl/tls13_enc.c +239 -200
  909. data/third_party/boringssl/ssl/tls13_server.c +374 -366
  910. data/third_party/boringssl/ssl/tls_method.c +40 -5
  911. data/third_party/boringssl/ssl/tls_record.c +166 -71
  912. metadata +39 -25
  913. data/src/core/lib/iomgr/workqueue.h +0 -87
  914. data/src/core/lib/iomgr/workqueue_uv.c +0 -65
  915. data/src/core/lib/iomgr/workqueue_uv.h +0 -37
  916. data/src/core/lib/iomgr/workqueue_windows.c +0 -63
  917. data/src/core/lib/iomgr/workqueue_windows.h +0 -37
  918. data/third_party/boringssl/crypto/bio/buffer.c +0 -496
  919. data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
  920. data/third_party/boringssl/crypto/newhope/internal.h +0 -71
  921. data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
  922. data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
  923. data/third_party/boringssl/crypto/newhope/poly.c +0 -183
  924. data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
  925. data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
  926. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
  927. data/third_party/boringssl/include/openssl/newhope.h +0 -158
  928. data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -17,6 +17,7 @@
17
17
  #include <assert.h>
18
18
  #include <string.h>
19
19
 
20
+ #include <openssl/aead.h>
20
21
  #include <openssl/bytestring.h>
21
22
  #include <openssl/digest.h>
22
23
  #include <openssl/err.h>
@@ -24,72 +25,52 @@
24
25
  #include <openssl/rand.h>
25
26
  #include <openssl/stack.h>
26
27
 
28
+ #include "../crypto/internal.h"
27
29
  #include "internal.h"
28
30
 
29
31
 
32
+ /* kMaxEarlyDataAccepted is the advertised number of plaintext bytes of early
33
+ * data that will be accepted. This value should be slightly below
34
+ * kMaxEarlyDataSkipped in tls_record.c, which is measured in ciphertext. */
35
+ static const size_t kMaxEarlyDataAccepted = 14336;
36
+
30
37
  enum server_hs_state_t {
31
- state_process_client_hello = 0,
32
- state_select_parameters,
38
+ state_select_parameters = 0,
33
39
  state_send_hello_retry_request,
34
- state_flush_hello_retry_request,
35
40
  state_process_second_client_hello,
36
41
  state_send_server_hello,
37
- state_send_encrypted_extensions,
38
- state_send_certificate_request,
39
- state_send_server_certificate,
40
42
  state_send_server_certificate_verify,
41
43
  state_complete_server_certificate_verify,
42
44
  state_send_server_finished,
43
- state_flush,
44
45
  state_process_client_certificate,
45
46
  state_process_client_certificate_verify,
47
+ state_process_channel_id,
46
48
  state_process_client_finished,
47
49
  state_send_new_session_ticket,
48
- state_flush_new_session_ticket,
49
50
  state_done,
50
51
  };
51
52
 
52
53
  static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0};
53
54
 
54
- static int resolve_psk_secret(SSL *ssl) {
55
- SSL_HANDSHAKE *hs = ssl->s3->hs;
56
-
57
- if (ssl->s3->tmp.new_cipher->algorithm_auth != SSL_aPSK) {
58
- return tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len);
59
- }
60
-
61
- uint8_t resumption_psk[EVP_MAX_MD_SIZE];
62
- if (!tls13_resumption_psk(ssl, resumption_psk, hs->hash_len,
63
- ssl->s3->new_session) ||
64
- !tls13_advance_key_schedule(ssl, resumption_psk, hs->hash_len)) {
65
- return 0;
66
- }
67
-
68
- return 1;
69
- }
70
-
71
- static int resolve_ecdhe_secret(SSL *ssl, int *out_need_retry,
72
- struct ssl_early_callback_ctx *early_ctx) {
55
+ static int resolve_ecdhe_secret(SSL_HANDSHAKE *hs, int *out_need_retry,
56
+ SSL_CLIENT_HELLO *client_hello) {
57
+ SSL *const ssl = hs->ssl;
73
58
  *out_need_retry = 0;
74
- SSL_HANDSHAKE *hs = ssl->s3->hs;
75
-
76
- if (ssl->s3->tmp.new_cipher->algorithm_mkey != SSL_kECDHE) {
77
- return tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len);
78
- }
79
59
 
60
+ /* We only support connections that include an ECDHE key exchange. */
80
61
  CBS key_share;
81
- if (!ssl_early_callback_get_extension(early_ctx, &key_share,
82
- TLSEXT_TYPE_key_share)) {
62
+ if (!ssl_client_hello_get_extension(client_hello, &key_share,
63
+ TLSEXT_TYPE_key_share)) {
83
64
  OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
84
65
  ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
85
- return ssl_hs_error;
66
+ return 0;
86
67
  }
87
68
 
88
69
  int found_key_share;
89
70
  uint8_t *dhe_secret;
90
71
  size_t dhe_secret_len;
91
72
  uint8_t alert = SSL_AD_DECODE_ERROR;
92
- if (!ssl_ext_key_share_parse_clienthello(ssl, &found_key_share, &dhe_secret,
73
+ if (!ssl_ext_key_share_parse_clienthello(hs, &found_key_share, &dhe_secret,
93
74
  &dhe_secret_len, &alert,
94
75
  &key_share)) {
95
76
  ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
@@ -101,71 +82,157 @@ static int resolve_ecdhe_secret(SSL *ssl, int *out_need_retry,
101
82
  return 0;
102
83
  }
103
84
 
104
- int ok = tls13_advance_key_schedule(ssl, dhe_secret, dhe_secret_len);
85
+ int ok = tls13_advance_key_schedule(hs, dhe_secret, dhe_secret_len);
105
86
  OPENSSL_free(dhe_secret);
106
87
  return ok;
107
88
  }
108
89
 
109
- static enum ssl_hs_wait_t do_process_client_hello(SSL *ssl, SSL_HANDSHAKE *hs) {
110
- if (!tls13_check_message_type(ssl, SSL3_MT_CLIENT_HELLO)) {
90
+ static const SSL_CIPHER *choose_tls13_cipher(
91
+ const SSL *ssl, const SSL_CLIENT_HELLO *client_hello) {
92
+ if (client_hello->cipher_suites_len % 2 != 0) {
93
+ return NULL;
94
+ }
95
+
96
+ CBS cipher_suites;
97
+ CBS_init(&cipher_suites, client_hello->cipher_suites,
98
+ client_hello->cipher_suites_len);
99
+
100
+ const int aes_is_fine = EVP_has_aes_hardware();
101
+ const uint16_t version = ssl3_protocol_version(ssl);
102
+
103
+ const SSL_CIPHER *best = NULL;
104
+ while (CBS_len(&cipher_suites) > 0) {
105
+ uint16_t cipher_suite;
106
+ if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
107
+ return NULL;
108
+ }
109
+
110
+ /* Limit to TLS 1.3 ciphers we know about. */
111
+ const SSL_CIPHER *candidate = SSL_get_cipher_by_value(cipher_suite);
112
+ if (candidate == NULL ||
113
+ SSL_CIPHER_get_min_version(candidate) > version ||
114
+ SSL_CIPHER_get_max_version(candidate) < version) {
115
+ continue;
116
+ }
117
+
118
+ /* TLS 1.3 removes legacy ciphers, so honor the client order, but prefer
119
+ * ChaCha20 if we do not have AES hardware. */
120
+ if (aes_is_fine) {
121
+ return candidate;
122
+ }
123
+
124
+ if (candidate->algorithm_enc == SSL_CHACHA20POLY1305) {
125
+ return candidate;
126
+ }
127
+
128
+ if (best == NULL) {
129
+ best = candidate;
130
+ }
131
+ }
132
+
133
+ return best;
134
+ }
135
+
136
+ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
137
+ SSL *const ssl = hs->ssl;
138
+ /* The short record header extension is incompatible with early data. */
139
+ if (ssl->s3->skip_early_data && ssl->s3->short_header) {
140
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
111
141
  return ssl_hs_error;
112
142
  }
113
143
 
114
- struct ssl_early_callback_ctx client_hello;
115
- if (!ssl_early_callback_init(ssl, &client_hello, ssl->init_msg,
116
- ssl->init_num)) {
144
+ SSL_CLIENT_HELLO client_hello;
145
+ if (!ssl_client_hello_init(ssl, &client_hello, ssl->init_msg,
146
+ ssl->init_num)) {
117
147
  OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
118
148
  ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
119
149
  return ssl_hs_error;
120
150
  }
121
151
 
122
- assert(ssl->s3->have_version);
152
+ /* Negotiate the cipher suite. */
153
+ hs->new_cipher = choose_tls13_cipher(ssl, &client_hello);
154
+ if (hs->new_cipher == NULL) {
155
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
156
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
157
+ return ssl_hs_error;
158
+ }
123
159
 
124
- /* Load the client random. */
125
- if (client_hello.random_len != SSL3_RANDOM_SIZE) {
126
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
127
- return -1;
160
+ /* The PRF hash is now known. Set up the key schedule and hash the
161
+ * ClientHello. */
162
+ if (!tls13_init_key_schedule(hs) ||
163
+ !ssl_hash_current_message(hs)) {
164
+ return ssl_hs_error;
128
165
  }
129
- memcpy(ssl->s3->client_random, client_hello.random, client_hello.random_len);
130
166
 
167
+
168
+ /* Decode the ticket if we agree on a PSK key exchange mode. */
131
169
  uint8_t alert = SSL_AD_DECODE_ERROR;
132
170
  SSL_SESSION *session = NULL;
133
- CBS pre_shared_key;
134
- if (ssl_early_callback_get_extension(&client_hello, &pre_shared_key,
135
- TLSEXT_TYPE_pre_shared_key) &&
136
- !ssl_ext_pre_shared_key_parse_clienthello(ssl, &session, &alert,
137
- &pre_shared_key)) {
138
- ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
139
- return 0;
171
+ CBS pre_shared_key, binders;
172
+ if (hs->accept_psk_mode &&
173
+ ssl_client_hello_get_extension(&client_hello, &pre_shared_key,
174
+ TLSEXT_TYPE_pre_shared_key)) {
175
+ /* Verify that the pre_shared_key extension is the last extension in
176
+ * ClientHello. */
177
+ if (CBS_data(&pre_shared_key) + CBS_len(&pre_shared_key) !=
178
+ client_hello.extensions + client_hello.extensions_len) {
179
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PRE_SHARED_KEY_MUST_BE_LAST);
180
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
181
+ return ssl_hs_error;
182
+ }
183
+
184
+ if (!ssl_ext_pre_shared_key_parse_clienthello(hs, &session, &binders,
185
+ &alert, &pre_shared_key)) {
186
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
187
+ return ssl_hs_error;
188
+ }
140
189
  }
141
190
 
142
- uint16_t resumption_cipher;
143
191
  if (session != NULL &&
144
- /* We currently only support ECDHE-PSK resumption. */
145
- ((session->ticket_flags & SSL_TICKET_ALLOW_DHE_RESUMPTION) == 0 ||
146
- /* Only resume if the session's version matches. */
147
- session->ssl_version != ssl->version ||
148
- !ssl_cipher_get_ecdhe_psk_cipher(session->cipher, &resumption_cipher) ||
149
- !ssl_client_cipher_list_contains_cipher(&client_hello,
150
- resumption_cipher))) {
192
+ !ssl_session_is_resumable(hs, session)) {
151
193
  SSL_SESSION_free(session);
152
194
  session = NULL;
153
195
  }
154
196
 
197
+ /* Set up the new session, either using the original one as a template or
198
+ * creating a fresh one. */
155
199
  if (session == NULL) {
156
- if (!ssl_get_new_session(ssl, 1 /* server */)) {
200
+ if (!ssl_get_new_session(hs, 1 /* server */)) {
157
201
  ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
158
202
  return ssl_hs_error;
159
203
  }
204
+
205
+ hs->new_session->cipher = hs->new_cipher;
206
+
207
+ /* On new sessions, stash the SNI value in the session. */
208
+ if (hs->hostname != NULL) {
209
+ OPENSSL_free(hs->new_session->tlsext_hostname);
210
+ hs->new_session->tlsext_hostname = BUF_strdup(hs->hostname);
211
+ if (hs->new_session->tlsext_hostname == NULL) {
212
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
213
+ return ssl_hs_error;
214
+ }
215
+ }
160
216
  } else {
217
+ /* Check the PSK binder. */
218
+ if (!tls13_verify_psk_binder(hs, session, &binders)) {
219
+ SSL_SESSION_free(session);
220
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
221
+ return ssl_hs_error;
222
+ }
223
+
161
224
  /* Only authentication information carries over in TLS 1.3. */
162
- ssl->s3->new_session = SSL_SESSION_dup(session, SSL_SESSION_DUP_AUTH_ONLY);
163
- if (ssl->s3->new_session == NULL) {
225
+ hs->new_session = SSL_SESSION_dup(session, SSL_SESSION_DUP_AUTH_ONLY);
226
+ if (hs->new_session == NULL) {
164
227
  ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
165
228
  return ssl_hs_error;
166
229
  }
167
230
  ssl->s3->session_reused = 1;
168
231
  SSL_SESSION_free(session);
232
+
233
+ /* Resumption incorporates fresh key material, so refresh the timeout. */
234
+ ssl_session_renew_timeout(ssl, hs->new_session,
235
+ ssl->initial_ctx->session_psk_dhe_timeout);
169
236
  }
170
237
 
171
238
  if (ssl->ctx->dos_protection_cb != NULL &&
@@ -176,151 +243,88 @@ static enum ssl_hs_wait_t do_process_client_hello(SSL *ssl, SSL_HANDSHAKE *hs) {
176
243
  return ssl_hs_error;
177
244
  }
178
245
 
179
- /* TLS 1.3 requires the peer only advertise the null compression. */
180
- if (client_hello.compression_methods_len != 1 ||
181
- client_hello.compression_methods[0] != 0) {
182
- OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_COMPRESSION_LIST);
183
- ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
184
- return ssl_hs_error;
185
- }
186
-
187
- /* TLS extensions. */
188
- if (!ssl_parse_clienthello_tlsext(ssl, &client_hello)) {
189
- OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
190
- return ssl_hs_error;
191
- }
192
-
193
- hs->state = state_select_parameters;
194
- return ssl_hs_ok;
195
- }
196
-
197
- static enum ssl_hs_wait_t do_select_parameters(SSL *ssl, SSL_HANDSHAKE *hs) {
198
- if (!ssl->s3->session_reused) {
199
- /* Call |cert_cb| to update server certificates if required. */
200
- if (ssl->cert->cert_cb != NULL) {
201
- int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg);
202
- if (rv == 0) {
203
- OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR);
204
- ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
205
- return ssl_hs_error;
206
- }
207
- if (rv < 0) {
208
- hs->state = state_select_parameters;
209
- return ssl_hs_x509_lookup;
210
- }
211
- }
212
- }
213
-
214
- struct ssl_early_callback_ctx client_hello;
215
- if (!ssl_early_callback_init(ssl, &client_hello, ssl->init_msg,
216
- ssl->init_num)) {
217
- OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
218
- ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
246
+ /* HTTP/2 negotiation depends on the cipher suite, so ALPN negotiation was
247
+ * deferred. Complete it now. */
248
+ alert = SSL_AD_DECODE_ERROR;
249
+ if (!ssl_negotiate_alpn(hs, &alert, &client_hello)) {
250
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
219
251
  return ssl_hs_error;
220
252
  }
221
253
 
222
- if (!ssl->s3->session_reused) {
223
- const SSL_CIPHER *cipher =
224
- ssl3_choose_cipher(ssl, &client_hello, ssl_get_cipher_preferences(ssl));
225
- if (cipher == NULL) {
226
- OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
227
- ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
228
- return ssl_hs_error;
229
- }
230
-
231
- ssl->s3->new_session->cipher = cipher;
232
- ssl->s3->tmp.new_cipher = cipher;
233
- } else {
234
- uint16_t resumption_cipher;
235
- if (!ssl_cipher_get_ecdhe_psk_cipher(ssl->s3->new_session->cipher,
236
- &resumption_cipher)) {
237
- OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
238
- ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
254
+ /* Store the initial negotiated ALPN in the session. */
255
+ if (ssl->s3->alpn_selected != NULL) {
256
+ hs->new_session->early_alpn =
257
+ BUF_memdup(ssl->s3->alpn_selected, ssl->s3->alpn_selected_len);
258
+ if (hs->new_session->early_alpn == NULL) {
259
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
239
260
  return ssl_hs_error;
240
261
  }
241
- ssl->s3->tmp.new_cipher = SSL_get_cipher_by_value(resumption_cipher);
262
+ hs->new_session->early_alpn_len = ssl->s3->alpn_selected_len;
242
263
  }
243
264
 
244
- ssl->method->received_flight(ssl);
245
-
246
- /* The PRF hash is now known. Set up the key schedule and hash the
247
- * ClientHello. */
248
- size_t resumption_ctx_len =
249
- EVP_MD_size(ssl_get_handshake_digest(ssl_get_algorithm_prf(ssl)));
265
+ /* Incorporate the PSK into the running secret. */
250
266
  if (ssl->s3->session_reused) {
251
- uint8_t resumption_ctx[EVP_MAX_MD_SIZE];
252
- if (!tls13_resumption_context(ssl, resumption_ctx, resumption_ctx_len,
253
- ssl->s3->new_session) ||
254
- !tls13_init_key_schedule(ssl, resumption_ctx, resumption_ctx_len)) {
267
+ if (!tls13_advance_key_schedule(hs, hs->new_session->master_key,
268
+ hs->new_session->master_key_length)) {
255
269
  return ssl_hs_error;
256
270
  }
257
- } else {
258
- if (!tls13_init_key_schedule(ssl, kZeroes, resumption_ctx_len)) {
259
- return ssl_hs_error;
260
- }
261
- }
262
-
263
- /* Resolve PSK and incorporate it into the secret. */
264
- if (!resolve_psk_secret(ssl)) {
271
+ } else if (!tls13_advance_key_schedule(hs, kZeroes, hs->hash_len)) {
265
272
  return ssl_hs_error;
266
273
  }
267
274
 
275
+ ssl->method->received_flight(ssl);
276
+
268
277
  /* Resolve ECDHE and incorporate it into the secret. */
269
278
  int need_retry;
270
- if (!resolve_ecdhe_secret(ssl, &need_retry, &client_hello)) {
279
+ if (!resolve_ecdhe_secret(hs, &need_retry, &client_hello)) {
271
280
  if (need_retry) {
272
- hs->state = state_send_hello_retry_request;
281
+ hs->tls13_state = state_send_hello_retry_request;
273
282
  return ssl_hs_ok;
274
283
  }
275
284
  return ssl_hs_error;
276
285
  }
277
286
 
278
- hs->state = state_send_server_hello;
287
+ hs->tls13_state = state_send_server_hello;
279
288
  return ssl_hs_ok;
280
289
  }
281
290
 
282
- static enum ssl_hs_wait_t do_send_hello_retry_request(SSL *ssl,
283
- SSL_HANDSHAKE *hs) {
291
+ static enum ssl_hs_wait_t do_send_hello_retry_request(SSL_HANDSHAKE *hs) {
292
+ SSL *const ssl = hs->ssl;
284
293
  CBB cbb, body, extensions;
285
294
  uint16_t group_id;
286
295
  if (!ssl->method->init_message(ssl, &cbb, &body,
287
296
  SSL3_MT_HELLO_RETRY_REQUEST) ||
288
297
  !CBB_add_u16(&body, ssl->version) ||
289
- !CBB_add_u16(&body, ssl_cipher_get_value(ssl->s3->tmp.new_cipher)) ||
290
- !tls1_get_shared_group(ssl, &group_id) ||
291
- !CBB_add_u16(&body, group_id) ||
298
+ !tls1_get_shared_group(hs, &group_id) ||
292
299
  !CBB_add_u16_length_prefixed(&body, &extensions) ||
293
- !ssl->method->finish_message(ssl, &cbb)) {
300
+ !CBB_add_u16(&extensions, TLSEXT_TYPE_key_share) ||
301
+ !CBB_add_u16(&extensions, 2 /* length */) ||
302
+ !CBB_add_u16(&extensions, group_id) ||
303
+ !ssl_add_message_cbb(ssl, &cbb)) {
294
304
  CBB_cleanup(&cbb);
295
305
  return ssl_hs_error;
296
306
  }
297
307
 
298
- hs->state = state_flush_hello_retry_request;
299
- return ssl_hs_write_message;
300
- }
301
-
302
- static enum ssl_hs_wait_t do_flush_hello_retry_request(SSL *ssl,
303
- SSL_HANDSHAKE *hs) {
304
- hs->state = state_process_second_client_hello;
308
+ hs->tls13_state = state_process_second_client_hello;
305
309
  return ssl_hs_flush_and_read_message;
306
310
  }
307
311
 
308
- static enum ssl_hs_wait_t do_process_second_client_hello(SSL *ssl,
309
- SSL_HANDSHAKE *hs) {
310
- if (!tls13_check_message_type(ssl, SSL3_MT_CLIENT_HELLO)) {
312
+ static enum ssl_hs_wait_t do_process_second_client_hello(SSL_HANDSHAKE *hs) {
313
+ SSL *const ssl = hs->ssl;
314
+ if (!ssl_check_message_type(ssl, SSL3_MT_CLIENT_HELLO)) {
311
315
  return ssl_hs_error;
312
316
  }
313
317
 
314
- struct ssl_early_callback_ctx client_hello;
315
- if (!ssl_early_callback_init(ssl, &client_hello, ssl->init_msg,
316
- ssl->init_num)) {
318
+ SSL_CLIENT_HELLO client_hello;
319
+ if (!ssl_client_hello_init(ssl, &client_hello, ssl->init_msg,
320
+ ssl->init_num)) {
317
321
  OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
318
322
  ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
319
323
  return ssl_hs_error;
320
324
  }
321
325
 
322
326
  int need_retry;
323
- if (!resolve_ecdhe_secret(ssl, &need_retry, &client_hello)) {
327
+ if (!resolve_ecdhe_secret(hs, &need_retry, &client_hello)) {
324
328
  if (need_retry) {
325
329
  /* Only send one HelloRetryRequest. */
326
330
  ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
@@ -329,131 +333,126 @@ static enum ssl_hs_wait_t do_process_second_client_hello(SSL *ssl,
329
333
  return ssl_hs_error;
330
334
  }
331
335
 
332
- if (!ssl->method->hash_current_message(ssl)) {
336
+ if (!ssl_hash_current_message(hs)) {
333
337
  return ssl_hs_error;
334
338
  }
335
339
 
336
340
  ssl->method->received_flight(ssl);
337
- hs->state = state_send_server_hello;
341
+ hs->tls13_state = state_send_server_hello;
338
342
  return ssl_hs_ok;
339
343
  }
340
344
 
341
- static enum ssl_hs_wait_t do_send_server_hello(SSL *ssl, SSL_HANDSHAKE *hs) {
345
+ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
346
+ SSL *const ssl = hs->ssl;
347
+
348
+ /* Send a ServerHello. */
342
349
  CBB cbb, body, extensions;
343
350
  if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_SERVER_HELLO) ||
344
351
  !CBB_add_u16(&body, ssl->version) ||
345
352
  !RAND_bytes(ssl->s3->server_random, sizeof(ssl->s3->server_random)) ||
346
353
  !CBB_add_bytes(&body, ssl->s3->server_random, SSL3_RANDOM_SIZE) ||
347
- !CBB_add_u16(&body, ssl_cipher_get_value(ssl->s3->tmp.new_cipher)) ||
354
+ !CBB_add_u16(&body, ssl_cipher_get_value(hs->new_cipher)) ||
348
355
  !CBB_add_u16_length_prefixed(&body, &extensions) ||
349
- !ssl_ext_pre_shared_key_add_serverhello(ssl, &extensions) ||
350
- !ssl_ext_key_share_add_serverhello(ssl, &extensions) ||
351
- !ssl->method->finish_message(ssl, &cbb)) {
352
- CBB_cleanup(&cbb);
353
- return ssl_hs_error;
354
- }
355
-
356
- hs->state = state_send_encrypted_extensions;
357
- return ssl_hs_write_message;
358
- }
359
-
360
- static enum ssl_hs_wait_t do_send_encrypted_extensions(SSL *ssl,
361
- SSL_HANDSHAKE *hs) {
362
- if (!tls13_set_handshake_traffic(ssl)) {
363
- return ssl_hs_error;
356
+ !ssl_ext_pre_shared_key_add_serverhello(hs, &extensions) ||
357
+ !ssl_ext_key_share_add_serverhello(hs, &extensions)) {
358
+ goto err;
364
359
  }
365
360
 
366
- CBB cbb, body;
367
- if (!ssl->method->init_message(ssl, &cbb, &body,
368
- SSL3_MT_ENCRYPTED_EXTENSIONS) ||
369
- !ssl_add_serverhello_tlsext(ssl, &body) ||
370
- !ssl->method->finish_message(ssl, &cbb)) {
371
- CBB_cleanup(&cbb);
372
- return ssl_hs_error;
361
+ if (ssl->s3->short_header) {
362
+ if (!CBB_add_u16(&extensions, TLSEXT_TYPE_short_header) ||
363
+ !CBB_add_u16(&extensions, 0 /* empty extension */)) {
364
+ goto err;
365
+ }
373
366
  }
374
367
 
375
- hs->state = state_send_certificate_request;
376
- return ssl_hs_write_message;
377
- }
378
-
379
- static enum ssl_hs_wait_t do_send_certificate_request(SSL *ssl,
380
- SSL_HANDSHAKE *hs) {
381
- /* Determine whether to request a client certificate. */
382
- ssl->s3->tmp.cert_request = !!(ssl->verify_mode & SSL_VERIFY_PEER);
383
- /* CertificateRequest may only be sent in certificate-based ciphers. */
384
- if (!ssl_cipher_uses_certificate_auth(ssl->s3->tmp.new_cipher)) {
385
- ssl->s3->tmp.cert_request = 0;
368
+ if (!ssl_add_message_cbb(ssl, &cbb)) {
369
+ goto err;
386
370
  }
387
371
 
388
- if (!ssl->s3->tmp.cert_request) {
389
- /* Skip this state. */
390
- hs->state = state_send_server_certificate;
391
- return ssl_hs_ok;
372
+ /* Derive and enable the handshake traffic secrets. */
373
+ if (!tls13_derive_handshake_secrets(hs) ||
374
+ !tls13_set_traffic_key(ssl, evp_aead_open, hs->client_handshake_secret,
375
+ hs->hash_len) ||
376
+ !tls13_set_traffic_key(ssl, evp_aead_seal, hs->server_handshake_secret,
377
+ hs->hash_len)) {
378
+ goto err;
392
379
  }
393
380
 
394
- CBB cbb, body, sigalgs_cbb;
381
+ /* Send EncryptedExtensions. */
395
382
  if (!ssl->method->init_message(ssl, &cbb, &body,
396
- SSL3_MT_CERTIFICATE_REQUEST) ||
397
- !CBB_add_u8(&body, 0 /* no certificate_request_context. */)) {
383
+ SSL3_MT_ENCRYPTED_EXTENSIONS) ||
384
+ !ssl_add_serverhello_tlsext(hs, &body) ||
385
+ !ssl_add_message_cbb(ssl, &cbb)) {
398
386
  goto err;
399
387
  }
400
388
 
401
- const uint16_t *sigalgs;
402
- size_t num_sigalgs = tls12_get_psigalgs(ssl, &sigalgs);
403
- if (!CBB_add_u16_length_prefixed(&body, &sigalgs_cbb)) {
404
- goto err;
389
+ /* Determine whether to request a client certificate. */
390
+ hs->cert_request = !!(ssl->verify_mode & SSL_VERIFY_PEER);
391
+ /* CertificateRequest may only be sent in non-resumption handshakes. */
392
+ if (ssl->s3->session_reused) {
393
+ hs->cert_request = 0;
405
394
  }
406
395
 
407
- for (size_t i = 0; i < num_sigalgs; i++) {
408
- if (!CBB_add_u16(&sigalgs_cbb, sigalgs[i])) {
396
+ /* Send a CertificateRequest, if necessary. */
397
+ if (hs->cert_request) {
398
+ CBB sigalgs_cbb;
399
+ if (!ssl->method->init_message(ssl, &cbb, &body,
400
+ SSL3_MT_CERTIFICATE_REQUEST) ||
401
+ !CBB_add_u8(&body, 0 /* no certificate_request_context. */)) {
409
402
  goto err;
410
403
  }
411
- }
412
404
 
413
- if (!ssl_add_client_CA_list(ssl, &body) ||
414
- !CBB_add_u16(&body, 0 /* empty certificate_extensions. */) ||
415
- !ssl->method->finish_message(ssl, &cbb)) {
416
- goto err;
405
+ const uint16_t *sigalgs;
406
+ size_t num_sigalgs = tls12_get_verify_sigalgs(ssl, &sigalgs);
407
+ if (!CBB_add_u16_length_prefixed(&body, &sigalgs_cbb)) {
408
+ goto err;
409
+ }
410
+
411
+ for (size_t i = 0; i < num_sigalgs; i++) {
412
+ if (!CBB_add_u16(&sigalgs_cbb, sigalgs[i])) {
413
+ goto err;
414
+ }
415
+ }
416
+
417
+ if (!ssl_add_client_CA_list(ssl, &body) ||
418
+ !CBB_add_u16(&body, 0 /* empty certificate_extensions. */) ||
419
+ !ssl_add_message_cbb(ssl, &cbb)) {
420
+ goto err;
421
+ }
417
422
  }
418
423
 
419
- hs->state = state_send_server_certificate;
420
- return ssl_hs_write_message;
424
+ /* Send the server Certificate message, if necessary. */
425
+ if (!ssl->s3->session_reused) {
426
+ if (!ssl_has_certificate(ssl)) {
427
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET);
428
+ goto err;
429
+ }
421
430
 
422
- err:
423
- CBB_cleanup(&cbb);
424
- return ssl_hs_error;
425
- }
431
+ if (!tls13_add_certificate(hs)) {
432
+ goto err;
433
+ }
426
434
 
427
- static enum ssl_hs_wait_t do_send_server_certificate(SSL *ssl,
428
- SSL_HANDSHAKE *hs) {
429
- if (!ssl_cipher_uses_certificate_auth(ssl->s3->tmp.new_cipher)) {
430
- hs->state = state_send_server_finished;
435
+ hs->tls13_state = state_send_server_certificate_verify;
431
436
  return ssl_hs_ok;
432
437
  }
433
438
 
434
- if (!ssl_has_certificate(ssl)) {
435
- OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET);
436
- return ssl_hs_error;
437
- }
438
-
439
- if (!tls13_prepare_certificate(ssl)) {
440
- return ssl_hs_error;
441
- }
439
+ hs->tls13_state = state_send_server_finished;
440
+ return ssl_hs_ok;
442
441
 
443
- hs->state = state_send_server_certificate_verify;
444
- return ssl_hs_write_message;
442
+ err:
443
+ CBB_cleanup(&cbb);
444
+ return ssl_hs_error;
445
445
  }
446
446
 
447
- static enum ssl_hs_wait_t do_send_server_certificate_verify(SSL *ssl,
448
- SSL_HANDSHAKE *hs,
447
+ static enum ssl_hs_wait_t do_send_server_certificate_verify(SSL_HANDSHAKE *hs,
449
448
  int is_first_run) {
450
- switch (tls13_prepare_certificate_verify(ssl, is_first_run)) {
449
+ switch (tls13_add_certificate_verify(hs, is_first_run)) {
451
450
  case ssl_private_key_success:
452
- hs->state = state_send_server_finished;
453
- return ssl_hs_write_message;
451
+ hs->tls13_state = state_send_server_finished;
452
+ return ssl_hs_ok;
454
453
 
455
454
  case ssl_private_key_retry:
456
- hs->state = state_complete_server_certificate_verify;
455
+ hs->tls13_state = state_complete_server_certificate_verify;
457
456
  return ssl_hs_private_key_operation;
458
457
 
459
458
  case ssl_private_key_failure:
@@ -464,199 +463,208 @@ static enum ssl_hs_wait_t do_send_server_certificate_verify(SSL *ssl,
464
463
  return ssl_hs_error;
465
464
  }
466
465
 
467
- static enum ssl_hs_wait_t do_send_server_finished(SSL *ssl, SSL_HANDSHAKE *hs) {
468
- if (!tls13_prepare_finished(ssl)) {
469
- return ssl_hs_error;
470
- }
471
-
472
- hs->state = state_flush;
473
- return ssl_hs_write_message;
474
- }
475
-
476
- static enum ssl_hs_wait_t do_flush(SSL *ssl, SSL_HANDSHAKE *hs) {
477
- /* Update the secret to the master secret and derive traffic keys. */
478
- if (!tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len) ||
479
- !tls13_derive_traffic_secret_0(ssl) ||
480
- !tls13_set_traffic_key(ssl, type_data, evp_aead_seal,
481
- hs->traffic_secret_0, hs->hash_len)) {
466
+ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
467
+ SSL *const ssl = hs->ssl;
468
+ if (!tls13_add_finished(hs) ||
469
+ /* Update the secret to the master secret and derive traffic keys. */
470
+ !tls13_advance_key_schedule(hs, kZeroes, hs->hash_len) ||
471
+ !tls13_derive_application_secrets(hs) ||
472
+ !tls13_set_traffic_key(ssl, evp_aead_seal, hs->server_traffic_secret_0,
473
+ hs->hash_len)) {
482
474
  return ssl_hs_error;
483
475
  }
484
476
 
485
- hs->state = state_process_client_certificate;
477
+ hs->tls13_state = state_process_client_certificate;
486
478
  return ssl_hs_flush_and_read_message;
487
479
  }
488
480
 
489
- static enum ssl_hs_wait_t do_process_client_certificate(SSL *ssl,
490
- SSL_HANDSHAKE *hs) {
491
- if (!ssl->s3->tmp.cert_request) {
481
+ static enum ssl_hs_wait_t do_process_client_certificate(SSL_HANDSHAKE *hs) {
482
+ SSL *const ssl = hs->ssl;
483
+ if (!hs->cert_request) {
492
484
  /* OpenSSL returns X509_V_OK when no certificates are requested. This is
493
485
  * classed by them as a bug, but it's assumed by at least NGINX. */
494
- ssl->s3->new_session->verify_result = X509_V_OK;
486
+ hs->new_session->verify_result = X509_V_OK;
495
487
 
496
488
  /* Skip this state. */
497
- hs->state = state_process_client_finished;
489
+ hs->tls13_state = state_process_channel_id;
498
490
  return ssl_hs_ok;
499
491
  }
500
492
 
501
493
  const int allow_anonymous =
502
494
  (ssl->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) == 0;
503
495
 
504
- if (!tls13_check_message_type(ssl, SSL3_MT_CERTIFICATE) ||
505
- !tls13_process_certificate(ssl, allow_anonymous) ||
506
- !ssl->method->hash_current_message(ssl)) {
496
+ if (!ssl_check_message_type(ssl, SSL3_MT_CERTIFICATE) ||
497
+ !tls13_process_certificate(hs, allow_anonymous) ||
498
+ !ssl_hash_current_message(hs)) {
507
499
  return ssl_hs_error;
508
500
  }
509
501
 
510
- /* For historical reasons, the server's copy of the chain does not include the
511
- * leaf while the client's does. */
512
- if (sk_X509_num(ssl->s3->new_session->cert_chain) > 0) {
513
- X509_free(sk_X509_shift(ssl->s3->new_session->cert_chain));
514
- }
515
-
516
- hs->state = state_process_client_certificate_verify;
502
+ hs->tls13_state = state_process_client_certificate_verify;
517
503
  return ssl_hs_read_message;
518
504
  }
519
505
 
520
506
  static enum ssl_hs_wait_t do_process_client_certificate_verify(
521
- SSL *ssl, SSL_HANDSHAKE *hs) {
522
- if (ssl->s3->new_session->peer == NULL) {
507
+ SSL_HANDSHAKE *hs) {
508
+ SSL *const ssl = hs->ssl;
509
+ if (sk_CRYPTO_BUFFER_num(hs->new_session->certs) == 0) {
523
510
  /* Skip this state. */
524
- hs->state = state_process_client_finished;
511
+ hs->tls13_state = state_process_channel_id;
525
512
  return ssl_hs_ok;
526
513
  }
527
514
 
528
- if (!tls13_check_message_type(ssl, SSL3_MT_CERTIFICATE_VERIFY) ||
529
- !tls13_process_certificate_verify(ssl) ||
530
- !ssl->method->hash_current_message(ssl)) {
531
- return 0;
515
+ if (!ssl_check_message_type(ssl, SSL3_MT_CERTIFICATE_VERIFY) ||
516
+ !tls13_process_certificate_verify(hs) ||
517
+ !ssl_hash_current_message(hs)) {
518
+ return ssl_hs_error;
519
+ }
520
+
521
+ hs->tls13_state = state_process_channel_id;
522
+ return ssl_hs_read_message;
523
+ }
524
+
525
+ static enum ssl_hs_wait_t do_process_channel_id(SSL_HANDSHAKE *hs) {
526
+ if (!hs->ssl->s3->tlsext_channel_id_valid) {
527
+ hs->tls13_state = state_process_client_finished;
528
+ return ssl_hs_ok;
529
+ }
530
+
531
+ if (!ssl_check_message_type(hs->ssl, SSL3_MT_CHANNEL_ID) ||
532
+ !tls1_verify_channel_id(hs) ||
533
+ !ssl_hash_current_message(hs)) {
534
+ return ssl_hs_error;
532
535
  }
533
536
 
534
- hs->state = state_process_client_finished;
537
+ hs->tls13_state = state_process_client_finished;
535
538
  return ssl_hs_read_message;
536
539
  }
537
540
 
538
- static enum ssl_hs_wait_t do_process_client_finished(SSL *ssl,
539
- SSL_HANDSHAKE *hs) {
540
- if (!tls13_check_message_type(ssl, SSL3_MT_FINISHED) ||
541
- !tls13_process_finished(ssl) ||
542
- !ssl->method->hash_current_message(ssl) ||
541
+ static enum ssl_hs_wait_t do_process_client_finished(SSL_HANDSHAKE *hs) {
542
+ SSL *const ssl = hs->ssl;
543
+ if (!ssl_check_message_type(ssl, SSL3_MT_FINISHED) ||
544
+ !tls13_process_finished(hs) ||
545
+ !ssl_hash_current_message(hs) ||
543
546
  /* evp_aead_seal keys have already been switched. */
544
- !tls13_set_traffic_key(ssl, type_data, evp_aead_open,
545
- hs->traffic_secret_0, hs->hash_len) ||
546
- !tls13_finalize_keys(ssl)) {
547
+ !tls13_set_traffic_key(ssl, evp_aead_open, hs->client_traffic_secret_0,
548
+ hs->hash_len) ||
549
+ !tls13_derive_resumption_secret(hs)) {
547
550
  return ssl_hs_error;
548
551
  }
549
552
 
550
553
  ssl->method->received_flight(ssl);
551
- hs->state = state_send_new_session_ticket;
554
+
555
+ /* Rebase the session timestamp so that it is measured from ticket
556
+ * issuance. */
557
+ ssl_session_rebase_time(ssl, hs->new_session);
558
+ hs->tls13_state = state_send_new_session_ticket;
552
559
  return ssl_hs_ok;
553
560
  }
554
561
 
555
- static enum ssl_hs_wait_t do_send_new_session_ticket(SSL *ssl,
556
- SSL_HANDSHAKE *hs) {
557
- SSL_SESSION *session = ssl->s3->new_session;
558
- session->tlsext_tick_lifetime_hint = session->timeout;
559
- session->ticket_flags = SSL_TICKET_ALLOW_DHE_RESUMPTION;
560
- if (!RAND_bytes((uint8_t *)&session->ticket_age_add,
561
- sizeof(session->ticket_age_add))) {
562
- return 0;
563
- }
564
- session->ticket_age_add_valid = 1;
562
+ static enum ssl_hs_wait_t do_send_new_session_ticket(SSL_HANDSHAKE *hs) {
563
+ /* TLS 1.3 recommends single-use tickets, so issue multiple tickets in case the
564
+ * client makes several connections before getting a renewal. */
565
+ static const int kNumTickets = 2;
565
566
 
566
- CBB cbb, body, ticket;
567
- if (!ssl->method->init_message(ssl, &cbb, &body,
568
- SSL3_MT_NEW_SESSION_TICKET) ||
569
- !CBB_add_u32(&body, session->tlsext_tick_lifetime_hint) ||
570
- !CBB_add_u32(&body, session->ticket_flags) ||
571
- !CBB_add_u32(&body, session->ticket_age_add) ||
572
- !CBB_add_u16(&body, 0 /* no ticket extensions */) ||
573
- !CBB_add_u16_length_prefixed(&body, &ticket) ||
574
- !ssl_encrypt_ticket(ssl, &ticket, session) ||
575
- !ssl->method->finish_message(ssl, &cbb)) {
576
- CBB_cleanup(&cbb);
577
- return ssl_hs_error;
567
+ SSL *const ssl = hs->ssl;
568
+ /* If the client doesn't accept resumption with PSK_DHE_KE, don't send a
569
+ * session ticket. */
570
+ if (!hs->accept_psk_mode) {
571
+ hs->tls13_state = state_done;
572
+ return ssl_hs_ok;
578
573
  }
579
574
 
580
- hs->session_tickets_sent++;
575
+ SSL_SESSION *session = hs->new_session;
576
+ CBB cbb;
577
+ CBB_zero(&cbb);
581
578
 
582
- hs->state = state_flush_new_session_ticket;
583
- return ssl_hs_write_message;
584
- }
579
+ for (int i = 0; i < kNumTickets; i++) {
580
+ if (!RAND_bytes((uint8_t *)&session->ticket_age_add, 4)) {
581
+ goto err;
582
+ }
585
583
 
586
- /* TLS 1.3 recommends single-use tickets, so issue multiple tickets in case the
587
- * client makes several connections before getting a renewal. */
588
- static const int kNumTickets = 2;
584
+ CBB body, ticket, extensions;
585
+ if (!ssl->method->init_message(ssl, &cbb, &body,
586
+ SSL3_MT_NEW_SESSION_TICKET) ||
587
+ !CBB_add_u32(&body, session->timeout) ||
588
+ !CBB_add_u32(&body, session->ticket_age_add) ||
589
+ !CBB_add_u16_length_prefixed(&body, &ticket) ||
590
+ !ssl_encrypt_ticket(ssl, &ticket, session) ||
591
+ !CBB_add_u16_length_prefixed(&body, &extensions)) {
592
+ goto err;
593
+ }
589
594
 
590
- static enum ssl_hs_wait_t do_flush_new_session_ticket(SSL *ssl,
591
- SSL_HANDSHAKE *hs) {
592
- if (hs->session_tickets_sent >= kNumTickets) {
593
- hs->state = state_done;
594
- } else {
595
- hs->state = state_send_new_session_ticket;
595
+ if (ssl->ctx->enable_early_data) {
596
+ session->ticket_max_early_data = kMaxEarlyDataAccepted;
597
+
598
+ CBB early_data_info;
599
+ if (!CBB_add_u16(&extensions, TLSEXT_TYPE_ticket_early_data_info) ||
600
+ !CBB_add_u16_length_prefixed(&extensions, &early_data_info) ||
601
+ !CBB_add_u32(&early_data_info, session->ticket_max_early_data) ||
602
+ !CBB_flush(&extensions)) {
603
+ goto err;
604
+ }
605
+ }
606
+
607
+ /* Add a fake extension. See draft-davidben-tls-grease-01. */
608
+ if (!CBB_add_u16(&extensions,
609
+ ssl_get_grease_value(ssl, ssl_grease_ticket_extension)) ||
610
+ !CBB_add_u16(&extensions, 0 /* empty */)) {
611
+ goto err;
612
+ }
613
+
614
+ if (!ssl_add_message_cbb(ssl, &cbb)) {
615
+ goto err;
616
+ }
596
617
  }
618
+
619
+ hs->session_tickets_sent++;
620
+ hs->tls13_state = state_done;
597
621
  return ssl_hs_flush;
598
- }
599
622
 
600
- enum ssl_hs_wait_t tls13_server_handshake(SSL *ssl) {
601
- SSL_HANDSHAKE *hs = ssl->s3->hs;
623
+ err:
624
+ CBB_cleanup(&cbb);
625
+ return ssl_hs_error;
626
+ }
602
627
 
603
- while (hs->state != state_done) {
628
+ enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs) {
629
+ while (hs->tls13_state != state_done) {
604
630
  enum ssl_hs_wait_t ret = ssl_hs_error;
605
- enum server_hs_state_t state = hs->state;
631
+ enum server_hs_state_t state = hs->tls13_state;
606
632
  switch (state) {
607
- case state_process_client_hello:
608
- ret = do_process_client_hello(ssl, hs);
609
- break;
610
633
  case state_select_parameters:
611
- ret = do_select_parameters(ssl, hs);
634
+ ret = do_select_parameters(hs);
612
635
  break;
613
636
  case state_send_hello_retry_request:
614
- ret = do_send_hello_retry_request(ssl, hs);
615
- break;
616
- case state_flush_hello_retry_request:
617
- ret = do_flush_hello_retry_request(ssl, hs);
637
+ ret = do_send_hello_retry_request(hs);
618
638
  break;
619
639
  case state_process_second_client_hello:
620
- ret = do_process_second_client_hello(ssl, hs);
640
+ ret = do_process_second_client_hello(hs);
621
641
  break;
622
642
  case state_send_server_hello:
623
- ret = do_send_server_hello(ssl, hs);
624
- break;
625
- case state_send_encrypted_extensions:
626
- ret = do_send_encrypted_extensions(ssl, hs);
627
- break;
628
- case state_send_certificate_request:
629
- ret = do_send_certificate_request(ssl, hs);
630
- break;
631
- case state_send_server_certificate:
632
- ret = do_send_server_certificate(ssl, hs);
643
+ ret = do_send_server_hello(hs);
633
644
  break;
634
645
  case state_send_server_certificate_verify:
635
- ret = do_send_server_certificate_verify(ssl, hs, 1 /* first run */);
646
+ ret = do_send_server_certificate_verify(hs, 1 /* first run */);
636
647
  break;
637
648
  case state_complete_server_certificate_verify:
638
- ret = do_send_server_certificate_verify(ssl, hs, 0 /* complete */);
649
+ ret = do_send_server_certificate_verify(hs, 0 /* complete */);
639
650
  break;
640
651
  case state_send_server_finished:
641
- ret = do_send_server_finished(ssl, hs);
642
- break;
643
- case state_flush:
644
- ret = do_flush(ssl, hs);
652
+ ret = do_send_server_finished(hs);
645
653
  break;
646
654
  case state_process_client_certificate:
647
- ret = do_process_client_certificate(ssl, hs);
655
+ ret = do_process_client_certificate(hs);
648
656
  break;
649
657
  case state_process_client_certificate_verify:
650
- ret = do_process_client_certificate_verify(ssl, hs);
658
+ ret = do_process_client_certificate_verify(hs);
659
+ break;
660
+ case state_process_channel_id:
661
+ ret = do_process_channel_id(hs);
651
662
  break;
652
663
  case state_process_client_finished:
653
- ret = do_process_client_finished(ssl, hs);
664
+ ret = do_process_client_finished(hs);
654
665
  break;
655
666
  case state_send_new_session_ticket:
656
- ret = do_send_new_session_ticket(ssl, hs);
657
- break;
658
- case state_flush_new_session_ticket:
659
- ret = do_flush_new_session_ticket(ssl, hs);
667
+ ret = do_send_new_session_ticket(hs);
660
668
  break;
661
669
  case state_done:
662
670
  ret = ssl_hs_ok;