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
@@ -192,25 +192,36 @@ void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param)
192
192
  OPENSSL_free(param);
193
193
  }
194
194
 
195
- /*
195
+ /*-
196
196
  * This function determines how parameters are "inherited" from one structure
197
- * to another. There are several different ways this can happen. 1. If a
198
- * child structure needs to have its values initialized from a parent they are
199
- * simply copied across. For example SSL_CTX copied to SSL. 2. If the
200
- * structure should take on values only if they are currently unset. For
201
- * example the values in an SSL structure will take appropriate value for SSL
202
- * servers or clients but only if the application has not set new ones. The
203
- * "inh_flags" field determines how this function behaves. Normally any
204
- * values which are set in the default are not copied from the destination and
205
- * verify flags are ORed together. If X509_VP_FLAG_DEFAULT is set then
206
- * anything set in the source is copied to the destination. Effectively the
207
- * values in "to" become default values which will be used only if nothing new
208
- * is set in "from". If X509_VP_FLAG_OVERWRITE is set then all value are
209
- * copied across whether they are set or not. Flags is still Ored though. If
210
- * X509_VP_FLAG_RESET_FLAGS is set then the flags value is copied instead of
211
- * ORed. If X509_VP_FLAG_LOCKED is set then no values are copied. If
212
- * X509_VP_FLAG_ONCE is set then the current inh_flags setting is zeroed after
213
- * the next call.
197
+ * to another. There are several different ways this can happen.
198
+ *
199
+ * 1. If a child structure needs to have its values initialized from a parent
200
+ * they are simply copied across. For example SSL_CTX copied to SSL.
201
+ * 2. If the structure should take on values only if they are currently unset.
202
+ * For example the values in an SSL structure will take appropriate value
203
+ * for SSL servers or clients but only if the application has not set new
204
+ * ones.
205
+ *
206
+ * The "inh_flags" field determines how this function behaves.
207
+ *
208
+ * Normally any values which are set in the default are not copied from the
209
+ * destination and verify flags are ORed together.
210
+ *
211
+ * If X509_VP_FLAG_DEFAULT is set then anything set in the source is copied
212
+ * to the destination. Effectively the values in "to" become default values
213
+ * which will be used only if nothing new is set in "from".
214
+ *
215
+ * If X509_VP_FLAG_OVERWRITE is set then all value are copied across whether
216
+ * they are set or not. Flags is still Ored though.
217
+ *
218
+ * If X509_VP_FLAG_RESET_FLAGS is set then the flags value is copied instead
219
+ * of ORed.
220
+ *
221
+ * If X509_VP_FLAG_LOCKED is set then no values are copied.
222
+ *
223
+ * If X509_VP_FLAG_ONCE is set then the current inh_flags setting is zeroed
224
+ * after the next call.
214
225
  */
215
226
 
216
227
  /* Macro to test if a field should be copied from src to dest */
@@ -129,9 +129,10 @@ int X509_CRL_sort(X509_CRL *c)
129
129
  return 1;
130
130
  }
131
131
 
132
- void X509_CRL_up_ref(X509_CRL *crl)
132
+ int X509_CRL_up_ref(X509_CRL *crl)
133
133
  {
134
134
  CRYPTO_refcount_inc(&crl->references);
135
+ return 1;
135
136
  }
136
137
 
137
138
  int X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm)
@@ -460,14 +460,14 @@ static int def_crl_lookup(X509_CRL *crl,
460
460
 
461
461
  CRYPTO_STATIC_MUTEX_lock_read(&g_crl_sort_lock);
462
462
  const int is_sorted = sk_X509_REVOKED_is_sorted(crl->crl->revoked);
463
- CRYPTO_STATIC_MUTEX_unlock(&g_crl_sort_lock);
463
+ CRYPTO_STATIC_MUTEX_unlock_read(&g_crl_sort_lock);
464
464
 
465
465
  if (!is_sorted) {
466
466
  CRYPTO_STATIC_MUTEX_lock_write(&g_crl_sort_lock);
467
467
  if (!sk_X509_REVOKED_is_sorted(crl->crl->revoked)) {
468
468
  sk_X509_REVOKED_sort(crl->crl->revoked);
469
469
  }
470
- CRYPTO_STATIC_MUTEX_unlock(&g_crl_sort_lock);
470
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_crl_sort_lock);
471
471
  }
