grpc 1.0.1 → 1.1.2

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 (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -141,7 +141,6 @@
141
141
  #include <openssl/ssl.h>
142
142
 
143
143
  #include <assert.h>
144
- #include <stdio.h>
145
144
  #include <string.h>
146
145
 
147
146
  #include <openssl/buf.h>
@@ -152,6 +151,7 @@
152
151
  #include <openssl/stack.h>
153
152
 
154
153
  #include "internal.h"
154
+ #include "../crypto/internal.h"
155
155
 
156
156
 
157
157
  /* kCiphers is an array of all supported ciphers, sorted by id. */
@@ -168,28 +168,6 @@ static const SSL_CIPHER kCiphers[] = {
168
168
  SSL_HANDSHAKE_MAC_DEFAULT,
169
169
  },
170
170
 
171
- /* Cipher 04 */
172
- {
173
- SSL3_TXT_RSA_RC4_128_MD5,
174
- SSL3_CK_RSA_RC4_128_MD5,
175
- SSL_kRSA,
176
- SSL_aRSA,
177
- SSL_RC4,
178
- SSL_MD5,
179
- SSL_HANDSHAKE_MAC_DEFAULT,
180
- },
181
-
182
- /* Cipher 05 */
183
- {
184
- SSL3_TXT_RSA_RC4_128_SHA,
185
- SSL3_CK_RSA_RC4_128_SHA,
186
- SSL_kRSA,
187
- SSL_aRSA,
188
- SSL_RC4,
189
- SSL_SHA1,
190
- SSL_HANDSHAKE_MAC_DEFAULT,
191
- },
192
-
193
171
  /* Cipher 0A */
194
172
  {
195
173
  SSL3_TXT_RSA_DES_192_CBC3_SHA,
@@ -297,17 +275,6 @@ static const SSL_CIPHER kCiphers[] = {
297
275
 
298
276
  /* PSK cipher suites. */
299
277
 
300
- /* Cipher 8A */
301
- {
302
- TLS1_TXT_PSK_WITH_RC4_128_SHA,
303
- TLS1_CK_PSK_WITH_RC4_128_SHA,
304
- SSL_kPSK,
305
- SSL_aPSK,
306
- SSL_RC4,
307
- SSL_SHA1,
308
- SSL_HANDSHAKE_MAC_DEFAULT,
309
- },
310
-
311
278
  /* Cipher 8C */
312
279
  {
313
280
  TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
@@ -376,15 +343,50 @@ static const SSL_CIPHER kCiphers[] = {
376
343
  SSL_HANDSHAKE_MAC_SHA384,
377
344
  },
378
345
 
379
- /* Cipher C007 */
346
+ /* CECPQ1 (combined elliptic curve + post-quantum) suites. */
347
+
348
+ /* Cipher 16B7 */
380
349
  {
381
- TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
382
- TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
383
- SSL_kECDHE,
350
+ TLS1_TXT_CECPQ1_RSA_WITH_CHACHA20_POLY1305_SHA256,
351
+ TLS1_CK_CECPQ1_RSA_WITH_CHACHA20_POLY1305_SHA256,
352
+ SSL_kCECPQ1,
353
+ SSL_aRSA,
354
+ SSL_CHACHA20POLY1305,
355
+ SSL_AEAD,
356
+ SSL_HANDSHAKE_MAC_SHA256,
357
+ },
358
+
359
+ /* Cipher 16B8 */
360
+ {
361
+ TLS1_TXT_CECPQ1_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
362
+ TLS1_CK_CECPQ1_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
363
+ SSL_kCECPQ1,
384
364
  SSL_aECDSA,
385
- SSL_RC4,
386
- SSL_SHA1,
387
- SSL_HANDSHAKE_MAC_DEFAULT,
365
+ SSL_CHACHA20POLY1305,
366
+ SSL_AEAD,
367
+ SSL_HANDSHAKE_MAC_SHA256,
368
+ },
369
+
370
+ /* Cipher 16B9 */
371
+ {
372
+ TLS1_TXT_CECPQ1_RSA_WITH_AES_256_GCM_SHA384,
373
+ TLS1_CK_CECPQ1_RSA_WITH_AES_256_GCM_SHA384,
374
+ SSL_kCECPQ1,
375
+ SSL_aRSA,
376
+ SSL_AES256GCM,
377
+ SSL_AEAD,
378
+ SSL_HANDSHAKE_MAC_SHA384,
379
+ },
380
+
381
+ /* Cipher 16BA */
382
+ {
383
+ TLS1_TXT_CECPQ1_ECDSA_WITH_AES_256_GCM_SHA384,
384
+ TLS1_CK_CECPQ1_ECDSA_WITH_AES_256_GCM_SHA384,
385
+ SSL_kCECPQ1,
386
+ SSL_aECDSA,
387
+ SSL_AES256GCM,
388
+ SSL_AEAD,
389
+ SSL_HANDSHAKE_MAC_SHA384,
388
390
  },
389
391
 
390
392
  /* Cipher C009 */
@@ -409,17 +411,6 @@ static const SSL_CIPHER kCiphers[] = {
409
411
  SSL_HANDSHAKE_MAC_DEFAULT,
410
412
  },
411
413
 
412
- /* Cipher C011 */
413
- {
414
- TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
415
- TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
416
- SSL_kECDHE,
417
- SSL_aRSA,
418
- SSL_RC4,
419
- SSL_SHA1,
420
- SSL_HANDSHAKE_MAC_DEFAULT,
421
- },
422
-
423
414
  /* Cipher C013 */
424
415
  {
425
416
  TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
@@ -616,9 +607,32 @@ static const SSL_CIPHER kCiphers[] = {
616
607
  SSL_AEAD,
617
608
  SSL_HANDSHAKE_MAC_SHA256,
618
609
  },
610
+
611
+ /* Cipher D001 */
612
+ {
613
+ TLS1_TXT_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
614
+ TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
615
+ SSL_kECDHE,
616
+ SSL_aPSK,
617
+ SSL_AES128GCM,
618
+ SSL_AEAD,
619
+ SSL_HANDSHAKE_MAC_SHA256,
620
+ },
621
+
622
+ /* Cipher D002 */
623
+ {
624
+ TLS1_TXT_ECDHE_PSK_WITH_AES_256_GCM_SHA384,
625
+ TLS1_CK_ECDHE_PSK_WITH_AES_256_GCM_SHA384,
626
+ SSL_kECDHE,
627
+ SSL_aPSK,
628
+ SSL_AES256GCM,
629
+ SSL_AEAD,
630
+ SSL_HANDSHAKE_MAC_SHA384,
631
+ },
632
+
619
633
  };
620
634
 
621
- static const size_t kCiphersLen = sizeof(kCiphers) / sizeof(kCiphers[0]);
635
+ static const size_t kCiphersLen = OPENSSL_ARRAY_SIZE(kCiphers);
622
636
 
623
637
  #define CIPHER_ADD 1
624
638
  #define CIPHER_KILL 2
@@ -652,8 +666,9 @@ typedef struct cipher_alias_st {
652
666
  } CIPHER_ALIAS;
653
667
 
654
668
  static const CIPHER_ALIAS kCipherAliases[] = {
655
- /* "ALL" doesn't include eNULL (must be specifically enabled) */
656
- {"ALL", ~0u, ~0u, ~SSL_eNULL, ~0u, 0},
669
+ /* "ALL" doesn't include eNULL nor kCECPQ1. These must be explicitly
670
+ * enabled. */
671
+ {"ALL", ~SSL_kCECPQ1, ~0u, ~SSL_eNULL, ~0u, 0},
657
672
 
658
673
  /* The "COMPLEMENTOFDEFAULT" rule is omitted. It matches nothing. */
659
674
 
@@ -668,15 +683,16 @@ static const CIPHER_ALIAS kCipherAliases[] = {
668
683
  {"DH", SSL_kDHE, ~0u, ~0u, ~0u, 0},
669
684
 
670
685
  {"kECDHE", SSL_kECDHE, ~0u, ~0u, ~0u, 0},
686
+ {"kCECPQ1", SSL_kCECPQ1, ~0u, ~0u, ~0u, 0},
671
687
  {"kEECDH", SSL_kECDHE, ~0u, ~0u, ~0u, 0},
672
688
  {"ECDH", SSL_kECDHE, ~0u, ~0u, ~0u, 0},
673
689
 
674
690
  {"kPSK", SSL_kPSK, ~0u, ~0u, ~0u, 0},
675
691
 
676
692
  /* server authentication aliases */
677
- {"aRSA", ~0u, SSL_aRSA, ~SSL_eNULL, ~0u, 0},
678
- {"aECDSA", ~0u, SSL_aECDSA, ~0u, ~0u, 0},
679
- {"ECDSA", ~0u, SSL_aECDSA, ~0u, ~0u, 0},
693
+ {"aRSA", ~SSL_kCECPQ1, SSL_aRSA, ~SSL_eNULL, ~0u, 0},
694
+ {"aECDSA", ~SSL_kCECPQ1, SSL_aECDSA, ~0u, ~0u, 0},
695
+ {"ECDSA", ~SSL_kCECPQ1, SSL_aECDSA, ~0u, ~0u, 0},
680
696
  {"aPSK", ~0u, SSL_aPSK, ~0u, ~0u, 0},
681
697
 
682
698
  /* aliases combining key exchange and server authentication */
@@ -689,35 +705,32 @@ static const CIPHER_ALIAS kCipherAliases[] = {
689
705
 
690
706
  /* symmetric encryption aliases */
691
707
  {"3DES", ~0u, ~0u, SSL_3DES, ~0u, 0},
692
- {"RC4", ~0u, ~0u, SSL_RC4, ~0u, 0},
693
708
  {"AES128", ~0u, ~0u, SSL_AES128 | SSL_AES128GCM, ~0u, 0},
694
- {"AES256", ~0u, ~0u, SSL_AES256 | SSL_AES256GCM, ~0u, 0},
695
- {"AES", ~0u, ~0u, SSL_AES, ~0u, 0},
696
- {"AESGCM", ~0u, ~0u, SSL_AES128GCM | SSL_AES256GCM, ~0u, 0},
697
- {"CHACHA20", ~0u, ~0u, SSL_CHACHA20POLY1305 | SSL_CHACHA20POLY1305_OLD, ~0u,
709
+ {"AES256", ~SSL_kCECPQ1, ~0u, SSL_AES256 | SSL_AES256GCM, ~0u, 0},
710
+ {"AES", ~SSL_kCECPQ1, ~0u, SSL_AES, ~0u, 0},
711
+ {"AESGCM", ~SSL_kCECPQ1, ~0u, SSL_AES128GCM | SSL_AES256GCM, ~0u, 0},
712
+ {"CHACHA20", ~SSL_kCECPQ1, ~0u, SSL_CHACHA20POLY1305 | SSL_CHACHA20POLY1305_OLD, ~0u,
698
713
  0},
699
714
 
700
715
  /* MAC aliases */
701
716
  {"MD5", ~0u, ~0u, ~0u, SSL_MD5, 0},
702
717
  {"SHA1", ~0u, ~0u, ~SSL_eNULL, SSL_SHA1, 0},
703
718
  {"SHA", ~0u, ~0u, ~SSL_eNULL, SSL_SHA1, 0},
704
- {"SHA256", ~0u, ~0u, ~0u, SSL_SHA256, 0},
705
- {"SHA384", ~0u, ~0u, ~0u, SSL_SHA384, 0},
719
+ {"SHA256", ~SSL_kCECPQ1, ~0u, ~0u, SSL_SHA256, 0},
720
+ {"SHA384", ~SSL_kCECPQ1, ~0u, ~0u, SSL_SHA384, 0},
706
721
 
707
722
  /* Legacy protocol minimum version aliases. "TLSv1" is intentionally the
708
723
  * same as "SSLv3". */
709
- {"SSLv3", ~0u, ~0u, ~SSL_eNULL, ~0u, SSL3_VERSION},
710
- {"TLSv1", ~0u, ~0u, ~SSL_eNULL, ~0u, SSL3_VERSION},
711
- {"TLSv1.2", ~0u, ~0u, ~SSL_eNULL, ~0u, TLS1_2_VERSION},
724
+ {"SSLv3", ~SSL_kCECPQ1, ~0u, ~SSL_eNULL, ~0u, SSL3_VERSION},
725
+ {"TLSv1", ~SSL_kCECPQ1, ~0u, ~SSL_eNULL, ~0u, SSL3_VERSION},
726
+ {"TLSv1.2", ~SSL_kCECPQ1, ~0u, ~SSL_eNULL, ~0u, TLS1_2_VERSION},
712
727
 
713
728
  /* Legacy strength classes. */
714
- {"MEDIUM", ~0u, ~0u, SSL_RC4, ~0u, 0},
715
- {"HIGH", ~0u, ~0u, ~(SSL_eNULL|SSL_RC4), ~0u, 0},
716
- {"FIPS", ~0u, ~0u, ~(SSL_eNULL|SSL_RC4), ~0u, 0},
729
+ {"HIGH", ~SSL_kCECPQ1, ~0u, ~SSL_eNULL, ~0u, 0},
730
+ {"FIPS", ~SSL_kCECPQ1, ~0u, ~SSL_eNULL, ~0u, 0},
717
731
  };
718
732
 
719
- static const size_t kCipherAliasesLen =
720
- sizeof(kCipherAliases) / sizeof(kCipherAliases[0]);
733
+ static const size_t kCipherAliasesLen = OPENSSL_ARRAY_SIZE(kCipherAliases);
721
734
 
722
735
  static int ssl_cipher_id_cmp(const void *in_a, const void *in_b) {
723
736
  const SSL_CIPHER *a = in_a;
@@ -756,46 +769,24 @@ int ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead,
756
769
  case SSL_AES128GCM:
757
770
  *out_aead = EVP_aead_aes_128_gcm();
758
771
  *out_fixed_iv_len = 4;
759
- return 1;
772
+ break;
760
773
 
761
774
  case SSL_AES256GCM:
762
775
  *out_aead = EVP_aead_aes_256_gcm();
763
776
  *out_fixed_iv_len = 4;
764
- return 1;
777
+ break;
765
778
 
766
779
  #if !defined(BORINGSSL_ANDROID_SYSTEM)
767
780
  case SSL_CHACHA20POLY1305_OLD:
768
781
  *out_aead = EVP_aead_chacha20_poly1305_old();
769
782
  *out_fixed_iv_len = 0;
770
- return 1;
783
+ break;
771
784
  #endif
772
785
 
773
786
  case SSL_CHACHA20POLY1305:
774
787
  *out_aead = EVP_aead_chacha20_poly1305();
775
788
  *out_fixed_iv_len = 12;
776
- return 1;
777
-
778
- case SSL_RC4:
779
- switch (cipher->algorithm_mac) {
780
- case SSL_MD5:
781
- if (version == SSL3_VERSION) {
782
- *out_aead = EVP_aead_rc4_md5_ssl3();
783
- } else {
784
- *out_aead = EVP_aead_rc4_md5_tls();
785
- }
786
- *out_mac_secret_len = MD5_DIGEST_LENGTH;
787
- return 1;
788
- case SSL_SHA1:
789
- if (version == SSL3_VERSION) {
790
- *out_aead = EVP_aead_rc4_sha1_ssl3();
791
- } else {
792
- *out_aead = EVP_aead_rc4_sha1_tls();
793
- }
794
- *out_mac_secret_len = SHA_DIGEST_LENGTH;
795
- return 1;
796
- default:
797
- return 0;
798
- }
789
+ break;
799
790
 
800
791
  case SSL_AES128:
801
792
  switch (cipher->algorithm_mac) {
@@ -810,14 +801,15 @@ int ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead,
810
801
  *out_aead = EVP_aead_aes_128_cbc_sha1_tls();
811
802
  }
812
803
  *out_mac_secret_len = SHA_DIGEST_LENGTH;
813
- return 1;
804
+ break;
814
805
  case SSL_SHA256:
815
806
  *out_aead = EVP_aead_aes_128_cbc_sha256_tls();
816
807
  *out_mac_secret_len = SHA256_DIGEST_LENGTH;
817
- return 1;
808
+ break;
818
809
  default:
819
810
  return 0;
820
811
  }
812
+ break;
821
813
 
822
814
  case SSL_AES256:
823
815
  switch (cipher->algorithm_mac) {
@@ -832,18 +824,19 @@ int ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead,
832
824
  *out_aead = EVP_aead_aes_256_cbc_sha1_tls();
833
825
  }
834
826
  *out_mac_secret_len = SHA_DIGEST_LENGTH;
835
- return 1;
827
+ break;
836
828
  case SSL_SHA256:
837
829
  *out_aead = EVP_aead_aes_256_cbc_sha256_tls();
838
830
  *out_mac_secret_len = SHA256_DIGEST_LENGTH;
839
- return 1;
831
+ break;
840
832
  case SSL_SHA384:
841
833
  *out_aead = EVP_aead_aes_256_cbc_sha384_tls();
842
834
  *out_mac_secret_len = SHA384_DIGEST_LENGTH;
843
- return 1;
835
+ break;
844
836
  default:
845
837
  return 0;
846
838
  }
839
+ break;
847
840
 
848
841
  case SSL_3DES:
849
842
  switch (cipher->algorithm_mac) {
@@ -858,10 +851,11 @@ int ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead,
858
851
  *out_aead = EVP_aead_des_ede3_cbc_sha1_tls();
859
852
  }
860
853
  *out_mac_secret_len = SHA_DIGEST_LENGTH;
861
- return 1;
854
+ break;
862
855
  default:
863
856
  return 0;
864
857
  }
858
+ break;
865
859
 
866
860
  case SSL_eNULL:
867
861
  switch (cipher->algorithm_mac) {
@@ -872,14 +866,25 @@ int ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead,
872
866
  *out_aead = EVP_aead_null_sha1_tls();
873
867
  }
874
868
  *out_mac_secret_len = SHA_DIGEST_LENGTH;
875
- return 1;
869
+ break;
876
870
  default:
877
871
  return 0;
878
872
  }
873
+ break;
879
874
 
880
875
  default:
881
876
  return 0;
882
877
  }
878
+
879
+ /* In TLS 1.3, the iv_len is equal to the AEAD nonce length whereas the code
880
+ * above computes the TLS 1.2 construction.
881
+ *
882
+ * TODO(davidben,svaldez): Avoid computing the wrong value and fixing it. */
883
+ if (version >= TLS1_3_VERSION) {
884
+ *out_fixed_iv_len = EVP_AEAD_nonce_length(*out_aead);
885
+ assert(*out_fixed_iv_len >= 8);
886
+ }
887
+ return 1;
883
888
  }
884
889
 
885
890
  const EVP_MD *ssl_get_handshake_digest(uint32_t algorithm_prf) {
@@ -952,8 +957,7 @@ static void ssl_cipher_collect_ciphers(const SSL_PROTOCOL_METHOD *ssl_method,
952
957
  /* The set of ciphers is static, but some subset may be unsupported by
953
958
  * |ssl_method|, so the list may be smaller. */
954
959
  size_t co_list_num = 0;
955
- size_t i;
956
- for (i = 0; i < kCiphersLen; i++) {
960
+ for (size_t i = 0; i < kCiphersLen; i++) {
957
961
  const SSL_CIPHER *cipher = &kCiphers[i];
958
962
  if (ssl_method->supports_cipher(cipher)) {
959
963
  co_list[co_list_num].cipher = cipher;
@@ -972,7 +976,7 @@ static void ssl_cipher_collect_ciphers(const SSL_PROTOCOL_METHOD *ssl_method,
972
976
  if (co_list_num > 1) {
973
977
  co_list[0].next = &co_list[1];
974
978
 
975
- for (i = 1; i < co_list_num - 1; i++) {
979
+ for (size_t i = 1; i < co_list_num - 1; i++) {
976
980
  co_list[i].prev = &co_list[i - 1];
977
981
  co_list[i].next = &co_list[i + 1];
978
982
  }
@@ -1051,13 +1055,22 @@ static void ssl_cipher_apply_rule(
1051
1055
  if (strength_bits != SSL_CIPHER_get_bits(cp, NULL)) {
1052
1056
  continue;
1053
1057
  }
1054
- } else if (!(alg_mkey & cp->algorithm_mkey) ||
1055
- !(alg_auth & cp->algorithm_auth) ||
1056
- !(alg_enc & cp->algorithm_enc) ||
1057
- !(alg_mac & cp->algorithm_mac) ||
1058
- (min_version != 0 &&
1059
- SSL_CIPHER_get_min_version(cp) != min_version)) {
1060
- continue;
1058
+ } else {
1059
+ if (!(alg_mkey & cp->algorithm_mkey) ||
1060
+ !(alg_auth & cp->algorithm_auth) ||
1061
+ !(alg_enc & cp->algorithm_enc) ||
1062
+ !(alg_mac & cp->algorithm_mac) ||
1063
+ (min_version != 0 && SSL_CIPHER_get_min_version(cp) != min_version)) {
1064
+ continue;
1065
+ }
1066
+
1067
+ /* The following ciphers are internal implementation details of TLS 1.3
1068
+ * resumption but are not yet finalized. Disable them by default until
1069
+ * then. */
1070
+ if (cp->id == TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256 ||
1071
+ cp->id == TLS1_CK_ECDHE_PSK_WITH_AES_256_GCM_SHA384) {
1072
+ continue;
1073
+ }
1061
1074
  }
1062
1075
 
1063
1076
  /* add the cipher if it has not been added yet. */
@@ -1405,6 +1418,7 @@ ssl_create_cipher_list(const SSL_PROTOCOL_METHOD *ssl_method,
1405
1418
 
1406
1419
  /* Everything else being equal, prefer ECDHE_ECDSA then ECDHE_RSA over other
1407
1420
  * key exchange mechanisms */
1421
+
1408
1422
  ssl_cipher_apply_rule(0, SSL_kECDHE, SSL_aECDSA, ~0u, ~0u, 0, CIPHER_ADD, -1,
1409
1423
  0, &head, &tail);
1410
1424
  ssl_cipher_apply_rule(0, SSL_kECDHE, ~0u, ~0u, ~0u, 0, CIPHER_ADD, -1, 0,
@@ -1417,10 +1431,10 @@ ssl_create_cipher_list(const SSL_PROTOCOL_METHOD *ssl_method,
1417
1431
  * AES_GCM. Of the two CHACHA20 variants, the new one is preferred over the
1418
1432
  * old one. */
1419
1433
  if (EVP_has_aes_hardware()) {
1420
- ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES256GCM, ~0u, 0, CIPHER_ADD, -1, 0,
1421
- &head, &tail);
1422
1434
  ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES128GCM, ~0u, 0, CIPHER_ADD, -1, 0,
1423
1435
  &head, &tail);
1436
+ ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES256GCM, ~0u, 0, CIPHER_ADD, -1, 0,
1437
+ &head, &tail);
1424
1438
  ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_CHACHA20POLY1305, ~0u, 0, CIPHER_ADD,
1425
1439
  -1, 0, &head, &tail);
1426
1440
  ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_CHACHA20POLY1305_OLD, ~0u, 0,
@@ -1430,21 +1444,17 @@ ssl_create_cipher_list(const SSL_PROTOCOL_METHOD *ssl_method,
1430
1444
  -1, 0, &head, &tail);
1431
1445
  ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_CHACHA20POLY1305_OLD, ~0u, 0,
1432
1446
  CIPHER_ADD, -1, 0, &head, &tail);
1433
- ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES256GCM, ~0u, 0, CIPHER_ADD, -1, 0,
1434
- &head, &tail);
1435
1447
  ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES128GCM, ~0u, 0, CIPHER_ADD, -1, 0,
1436
1448
  &head, &tail);
1449
+ ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES256GCM, ~0u, 0, CIPHER_ADD, -1, 0,
1450
+ &head, &tail);
1437
1451
  }
1438
1452
 
1439
- /* Then the legacy non-AEAD ciphers: AES_256_CBC, AES-128_CBC, RC4_128_SHA,
1440
- * RC4_128_MD5, 3DES_EDE_CBC_SHA. */
1441
- ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES256, ~0u, 0, CIPHER_ADD, -1, 0,
1442
- &head, &tail);
1453
+ /* Then the legacy non-AEAD ciphers: AES_128_CBC, AES_256_CBC,
1454
+ * 3DES_EDE_CBC_SHA. */
1443
1455
  ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES128, ~0u, 0, CIPHER_ADD, -1, 0,
1444
1456
  &head, &tail);
1445
- ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_RC4, ~SSL_MD5, 0, CIPHER_ADD, -1, 0,
1446
- &head, &tail);
1447
- ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_RC4, SSL_MD5, 0, CIPHER_ADD, -1, 0,
1457
+ ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_AES256, ~0u, 0, CIPHER_ADD, -1, 0,
1448
1458
  &head, &tail);
1449
1459
  ssl_cipher_apply_rule(0, ~0u, ~0u, SSL_3DES, ~0u, 0, CIPHER_ADD, -1, 0, &head,
1450
1460
  &tail);
@@ -1565,6 +1575,30 @@ uint16_t ssl_cipher_get_value(const SSL_CIPHER *cipher) {
1565
1575
  return id & 0xffff;
1566
1576
  }
1567
1577
 
1578
+ int ssl_cipher_get_ecdhe_psk_cipher(const SSL_CIPHER *cipher,
1579
+ uint16_t *out_cipher) {
1580
+ switch (cipher->id) {
1581
+ case TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:
1582
+ case TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:
1583
+ case TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256:
1584
+ *out_cipher = TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 & 0xffff;
1585
+ return 1;
1586
+
1587
+ case TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
1588
+ case TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
1589
+ case TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256:
1590
+ *out_cipher = TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256 & 0xffff;
1591
+ return 1;
1592
+
1593
+ case TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384:
1594
+ case TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:
1595
+ case TLS1_CK_ECDHE_PSK_WITH_AES_256_GCM_SHA384:
1596
+ *out_cipher = TLS1_CK_ECDHE_PSK_WITH_AES_256_GCM_SHA384 & 0xffff;
1597
+ return 1;
1598
+ }
1599
+ return 0;
1600
+ }
1601
+
1568
1602
  int SSL_CIPHER_is_AES(const SSL_CIPHER *cipher) {
1569
1603
  return (cipher->algorithm_enc & SSL_AES) != 0;
1570
1604
  }
@@ -1577,6 +1611,10 @@ int SSL_CIPHER_has_SHA1_HMAC(const SSL_CIPHER *cipher) {
1577
1611
  return (cipher->algorithm_mac & SSL_SHA1) != 0;
1578
1612
  }
1579
1613
 
1614
+ int SSL_CIPHER_has_SHA256_HMAC(const SSL_CIPHER *cipher) {
1615
+ return (cipher->algorithm_mac & SSL_SHA256) != 0;
1616
+ }
1617
+
1580
1618
  int SSL_CIPHER_is_AESGCM(const SSL_CIPHER *cipher) {
1581
1619
  return (cipher->algorithm_enc & (SSL_AES128GCM | SSL_AES256GCM)) != 0;
1582
1620
  }
@@ -1602,13 +1640,8 @@ int SSL_CIPHER_is_NULL(const SSL_CIPHER *cipher) {
1602
1640
  return (cipher->algorithm_enc & SSL_eNULL) != 0;
1603
1641
  }
1604
1642
 
1605
- int SSL_CIPHER_is_RC4(const SSL_CIPHER *cipher) {
1606
- return (cipher->algorithm_enc & SSL_RC4) != 0;
1607
- }
1608
-
1609
1643
  int SSL_CIPHER_is_block_cipher(const SSL_CIPHER *cipher) {
1610
- /* Neither stream cipher nor AEAD. */
1611
- return (cipher->algorithm_enc & (SSL_RC4 | SSL_eNULL)) == 0 &&
1644
+ return (cipher->algorithm_enc & SSL_eNULL) == 0 &&
1612
1645
  cipher->algorithm_mac != SSL_AEAD;
1613
1646
  }
1614
1647
 
@@ -1616,10 +1649,18 @@ int SSL_CIPHER_is_ECDSA(const SSL_CIPHER *cipher) {
1616
1649
  return (cipher->algorithm_auth & SSL_aECDSA) != 0;
1617
1650
  }
1618
1651
 
1652
+ int SSL_CIPHER_is_DHE(const SSL_CIPHER *cipher) {
1653
+ return (cipher->algorithm_mkey & SSL_kDHE) != 0;
1654
+ }
1655
+
1619
1656
  int SSL_CIPHER_is_ECDHE(const SSL_CIPHER *cipher) {
1620
1657
  return (cipher->algorithm_mkey & SSL_kECDHE) != 0;
1621
1658
  }
1622
1659
 
1660
+ int SSL_CIPHER_is_CECPQ1(const SSL_CIPHER *cipher) {
1661
+ return (cipher->algorithm_mkey & SSL_kCECPQ1) != 0;
1662
+ }
1663
+
1623
1664
  uint16_t SSL_CIPHER_get_min_version(const SSL_CIPHER *cipher) {
1624
1665
  if (cipher->algorithm_prf != SSL_HANDSHAKE_MAC_DEFAULT) {
1625
1666
  /* Cipher suites before TLS 1.2 use the default PRF, while all those added
@@ -1629,6 +1670,17 @@ uint16_t SSL_CIPHER_get_min_version(const SSL_CIPHER *cipher) {
1629
1670
  return SSL3_VERSION;
1630
1671
  }
1631
1672
 
1673
+ uint16_t SSL_CIPHER_get_max_version(const SSL_CIPHER *cipher) {
1674
+ if (cipher->algorithm_mac == SSL_AEAD &&
1675
+ (cipher->algorithm_enc & SSL_CHACHA20POLY1305_OLD) == 0 &&
1676
+ (cipher->algorithm_mkey & SSL_kECDHE) != 0 &&
1677
+ /* TODO(davidben,svaldez): Support PSK-based ciphers in TLS 1.3. */
1678
+ (cipher->algorithm_auth & SSL_aCERT) != 0) {
1679
+ return TLS1_3_VERSION;
1680
+ }
1681
+ return TLS1_2_VERSION;
1682
+ }
1683
+
1632
1684
  /* return the actual cipher being used */
1633
1685
  const char *SSL_CIPHER_get_name(const SSL_CIPHER *cipher) {
1634
1686
  if (cipher != NULL) {
@@ -1669,6 +1721,17 @@ const char *SSL_CIPHER_get_kx_name(const SSL_CIPHER *cipher) {
1669
1721
  return "UNKNOWN";
1670
1722
  }
1671
1723
 
1724
+ case SSL_kCECPQ1:
1725
+ switch (cipher->algorithm_auth) {
1726
+ case SSL_aECDSA:
1727
+ return "CECPQ1_ECDSA";
1728
+ case SSL_aRSA:
1729
+ return "CECPQ1_RSA";
1730
+ default:
1731
+ assert(0);
1732
+ return "UNKNOWN";
1733
+ }
1734
+
1672
1735
  case SSL_kPSK:
1673
1736
  assert(cipher->algorithm_auth == SSL_aPSK);
1674
1737
  return "PSK";
@@ -1683,8 +1746,6 @@ static const char *ssl_cipher_get_enc_name(const SSL_CIPHER *cipher) {
1683
1746
  switch (cipher->algorithm_enc) {
1684
1747
  case SSL_3DES:
1685
1748
  return "3DES_EDE_CBC";
1686
- case SSL_RC4:
1687
- return "RC4";
1688
1749
  case SSL_AES128:
1689
1750
  return "AES_128_CBC";
1690
1751
  case SSL_AES256:
@@ -1763,7 +1824,6 @@ int SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, int *out_alg_bits) {
1763
1824
  switch (cipher->algorithm_enc) {
1764
1825
  case SSL_AES128:
1765
1826
  case SSL_AES128GCM:
1766
- case SSL_RC4:
1767
1827
  alg_bits = 128;
1768
1828
  strength_bits = 128;
1769
1829
  break;
@@ -1823,6 +1883,10 @@ const char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf,
1823
1883
  kx = "ECDH";
1824
1884
  break;
1825
1885
 
1886
+ case SSL_kCECPQ1:
1887
+ kx = "CECPQ1";
1888
+ break;
1889
+
1826
1890
  case SSL_kPSK:
1827
1891
  kx = "PSK";
1828
1892
  break;
@@ -1854,10 +1918,6 @@ const char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf,
1854
1918
  enc = "3DES(168)";
1855
1919
  break;
1856
1920
 
1857
- case SSL_RC4:
1858
- enc = "RC4(128)";
1859
- break;
1860
-
1861
1921
  case SSL_AES128:
1862
1922
  enc = "AES(128)";
1863
1923
  break;
@@ -1954,20 +2014,15 @@ int ssl_cipher_get_key_type(const SSL_CIPHER *cipher) {
1954
2014
  return EVP_PKEY_NONE;
1955
2015
  }
1956
2016
 
1957
- int ssl_cipher_has_server_public_key(const SSL_CIPHER *cipher) {
1958
- /* PSK-authenticated ciphers do not use a certificate. (RSA_PSK is not
1959
- * supported.) */
1960
- if (cipher->algorithm_auth & SSL_aPSK) {
1961
- return 0;
1962
- }
1963
-
1964
- /* All other ciphers include it. */
1965
- return 1;
2017
+ int ssl_cipher_uses_certificate_auth(const SSL_CIPHER *cipher) {
2018
+ return (cipher->algorithm_auth & SSL_aCERT) != 0;
1966
2019
  }
1967
2020
 
1968
2021
  int ssl_cipher_requires_server_key_exchange(const SSL_CIPHER *cipher) {
1969
2022
  /* Ephemeral Diffie-Hellman key exchanges require a ServerKeyExchange. */
1970
- if (cipher->algorithm_mkey & SSL_kDHE || cipher->algorithm_mkey & SSL_kECDHE) {
2023
+ if (cipher->algorithm_mkey & SSL_kDHE ||
2024
+ cipher->algorithm_mkey & SSL_kECDHE ||
2025
+ cipher->algorithm_mkey & SSL_kCECPQ1) {
1971
2026
  return 1;
1972
2027
  }
1973
2028