472
472
 
473
473
  if (!sk_X509_REVOKED_find(crl->crl->revoked, &idx, &rtmp))
@@ -71,6 +71,13 @@
71
71
  typedef STACK_OF(X509_NAME_ENTRY) STACK_OF_X509_NAME_ENTRY;
72
72
  DECLARE_STACK_OF(STACK_OF_X509_NAME_ENTRY)
73
73
 
74
+ /*
75
+ * Maximum length of X509_NAME: much larger than anything we should
76
+ * ever see in practice.
77
+ */
78
+
79
+ #define X509_NAME_MAX (1024 * 1024)
80
+
74
81
  static int x509_name_ex_d2i(ASN1_VALUE **val,
75
82
  const unsigned char **in, long len,
76
83
  const ASN1_ITEM *it,
@@ -87,10 +94,6 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in);
87
94
  static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) * intname,
88
95
  unsigned char **in);
89
96
 
90
- static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval,
91
- int indent,
92
- const char *fname, const ASN1_PCTX *pctx);
93
-
94
97
  ASN1_SEQUENCE(X509_NAME_ENTRY) = {
95
98
  ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT),
96
99
  ASN1_SIMPLE(X509_NAME_ENTRY, value, ASN1_PRINTABLE)
@@ -126,7 +129,7 @@ static const ASN1_EXTERN_FUNCS x509_name_ff = {
126
129
  0, /* Default clear behaviour is OK */
127
130
  x509_name_ex_d2i,
128
131
  x509_name_ex_i2d,
129
- x509_name_ex_print
132
+ NULL,
130
133
  };
131
134
 
132
135
  IMPLEMENT_EXTERN_ASN1(X509_NAME, V_ASN1_SEQUENCE, x509_name_ff)
@@ -208,6 +211,10 @@ static int x509_name_ex_d2i(ASN1_VALUE **val,
208
211
  int ret;
209
212
  STACK_OF(X509_NAME_ENTRY) *entries;
210
213
  X509_NAME_ENTRY *entry;
214
+ /* Bound the size of an X509_NAME we are willing to parse. */
215
+ if (len > X509_NAME_MAX) {
216
+ len = X509_NAME_MAX;
217
+ }
211
218
  q = p;
212
219
 
213
220
  /* Get internal representation of Name */
@@ -323,16 +330,6 @@ static int x509_name_encode(X509_NAME *a)
323
330
  return -1;
324
331
  }
325
332
 
326
- static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval,
327
- int indent,
328
- const char *fname, const ASN1_PCTX *pctx)
329
- {
330
- if (X509_NAME_print_ex(out, (X509_NAME *)*pval,
331
- indent, pctx->nm_flags) <= 0)
332
- return 0;
333
- return 2;
334
- }
335
-
336
333
  /*
337
334
  * This function generates the canonical encoding of the Name structure. In
338
335
  * it all strings are converted to UTF8, leading, trailing and multiple
@@ -453,10 +450,10 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in)
453
450
  len--;
454
451
  }
455
452
 
456
- to = from + len - 1;
453
+ to = from + len;
457
454
 
458
455
  /* Ignore trailing spaces */
459
- while ((len > 0) && !(*to & 0x80) && isspace(*to)) {
456
+ while ((len > 0) && !(to[-1] & 0x80) && isspace(to[-1])) {
460
457
  to--;
461
458
  len--;
462
459
  }
@@ -54,6 +54,8 @@
54
54
  * copied and put under another distribution licence
55
55
  * [including the GNU Public Licence.] */
56
56
 
57
+ #include <openssl/x509.h>
58
+
57
59
  #include <limits.h>
58
60
 
59
61
  #include <openssl/asn1.h>
@@ -64,7 +66,6 @@
64
66
  #include <openssl/mem.h>
65
67
  #include <openssl/obj.h>
66
68
  #include <openssl/thread.h>
67
- #include <openssl/x509.h>
68
69
 
69
70
  #include "../internal.h"
70
71
 
@@ -139,10 +140,11 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
139
140
 
140
141
  CRYPTO_STATIC_MUTEX_lock_read(&g_pubkey_lock);
141
142
  if (key->pkey != NULL) {
142
- CRYPTO_STATIC_MUTEX_unlock(&g_pubkey_lock);
143
- return EVP_PKEY_up_ref(key->pkey);
143
+ CRYPTO_STATIC_MUTEX_unlock_read(&g_pubkey_lock);
144
+ EVP_PKEY_up_ref(key->pkey);
145
+ return key->pkey;
144
146
  }
145
- CRYPTO_STATIC_MUTEX_unlock(&g_pubkey_lock);
147
+ CRYPTO_STATIC_MUTEX_unlock_read(&g_pubkey_lock);
146
148
 
147
149
  /* Re-encode the |X509_PUBKEY| to DER and parse it. */
148
150
  int spki_len = i2d_X509_PUBKEY(key, &spki);
@@ -160,16 +162,17 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
160
162
  /* Check to see if another thread set key->pkey first */
161
163
  CRYPTO_STATIC_MUTEX_lock_write(&g_pubkey_lock);
162
164
  if (key->pkey) {
163
- CRYPTO_STATIC_MUTEX_unlock(&g_pubkey_lock);
165
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_pubkey_lock);
164
166
  EVP_PKEY_free(ret);
165
167
  ret = key->pkey;
166
168
  } else {
167
169
  key->pkey = ret;
168
- CRYPTO_STATIC_MUTEX_unlock(&g_pubkey_lock);
170
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_pubkey_lock);
169
171
  }
170
172
 
171
173
  OPENSSL_free(spki);
172
- return EVP_PKEY_up_ref(ret);
174
+ EVP_PKEY_up_ref(ret);
175
+ return ret;
173
176
 
174
177
  error:
175
178
  OPENSSL_free(spki);
@@ -55,6 +55,7 @@
55
55
  * copied and put under another distribution licence
56
56
  * [including the GNU Public Licence.] */
57
57
 
58
+ #include <assert.h>
58
59
  #include <stdio.h>
59
60
 
60
61
  #include <openssl/asn1t.h>
@@ -95,7 +96,6 @@ static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
95
96
  switch (operation) {
96
97
 
97
98
  case ASN1_OP_NEW_POST:
98
- ret->valid = 0;
99
99
  ret->name = NULL;
100
100
  ret->ex_flags = 0;
101
101
  ret->ex_pathlen = -1;
@@ -142,10 +142,10 @@ IMPLEMENT_ASN1_FUNCTIONS(X509)
142
142
 
143
143
  IMPLEMENT_ASN1_DUP_FUNCTION(X509)
144
144
 
145
- X509 *X509_up_ref(X509 *x)
145
+ int X509_up_ref(X509 *x)
146
146
  {
147
147
  CRYPTO_refcount_inc(&x->references);
148
- return x;
148
+ return 1;
149
149
  }
150
150
 
151
151
  int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_unused * unused,
@@ -204,12 +204,73 @@ X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length)
204
204
  return NULL;
205
205
  }
206
206
 
207
+ /*
208
+ * Serialize trusted certificate to *pp or just return the required buffer
209
+ * length if pp == NULL. We ultimately want to avoid modifying *pp in the
210
+ * error path, but that depends on similar hygiene in lower-level functions.
211
+ * Here we avoid compounding the problem.
212
+ */
213
+ static int i2d_x509_aux_internal(X509 *a, unsigned char **pp)
214
+ {
215
+ int length, tmplen;
216
+ unsigned char *start = pp != NULL ? *pp : NULL;
217
+
218
+ assert(pp == NULL || *pp != NULL);
219
+
220
+ /*
221
+ * This might perturb *pp on error, but fixing that belongs in i2d_X509()
222
+ * not here. It should be that if a == NULL length is zero, but we check
223
+ * both just in case.
224
+ */
225
+ length = i2d_X509(a, pp);
226
+ if (length <= 0 || a == NULL) {
227
+ return length;
228
+ }
229
+
230
+ tmplen = i2d_X509_CERT_AUX(a->aux, pp);
231
+ if (tmplen < 0) {
232
+ if (start != NULL)
233
+ *pp = start;
234
+ return tmplen;
235
+ }
236
+ length += tmplen;
237
+
238
+ return length;
239
+ }
240
+
241
+ /*
242
+ * Serialize trusted certificate to *pp, or just return the required buffer
243
+ * length if pp == NULL.
244
+ *
245
+ * When pp is not NULL, but *pp == NULL, we allocate the buffer, but since
246
+ * we're writing two ASN.1 objects back to back, we can't have i2d_X509() do
247
+ * the allocation, nor can we allow i2d_X509_CERT_AUX() to increment the
248
+ * allocated buffer.
249
+ */
207
250
  int i2d_X509_AUX(X509 *a, unsigned char **pp)
208
251
  {
209
252
  int length;
210
- length = i2d_X509(a, pp);
211
- if (a)
212
- length += i2d_X509_CERT_AUX(a->aux, pp);
253
+ unsigned char *tmp;
254
+
255
+ /* Buffer provided by caller */
256
+ if (pp == NULL || *pp != NULL)
257
+ return i2d_x509_aux_internal(a, pp);
258
+
259
+ /* Obtain the combined length */
260
+ if ((length = i2d_x509_aux_internal(a, NULL)) <= 0)
261
+ return length;
262
+
263
+ /* Allocate requisite combined storage */
264
+ *pp = tmp = OPENSSL_malloc(length);
265
+ if (tmp == NULL)
266
+ return -1; /* Push error onto error stack? */
267
+
268
+ /* Encode, but keep *pp at the originally malloced pointer */
269
+ length = i2d_x509_aux_internal(a, &tmp);
270
+ if (length <= 0) {
271
+ OPENSSL_free(*pp);
272
+ *pp = NULL;
273
+ }
213
274
  return length;
214
275
  }
215
276
 
@@ -241,7 +241,7 @@ const X509_POLICY_CACHE *policy_cache_set(X509 *x)
241
241
 
242
242
  CRYPTO_STATIC_MUTEX_lock_read(&g_x509_policy_cache_lock);
243
243
  cache = x->policy_cache;
244
- CRYPTO_STATIC_MUTEX_unlock(&g_x509_policy_cache_lock);
244
+ CRYPTO_STATIC_MUTEX_unlock_read(&g_x509_policy_cache_lock);
245
245
 
246
246
  if (cache != NULL)
247
247
  return cache;
@@ -250,7 +250,7 @@ const X509_POLICY_CACHE *policy_cache_set(X509 *x)
250
250
  if (x->policy_cache == NULL)
251
251
  policy_cache_new(x);
252
252
  cache = x->policy_cache;
253
- CRYPTO_STATIC_MUTEX_unlock(&g_x509_policy_cache_lock);
253
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_x509_policy_cache_lock);
254
254
 
255
255
  return cache;
256
256
  }
@@ -255,7 +255,8 @@ static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs,
255
255
  level++;
256
256
  x = sk_X509_value(certs, i);
257
257
  cache = policy_cache_set(x);
258
- level->cert = X509_up_ref(x);
258
+ X509_up_ref(x);
259
+ level->cert = x;
259
260
 
260
261
  if (!cache->anyPolicy)
261
262
  level->flags |= X509_V_FLAG_INHIBIT_ANY;
@@ -138,10 +138,12 @@ static X509_EXTENSION *do_ext_nconf(CONF *conf, X509V3_CTX *ctx, int ext_nid,
138
138
  nval = NCONF_get_section(conf, value + 1);
139
139
  else
140
140
  nval = X509V3_parse_list(value);
141
- if (sk_CONF_VALUE_num(nval) <= 0) {
141
+ if (nval == NULL || sk_CONF_VALUE_num(nval) <= 0) {
142
142
  OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_EXTENSION_STRING);
143
143
  ERR_add_error_data(4, "name=", OBJ_nid2sn(ext_nid), ",section=",
144
144
  value);
145
+ if (*value != '@')
146
+ sk_CONF_VALUE_pop_free(nval, X509V3_conf_free);
145
147
  return NULL;
146
148
  }
147
149
  ext_struc = method->v2i(method, ctx, nval);
@@ -263,10 +265,9 @@ static int v3_check_generic(char **value)
263
265
  static X509_EXTENSION *v3_generic_extension(const char *ext, char *value,
264
266
  int crit, int gen_type,
265
267
  X509V3_CTX *ctx)
266
- OPENSSL_SUPPRESS_POTENTIALLY_UNINITIALIZED_WARNINGS
267
268
  {
268
269
  unsigned char *ext_der = NULL;
269
- long ext_len;
270
+ long ext_len = 0;
270
271
  ASN1_OBJECT *obj = NULL;
271
272
  ASN1_OCTET_STRING *oct = NULL;
272
273
  X509_EXTENSION *extension = NULL;
@@ -190,6 +190,11 @@ static STACK_OF(POLICYINFO) *r2i_certpol(X509V3_EXT_METHOD *method,
190
190
  goto err;
191
191
  }
192
192
  pol = POLICYINFO_new();
193
+ if (pol == NULL) {
194
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
195
+ ASN1_OBJECT_free(pobj);
196
+ goto err;
197
+ }
193
198
  pol->policyid = pobj;
194
199
  }
195
200
  if (!sk_POLICYINFO_push(pols, pol)) {
@@ -207,9 +207,6 @@ static int unknown_ext_print(BIO *out, X509_EXTENSION *ext,
207
207
  return 1;
208
208
 
209
209
  case X509V3_EXT_PARSE_UNKNOWN:
210
- return ASN1_parse_dump(out,
211
- ext->value->data, ext->value->length, indent,
212
- -1);
213
210
  case X509V3_EXT_DUMP_UNKNOWN:
214
211
  return BIO_hexdump(out, ext->value->data, ext->value->length, indent);
215
212
 
@@ -431,7 +431,7 @@ static void x509v3_cache_extensions(X509 *x)
431
431
  CRYPTO_STATIC_MUTEX_lock_write(&g_x509_cache_extensions_lock);
432
432
 
433
433
  if (x->ex_flags & EXFLAG_SET) {
434
- CRYPTO_STATIC_MUTEX_unlock(&g_x509_cache_extensions_lock);
434
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_x509_cache_extensions_lock);
435
435
  return;
436
436
  }
437
437
 
@@ -564,7 +564,7 @@ static void x509v3_cache_extensions(X509 *x)
564
564
  }
565
565
  x->ex_flags |= EXFLAG_SET;
566
566
 
567
- CRYPTO_STATIC_MUTEX_unlock(&g_x509_cache_extensions_lock);
567
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_x509_cache_extensions_lock);
568
568
  }
569
569
 
570
570
  /*
@@ -852,7 +852,8 @@ static const unsigned char *valid_star(const unsigned char *p, size_t len,
852
852
  state = LABEL_START;
853
853
  ++dots;
854
854
  } else if (p[i] == '-') {
855
- if (state & LABEL_HYPHEN)
855
+ /* no domain/subdomain starts with '-' */
856
+ if ((state & LABEL_START) != 0)
856
857
  return NULL;
857
858
  state |= LABEL_HYPHEN;
858
859
  } else
@@ -82,10 +82,8 @@ extern "C" {
82
82
  * permits implicit context to be authenticated but may be empty if not needed.
83
83
  *
84
84
  * The "seal" and "open" operations may work in-place if the |out| and |in|
85
- * arguments are equal. They may also be used to shift the data left inside the
86
- * same buffer if |out| is less than |in|. However, |out| may not point inside
87
- * the input data otherwise the input may be overwritten before it has been
88
- * read. This situation will cause an error.
85
+ * arguments are equal. Otherwise, if |out| and |in| alias, input data may be
86
+ * overwritten before it is read. This situation will cause an error.
89
87
  *
90
88
  * The "seal" and "open" operations return one on success and zero on error. */
91
89
 
@@ -135,49 +133,6 @@ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_ctr_hmac_sha256(void);
135
133
  OPENSSL_EXPORT int EVP_has_aes_hardware(void);
136
134
 
137
135
 
138
- /* TLS-specific AEAD algorithms.
139
- *
140
- * These AEAD primitives do not meet the definition of generic AEADs. They are
141
- * all specific to TLS and should not be used outside of that context. They must
142
- * be initialized with |EVP_AEAD_CTX_init_with_direction|, are stateful, and may
143
- * not be used concurrently. Any nonces are used as IVs, so they must be
144
- * unpredictable. They only accept an |ad| parameter of length 11 (the standard
145
- * TLS one with length omitted). */
146
-
147
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_rc4_md5_tls(void);
148
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_rc4_sha1_tls(void);
149
-
150
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls(void);
151
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls_implicit_iv(void);
152
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha256_tls(void);
153
-
154
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls(void);
155
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls_implicit_iv(void);
156
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha256_tls(void);
157
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha384_tls(void);
158
-
159
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls(void);
160
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv(void);
161
-
162
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_null_sha1_tls(void);
163
-
164
-
165
- /* SSLv3-specific AEAD algorithms.
166
- *
167
- * These AEAD primitives do not meet the definition of generic AEADs. They are
168
- * all specific to SSLv3 and should not be used outside of that context. They
169
- * must be initialized with |EVP_AEAD_CTX_init_with_direction|, are stateful,
170
- * and may not be used concurrently. They only accept an |ad| parameter of
171
- * length 9 (the standard TLS one with length and version omitted). */
172
-
173
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_rc4_md5_ssl3(void);
174
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_rc4_sha1_ssl3(void);
175
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_ssl3(void);
176
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_ssl3(void);
177
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_ssl3(void);
178
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_null_sha1_ssl3(void);
179
-
180
-
181
136
  /* Utility functions. */
182
137
 
183
138
  /* EVP_AEAD_key_length returns the length, in bytes, of the keys used by
@@ -226,12 +181,6 @@ typedef struct evp_aead_ctx_st {
226
181
  * be used. */
227
182
  #define EVP_AEAD_DEFAULT_TAG_LENGTH 0
228
183
 
229
- /* evp_aead_direction_t denotes the direction of an AEAD operation. */
230
- enum evp_aead_direction_t {
231
- evp_aead_open,
232
- evp_aead_seal,
233
- };
234
-
235
184
  /* EVP_AEAD_CTX_zero sets an uninitialized |ctx| to the zero state. It must be
236
185
  * initialized with |EVP_AEAD_CTX_init| before use. It is safe, but not
237
186
  * necessary, to call |EVP_AEAD_CTX_cleanup| in this state. This may be used for
@@ -251,13 +200,6 @@ OPENSSL_EXPORT int EVP_AEAD_CTX_init(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
251
200
  const uint8_t *key, size_t key_len,
252
201
  size_t tag_len, ENGINE *impl);
253
202
 
254
- /* EVP_AEAD_CTX_init_with_direction calls |EVP_AEAD_CTX_init| for normal
255
- * AEADs. For TLS-specific and SSL3-specific AEADs, it initializes |ctx| for a
256
- * given direction. */
257
- OPENSSL_EXPORT int EVP_AEAD_CTX_init_with_direction(
258
- EVP_AEAD_CTX *ctx, const EVP_AEAD *aead, const uint8_t *key, size_t key_len,
259
- size_t tag_len, enum evp_aead_direction_t dir);
260
-
261
203
  /* EVP_AEAD_CTX_cleanup frees any data allocated by |ctx|. It is a no-op to
262
204
  * call |EVP_AEAD_CTX_cleanup| on a |EVP_AEAD_CTX| that has been |memset| to
263
205
  * all zeros. */
@@ -282,7 +224,7 @@ OPENSSL_EXPORT void EVP_AEAD_CTX_cleanup(EVP_AEAD_CTX *ctx);
282
224
  * insufficient, zero will be returned. (In this case, |*out_len| is set to
283
225
  * zero.)
284
226
  *
285
- * If |in| and |out| alias then |out| must be <= |in|. */
227
+ * If |in| and |out| alias then |out| must be == |in|. */
286
228
  OPENSSL_EXPORT int EVP_AEAD_CTX_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
287
229
  size_t *out_len, size_t max_out_len,
288
230
  const uint8_t *nonce, size_t nonce_len,
@@ -307,20 +249,70 @@ OPENSSL_EXPORT int EVP_AEAD_CTX_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
307
249
  * insufficient, zero will be returned. (In this case, |*out_len| is set to
308
250
  * zero.)
309
251
  *
310
- * If |in| and |out| alias then |out| must be <= |in|. */
252
+ * If |in| and |out| alias then |out| must be == |in|. */
311
253
  OPENSSL_EXPORT int EVP_AEAD_CTX_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
312
254
  size_t *out_len, size_t max_out_len,
313
255
  const uint8_t *nonce, size_t nonce_len,
314
256
  const uint8_t *in, size_t in_len,
315
257
  const uint8_t *ad, size_t ad_len);
316
258
 
259
+ /* EVP_AEAD_CTX_aead returns the underlying AEAD for |ctx|, or NULL if one has
260
+ * not been set. */
261
+ OPENSSL_EXPORT const EVP_AEAD *EVP_AEAD_CTX_aead(const EVP_AEAD_CTX *ctx);
262
+
263
+
264
+ /* TLS-specific AEAD algorithms.
265
+ *
266
+ * These AEAD primitives do not meet the definition of generic AEADs. They are
267
+ * all specific to TLS and should not be used outside of that context. They must
268
+ * be initialized with |EVP_AEAD_CTX_init_with_direction|, are stateful, and may
269
+ * not be used concurrently. Any nonces are used as IVs, so they must be
270
+ * unpredictable. They only accept an |ad| parameter of length 11 (the standard
271
+ * TLS one with length omitted). */
272
+
273
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls(void);
274
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls_implicit_iv(void);
275
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha256_tls(void);
276
+
277
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls(void);
278
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls_implicit_iv(void);
279
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha256_tls(void);
280
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha384_tls(void);
281
+
282
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls(void);
283
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv(void);
284
+
285
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_null_sha1_tls(void);
286
+
287
+
288
+ /* SSLv3-specific AEAD algorithms.
289
+ *
290
+ * These AEAD primitives do not meet the definition of generic AEADs. They are
291
+ * all specific to SSLv3 and should not be used outside of that context. They
292
+ * must be initialized with |EVP_AEAD_CTX_init_with_direction|, are stateful,
293
+ * and may not be used concurrently. They only accept an |ad| parameter of
294
+ * length 9 (the standard TLS one with length and version omitted). */
295
+
296
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_ssl3(void);
297
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_ssl3(void);
298
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_ssl3(void);
299
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_null_sha1_ssl3(void);
300
+
317
301
 
318
302
  /* Obscure functions. */
319
303
 
320
- /* EVP_AEAD_CTX_get_rc4_state sets |*out_key| to point to an RC4 key structure.
321
- * It returns one on success or zero if |ctx| doesn't have an RC4 key. */
322
- OPENSSL_EXPORT int EVP_AEAD_CTX_get_rc4_state(const EVP_AEAD_CTX *ctx,
323
- const RC4_KEY **out_key);
304
+ /* evp_aead_direction_t denotes the direction of an AEAD operation. */
305
+ enum evp_aead_direction_t {
306
+ evp_aead_open,
307
+ evp_aead_seal,
308
+ };
309
+
310
+ /* EVP_AEAD_CTX_init_with_direction calls |EVP_AEAD_CTX_init| for normal
311
+ * AEADs. For TLS-specific and SSL3-specific AEADs, it initializes |ctx| for a
312
+ * given direction. */
313
+ OPENSSL_EXPORT int EVP_AEAD_CTX_init_with_direction(
314
+ EVP_AEAD_CTX *ctx, const EVP_AEAD *aead, const uint8_t *key, size_t key_len,
315
+ size_t tag_len, enum evp_aead_direction_t dir);
324
316
 
325
317
  /* EVP_AEAD_CTX_get_iv sets |*out_len| to the length of the IV for |ctx| and
326
318
  * sets |*out_iv| to point to that many bytes of the current IV. This is only
@@ -331,16 +323,23 @@ OPENSSL_EXPORT int EVP_AEAD_CTX_get_iv(const EVP_AEAD_CTX *ctx,
331
323
  const uint8_t **out_iv, size_t *out_len);
332
324
 
333
325
 
334
- /* Deprecated functions. */
326
+ #if defined(__cplusplus)
327
+ } /* extern C */
328
+
329
+ #if !defined(BORINGSSL_NO_CXX)
330
+ extern "C++" {
331
+
332
+ namespace bssl {
335
333
 
336
- /* EVP_aead_chacha20_poly1305_rfc7539 calls |EVP_aead_chacha20_poly1305|.
337
- *
338
- * TODO(davidben): Remove this. */
339
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_chacha20_poly1305_rfc7539(void);
334
+ using ScopedEVP_AEAD_CTX =
335
+ internal::StackAllocated<EVP_AEAD_CTX, void, EVP_AEAD_CTX_zero,
336
+ EVP_AEAD_CTX_cleanup>;
340
337
 
338
+ } // namespace bssl
339
+
340
+ } // extern C++
341
+ #endif
341
342
 
342
- #if defined(__cplusplus)
343
- } /* extern C */
344
343
  #endif
345
344
 
346
345
  #endif /* OPENSSL_HEADER_AEAD_H */