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
@@ -64,7 +64,8 @@
64
64
  #include <openssl/x509.h>
65
65
  #include <openssl/x509v3.h>
66
66
 
67
- #include "../evp/internal.h"
67
+ #include "internal.h"
68
+
68
69
 
69
70
  #ifndef OPENSSL_NO_FP_API
70
71
  int X509_print_ex_fp(FILE *fp, X509 *x, unsigned long nmflag,
@@ -132,7 +133,8 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags,
132
133
  goto err;
133
134
 
134
135
  bs = X509_get_serialNumber(x);
135
- if (bs->length <= (int)sizeof(long)) {
136
+ if (bs->length < (int)sizeof(long)
137
+ || (bs->length == sizeof(long) && (bs->data[0] & 0x80) == 0)) {
136
138
  l = ASN1_INTEGER_get(bs);
137
139
  if (bs->type == V_ASN1_NEG_INTEGER) {
138
140
  l = -l;
@@ -298,22 +300,18 @@ int X509_ocspid_print(BIO *bp, X509 *x)
298
300
 
299
301
  int X509_signature_print(BIO *bp, X509_ALGOR *sigalg, ASN1_STRING *sig)
300
302
  {
301
- int sig_nid;
302
303
  if (BIO_puts(bp, " Signature Algorithm: ") <= 0)
303
304
  return 0;
304
305
  if (i2a_ASN1_OBJECT(bp, sigalg->algorithm) <= 0)
305
306
  return 0;
306
307
 
307
- sig_nid = OBJ_obj2nid(sigalg->algorithm);
308
- if (sig_nid != NID_undef) {
309
- int pkey_nid, dig_nid;
310
- const EVP_PKEY_ASN1_METHOD *ameth;
311
- if (OBJ_find_sigid_algs(sig_nid, &dig_nid, &pkey_nid)) {
312
- ameth = EVP_PKEY_asn1_find(NULL, pkey_nid);
313
- if (ameth && ameth->sig_print)
314
- return ameth->sig_print(bp, sigalg, sig, 9, 0);
315
- }
308
+ /* RSA-PSS signatures have parameters to print. */
309
+ int sig_nid = OBJ_obj2nid(sigalg->algorithm);
310
+ if (sig_nid == NID_rsassaPss &&
311
+ !x509_print_rsa_pss_params(bp, sigalg, 9, 0)) {
312
+ return 0;
316
313
  }
314
+
317
315
  if (sig)
318
316
  return X509_signature_dump(bp, sig, 9);
319
317
  else if (BIO_puts(bp, "\n") <= 0)
@@ -57,9 +57,14 @@
57
57
  #include <openssl/x509.h>
58
58
 
59
59
  #include <openssl/bio.h>
60
+ #include <openssl/err.h>
60
61
  #include <openssl/mem.h>
61
62
 
62
63
 
64
+ /* |X509_R_UNSUPPORTED_ALGORITHM| is no longer emitted, but continue to define
65
+ * it to avoid downstream churn. */
66
+ OPENSSL_DECLARE_ERROR_REASON(X509, UNSUPPORTED_ALGORITHM)
67
+
63
68
  int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, int version,
64
69
  int ptype, void *pval, uint8_t *penc, int penclen) {
65
70
  uint8_t **ppenc = NULL;
@@ -287,7 +287,7 @@ int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj)
287
287
  int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
288
288
  const void *data, int len)
289
289
  {
290
- ASN1_TYPE *ttmp;
290
+ ASN1_TYPE *ttmp = NULL;
291
291
  ASN1_STRING *stmp = NULL;
292
292
  int atype = 0;
293
293
  if (!attr)
@@ -315,20 +315,26 @@ int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
315
315
  * least one value but some types use and zero length SET and require
316
316
  * this.
317
317
  */
318
- if (attrtype == 0)
318
+ if (attrtype == 0) {
319
+ ASN1_STRING_free(stmp);
319
320
  return 1;
321
+ }
320
322
  if (!(ttmp = ASN1_TYPE_new()))
321
323
  goto err;
322
324
  if ((len == -1) && !(attrtype & MBSTRING_FLAG)) {
323
325
  if (!ASN1_TYPE_set1(ttmp, attrtype, data))
324
326
  goto err;
325
- } else
327
+ } else {
326
328
  ASN1_TYPE_set(ttmp, atype, stmp);
329
+ stmp = NULL;
330
+ }
327
331
  if (!sk_ASN1_TYPE_push(attr->value.set, ttmp))
328
332
  goto err;
329
333
  return 1;
330
334
  err:
331
335
  OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
336
+ ASN1_TYPE_free(ttmp);
337
+ ASN1_STRING_free(stmp);
332
338
  return 0;
333
339
  }
334
340
 
@@ -130,18 +130,18 @@ int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name,
130
130
  X509_OBJECT *ret)
131
131
  {
132
132
  if ((ctx->method == NULL) || (ctx->method->get_by_subject == NULL))
133
- return X509_LU_FAIL;
133
+ return 0;
134
134
  if (ctx->skip)
135
135
  return 0;
136
- return ctx->method->get_by_subject(ctx, type, name, ret);
136
+ return ctx->method->get_by_subject(ctx, type, name, ret) > 0;
137
137
  }
138
138
 
139
139
  int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name,
140
140
  ASN1_INTEGER *serial, X509_OBJECT *ret)
141
141
  {
142
142
  if ((ctx->method == NULL) || (ctx->method->get_by_issuer_serial == NULL))
143
- return X509_LU_FAIL;
144
- return ctx->method->get_by_issuer_serial(ctx, type, name, serial, ret);
143
+ return 0;
144
+ return ctx->method->get_by_issuer_serial(ctx, type, name, serial, ret) > 0;
145
145
  }
146
146
 
147
147
  int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type,
@@ -149,16 +149,16 @@ int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type,
149
149
  X509_OBJECT *ret)
150
150
  {
151
151
  if ((ctx->method == NULL) || (ctx->method->get_by_fingerprint == NULL))
152
- return X509_LU_FAIL;
153
- return ctx->method->get_by_fingerprint(ctx, type, bytes, len, ret);
152
+ return 0;
153
+ return ctx->method->get_by_fingerprint(ctx, type, bytes, len, ret) > 0;
154
154
  }
155
155
 
156
156
  int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str, int len,
157
157
  X509_OBJECT *ret)
158
158
  {
159
159
  if ((ctx->method == NULL) || (ctx->method->get_by_alias == NULL))
160
- return X509_LU_FAIL;
161
- return ctx->method->get_by_alias(ctx, type, str, len, ret);
160
+ return 0;
161
+ return ctx->method->get_by_alias(ctx, type, str, len, ret) > 0;
162
162
  }
163
163
 
164
164
  static int x509_object_cmp(const X509_OBJECT **a, const X509_OBJECT **b)
@@ -217,6 +217,12 @@ X509_STORE *X509_STORE_new(void)
217
217
  return NULL;
218
218
  }
219
219
 
220
+ int X509_STORE_up_ref(X509_STORE *store)
221
+ {
222
+ CRYPTO_refcount_inc(&store->references);
223
+ return 1;
224
+ }
225
+
220
226
  static void cleanup(X509_OBJECT *a)
221
227
  {
222
228
  if (a == NULL) {
@@ -296,26 +302,20 @@ int X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name,
296
302
  X509_STORE *ctx = vs->ctx;
297
303
  X509_LOOKUP *lu;
298
304
  X509_OBJECT stmp, *tmp;
299
- int i, j;
305
+ int i;
300
306
 
301
307
  CRYPTO_MUTEX_lock_write(&ctx->objs_lock);
302
308
  tmp = X509_OBJECT_retrieve_by_subject(ctx->objs, type, name);
303
- CRYPTO_MUTEX_unlock(&ctx->objs_lock);
309
+ CRYPTO_MUTEX_unlock_write(&ctx->objs_lock);
304
310
 
305
311
  if (tmp == NULL || type == X509_LU_CRL) {
306
- for (i = vs->current_method;
307
- i < (int)sk_X509_LOOKUP_num(ctx->get_cert_methods); i++) {
312
+ for (i = 0; i < (int)sk_X509_LOOKUP_num(ctx->get_cert_methods); i++) {
308
313
  lu = sk_X509_LOOKUP_value(ctx->get_cert_methods, i);
309
- j = X509_LOOKUP_by_subject(lu, type, name, &stmp);
310
- if (j < 0) {
311
- vs->current_method = j;
312
- return j;
313
- } else if (j) {
314
+ if (X509_LOOKUP_by_subject(lu, type, name, &stmp)) {
314
315
  tmp = &stmp;
315
316
  break;
316
317
  }
317
318
  }
318
- vs->current_method = 0;
319
319
  if (tmp == NULL)
320
320
  return 0;
321
321
  }
@@ -359,7 +359,7 @@ int X509_STORE_add_cert(X509_STORE *ctx, X509 *x)
359
359
  } else
360
360
  sk_X509_OBJECT_push(ctx->objs, obj);
361
361
 
362
- CRYPTO_MUTEX_unlock(&ctx->objs_lock);
362
+ CRYPTO_MUTEX_unlock_write(&ctx->objs_lock);
363
363
 
364
364
  return ret;
365
365
  }
@@ -391,12 +391,12 @@ int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x)
391
391
  } else
392
392
  sk_X509_OBJECT_push(ctx->objs, obj);
393
393
 
394
- CRYPTO_MUTEX_unlock(&ctx->objs_lock);
394
+ CRYPTO_MUTEX_unlock_write(&ctx->objs_lock);
395
395
 
396
396
  return ret;
397
397
  }
398
398
 
399
- void X509_OBJECT_up_ref_count(X509_OBJECT *a)
399
+ int X509_OBJECT_up_ref_count(X509_OBJECT *a)
400
400
  {
401
401
  switch (a->type) {
402
402
  case X509_LU_X509:
@@ -406,6 +406,7 @@ void X509_OBJECT_up_ref_count(X509_OBJECT *a)
406
406
  X509_CRL_up_ref(a->data.crl);
407
407
  break;
408
408
  }
409
+ return 1;
409
410
  }
410
411
 
411
412
  void X509_OBJECT_free_contents(X509_OBJECT *a)
@@ -499,7 +500,7 @@ STACK_OF (X509) * X509_STORE_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm)
499
500
  * cache
500
501
  */
501
502
  X509_OBJECT xobj;
502
- CRYPTO_MUTEX_unlock(&ctx->ctx->objs_lock);
503
+ CRYPTO_MUTEX_unlock_write(&ctx->ctx->objs_lock);
503
504
  if (!X509_STORE_get_by_subject(ctx, X509_LU_X509, nm, &xobj)) {
504
505
  sk_X509_free(sk);
505
506
  return NULL;
@@ -508,7 +509,7 @@ STACK_OF (X509) * X509_STORE_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm)
508
509
  CRYPTO_MUTEX_lock_write(&ctx->ctx->objs_lock);
509
510
  idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_X509, nm, &cnt);
510
511
  if (idx < 0) {
511
- CRYPTO_MUTEX_unlock(&ctx->ctx->objs_lock);
512
+ CRYPTO_MUTEX_unlock_write(&ctx->ctx->objs_lock);
512
513
  sk_X509_free(sk);
513
514
  return NULL;
514
515
  }
@@ -516,14 +517,14 @@ STACK_OF (X509) * X509_STORE_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm)
516
517
  for (i = 0; i < cnt; i++, idx++) {
517
518
  obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx);
518
519
  x = obj->data.x509;
519
- if (!sk_X509_push(sk, X509_up_ref(x))) {
520
- CRYPTO_MUTEX_unlock(&ctx->ctx->objs_lock);
521
- X509_free(x);
520
+ if (!sk_X509_push(sk, x)) {
521
+ CRYPTO_MUTEX_unlock_write(&ctx->ctx->objs_lock);
522
522
  sk_X509_pop_free(sk, X509_free);
523
523
  return NULL;
524
524
  }
525
+ X509_up_ref(x);
525
526
  }
526
- CRYPTO_MUTEX_unlock(&ctx->ctx->objs_lock);
527
+ CRYPTO_MUTEX_unlock_write(&ctx->ctx->objs_lock);
527
528
  return sk;
528
529
 
529
530
  }
@@ -547,7 +548,7 @@ STACK_OF (X509_CRL) * X509_STORE_get1_crls(X509_STORE_CTX *ctx, X509_NAME *nm)
547
548
  CRYPTO_MUTEX_lock_write(&ctx->ctx->objs_lock);
548
549
  idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_CRL, nm, &cnt);
549
550
  if (idx < 0) {
550
- CRYPTO_MUTEX_unlock(&ctx->ctx->objs_lock);
551
+ CRYPTO_MUTEX_unlock_write(&ctx->ctx->objs_lock);
551
552
  sk_X509_CRL_free(sk);
552
553
  return NULL;
553
554
  }
@@ -557,13 +558,13 @@ STACK_OF (X509_CRL) * X509_STORE_get1_crls(X509_STORE_CTX *ctx, X509_NAME *nm)
557
558
  x = obj->data.crl;
558
559
  X509_CRL_up_ref(x);
559
560
  if (!sk_X509_CRL_push(sk, x)) {
560
- CRYPTO_MUTEX_unlock(&ctx->ctx->objs_lock);
561
+ CRYPTO_MUTEX_unlock_write(&ctx->ctx->objs_lock);
561
562
  X509_CRL_free(x);
562
563
  sk_X509_CRL_pop_free(sk, X509_CRL_free);
563
564
  return NULL;
564
565
  }
565
566
  }
566
- CRYPTO_MUTEX_unlock(&ctx->ctx->objs_lock);
567
+ CRYPTO_MUTEX_unlock_write(&ctx->ctx->objs_lock);
567
568
  return sk;
568
569
  }
569
570
 
@@ -606,22 +607,11 @@ int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x)
606
607
  {
607
608
  X509_NAME *xn;
608
609
  X509_OBJECT obj, *pobj;
609
- int ok, idx, ret;
610
+ int idx, ret;
610
611
  size_t i;
611
612
  xn = X509_get_issuer_name(x);
612
- ok = X509_STORE_get_by_subject(ctx, X509_LU_X509, xn, &obj);
613
- if (ok != X509_LU_X509) {
614
- if (ok == X509_LU_RETRY) {
615
- X509_OBJECT_free_contents(&obj);
616
- OPENSSL_PUT_ERROR(X509, X509_R_SHOULD_RETRY);
617
- return -1;
618
- } else if (ok != X509_LU_FAIL) {
619
- X509_OBJECT_free_contents(&obj);
620
- /* not good :-(, break anyway */
621
- return -1;
622
- }
613
+ if (!X509_STORE_get_by_subject(ctx, X509_LU_X509, xn, &obj))
623
614
  return 0;
624
- }
625
615
  /* If certificate matches all OK */
626
616
  if (ctx->check_issued(ctx, x, obj.data.x509)) {
627
617
  *issuer = obj.data.x509;
@@ -651,7 +641,7 @@ int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x)
651
641
  }
652
642
  }
653
643
  }
654
- CRYPTO_MUTEX_unlock(&ctx->ctx->objs_lock);
644
+ CRYPTO_MUTEX_unlock_write(&ctx->ctx->objs_lock);
655
645
  return ret;
656
646
  }
657
647
 
@@ -64,6 +64,13 @@
64
64
  #include <openssl/obj.h>
65
65
  #include <openssl/x509.h>
66
66
 
67
+ /*
68
+ * Limit to ensure we don't overflow: much greater than
69
+ * anything enountered in practice.
70
+ */
71
+
72
+ #define NAME_ONELINE_MAX (1024 * 1024)
73
+
67
74
  char *X509_NAME_oneline(X509_NAME *a, char *buf, int len)
68
75
  {
69
76
  X509_NAME_ENTRY *ne;
@@ -84,6 +91,8 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len)
84
91
  goto err;
85
92
  b->data[0] = '\0';
86
93
  len = 200;
94
+ } else if (len <= 0) {
95
+ return NULL;
87
96
  }
88
97
  if (a == NULL) {
89
98
  if (b) {
@@ -108,6 +117,10 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len)
108
117
 
109
118
  type = ne->value->type;
110
119
  num = ne->value->length;
120
+ if (num > NAME_ONELINE_MAX) {
121
+ OPENSSL_PUT_ERROR(X509, X509_R_NAME_TOO_LONG);
122
+ goto end;
123
+ }
111
124
  q = ne->value->data;
112
125
 
113
126
  if ((type == V_ASN1_GENERALSTRING) && ((num % 4) == 0)) {
@@ -135,6 +148,10 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len)
135
148
 
136
149
  lold = l;
137
150
  l += 1 + l1 + 1 + l2;
151
+ if (l > NAME_ONELINE_MAX) {
152
+ OPENSSL_PUT_ERROR(X509, X509_R_NAME_TOO_LONG);
153
+ goto end;
154
+ }
138
155
  if (b != NULL) {
139
156
  if (!BUF_MEM_grow(b, l + 1))
140
157
  goto err;
@@ -174,7 +191,7 @@ char *X509_NAME_oneline(X509_NAME *a, char *buf, int len)
174
191
  return (p);
175
192
  err:
176
193
  OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
177
- if (b != NULL)
178
- BUF_MEM_free(b);
194
+ end:
195
+ BUF_MEM_free(b);
179
196
  return (NULL);
180
197
  }
@@ -68,10 +68,12 @@ X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey)
68
68
  X509 *ret = NULL;
69
69
  X509_CINF *xi = NULL;
70
70
  X509_NAME *xn;
71
+ EVP_PKEY *pubkey = NULL;
72
+ int res;
71
73
 
72
74
  if ((ret = X509_new()) == NULL) {
73
75
  OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
74
- goto err;
76
+ return NULL;
75
77
  }
76
78
 
77
79
  /* duplicate the request */
@@ -89,9 +91,9 @@ X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey)
89
91
  }
90
92
 
91
93
  xn = X509_REQ_get_subject_name(r);
92
- if (X509_set_subject_name(ret, X509_NAME_dup(xn)) == 0)
94
+ if (X509_set_subject_name(ret, xn) == 0)
93
95
  goto err;
94
- if (X509_set_issuer_name(ret, X509_NAME_dup(xn)) == 0)
96
+ if (X509_set_issuer_name(ret, xn) == 0)
95
97
  goto err;
96
98
 
97
99
  if (X509_gmtime_adj(xi->validity->notBefore, 0) == NULL)
@@ -100,9 +102,11 @@ X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey)
100
102
  NULL)
101
103
  goto err;
102
104
 
103
- X509_set_pubkey(ret, X509_REQ_get_pubkey(r));
105
+ pubkey = X509_REQ_get_pubkey(r);
106
+ res = X509_set_pubkey(ret, pubkey);
107
+ EVP_PKEY_free(pubkey);
104
108
 
105
- if (!X509_sign(ret, pkey, EVP_md5()))
109
+ if (!res || !X509_sign(ret, pkey, EVP_md5()))
106
110
  goto err;
107
111
  if (0) {
108
112
  err:
@@ -147,3 +147,8 @@ int X509_set_pubkey(X509 *x, EVP_PKEY *pkey)
147
147
  return (0);
148
148
  return (X509_PUBKEY_set(&(x->cert_info->key), pkey));
149
149
  }
150
+
151
+ STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x)
152
+ {
153
+ return x->cert_info->extensions;
154
+ }
@@ -199,6 +199,11 @@ const char *X509_verify_cert_error_string(long n)
199
199
  case X509_V_ERR_IP_ADDRESS_MISMATCH:
200
200
  return ("IP address mismatch");
201
201
 
202
+ case X509_V_ERR_INVALID_CALL:
203
+ return ("Invalid certificate verification context");
204
+ case X509_V_ERR_STORE_LOOKUP:
205
+ return ("Issuer certificate lookup error");
206
+
202
207
  default:
203
208
  BIO_snprintf(buf, sizeof buf, "error number %ld", n);
204
209
  return (buf);
@@ -193,11 +193,12 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
193
193
  int bad_chain = 0;
194
194
  X509_VERIFY_PARAM *param = ctx->param;
195
195
  int depth, i, ok = 0;
196
- int num, j, retry;
196
+ int num, j, retry, trust;
197
197
  int (*cb) (int xok, X509_STORE_CTX *xctx);
198
198
  STACK_OF(X509) *sktmp = NULL;
199
199
  if (ctx->cert == NULL) {
200
200
  OPENSSL_PUT_ERROR(X509, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY);
201
+ ctx->error = X509_V_ERR_INVALID_CALL;
201
202
  return -1;
202
203
  }
203
204
  if (ctx->chain != NULL) {
@@ -206,6 +207,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
206
207
  * cannot do another one.
207
208
  */
208
209
  OPENSSL_PUT_ERROR(X509, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
210
+ ctx->error = X509_V_ERR_INVALID_CALL;
209
211
  return -1;
210
212
  }
211
213
 
@@ -218,6 +220,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
218
220
  ctx->chain = sk_X509_new_null();
219
221
  if (ctx->chain == NULL || !sk_X509_push(ctx->chain, ctx->cert)) {
220
222
  OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
223
+ ctx->error = X509_V_ERR_OUT_OF_MEM;
221
224
  goto end;
222
225
  }
223
226
  X509_up_ref(ctx->cert);
@@ -227,6 +230,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
227
230
  if (ctx->untrusted != NULL
228
231
  && (sktmp = sk_X509_dup(ctx->untrusted)) == NULL) {
229
232
  OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
233
+ ctx->error = X509_V_ERR_OUT_OF_MEM;
230
234
  goto end;
231
235
  }
232
236
 
@@ -250,8 +254,10 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
250
254
  */
251
255
  if (ctx->param->flags & X509_V_FLAG_TRUSTED_FIRST) {
252
256
  ok = ctx->get_issuer(&xtmp, ctx, x);
253
- if (ok < 0)
257
+ if (ok < 0) {
258
+ ctx->error = X509_V_ERR_STORE_LOOKUP;
254
259
  goto end;
260
+ }
255
261
  /*
256
262
  * If successful for now free up cert so it will be picked up
257
263
  * again later.
@@ -268,6 +274,8 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
268
274
  if (xtmp != NULL) {
269
275
  if (!sk_X509_push(ctx->chain, xtmp)) {
270
276
  OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
277
+ ctx->error = X509_V_ERR_OUT_OF_MEM;
278
+ ok = 0;
271
279
  goto end;
272
280
  }
273
281
  X509_up_ref(xtmp);
@@ -348,14 +356,17 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
348
356
  break;
349
357
  ok = ctx->get_issuer(&xtmp, ctx, x);
350
358
 
351
- if (ok < 0)
359
+ if (ok < 0) {
360
+ ctx->error = X509_V_ERR_STORE_LOOKUP;
352
361
  goto end;
362
+ }
353
363
  if (ok == 0)
354
364
  break;
355
365
  x = xtmp;
356
366
  if (!sk_X509_push(ctx->chain, x)) {
357
367
  X509_free(xtmp);
358
368
  OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
369
+ ctx->error = X509_V_ERR_OUT_OF_MEM;
359
370
  ok = 0;
360
371
  goto end;
361
372
  }
@@ -363,11 +374,13 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
363
374
  }
364
375
 
365
376
  /* we now have our chain, lets check it... */
366
- i = check_trust(ctx);
377
+ trust = check_trust(ctx);
367
378
 
368
379
  /* If explicitly rejected error */
369
- if (i == X509_TRUST_REJECTED)
380
+ if (trust == X509_TRUST_REJECTED) {
381
+ ok = 0;
370
382
  goto end;
383
+ }
371
384
  /*
372
385
  * If it's not explicitly trusted then check if there is an alternative
373
386
  * chain that could be used. We only do this if we haven't already
@@ -375,7 +388,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
375
388
  * chain checking
376
389
  */
377
390
  retry = 0;
378
- if (i != X509_TRUST_TRUSTED
391
+ if (trust != X509_TRUST_TRUSTED
379
392
  && !(ctx->param->flags & X509_V_FLAG_TRUSTED_FIRST)
380
393
  && !(ctx->param->flags & X509_V_FLAG_NO_ALT_CHAINS)) {
381
394
  while (j-- > 1) {
@@ -412,7 +425,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
412
425
  * self signed certificate in which case we've indicated an error already
413
426
  * and set bad_chain == 1
414
427
  */
415
- if (i != X509_TRUST_TRUSTED && !bad_chain) {
428
+ if (trust != X509_TRUST_TRUSTED && !bad_chain) {
416
429
  if ((chain_ss == NULL) || !ctx->check_issued(ctx, x, chain_ss)) {
417
430
  if (ctx->last_untrusted >= num)
418
431
  ctx->error = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
@@ -463,10 +476,10 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
463
476
  if (!ok)
464
477
  goto end;
465
478
 
466
- i = X509_chain_check_suiteb(&ctx->error_depth, NULL, ctx->chain,
467
- ctx->param->flags);
468
- if (i != X509_V_OK) {
469
- ctx->error = i;
479
+ int err = X509_chain_check_suiteb(&ctx->error_depth, NULL, ctx->chain,
480
+ ctx->param->flags);
481
+ if (err != X509_V_OK) {
482
+ ctx->error = err;
470
483
  ctx->current_cert = sk_X509_value(ctx->chain, ctx->error_depth);
471
484
  ok = cb(0, ctx);
472
485
  if (!ok)
@@ -490,6 +503,10 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
490
503
  sk_X509_free(sktmp);
491
504
  if (chain_ss != NULL)
492
505
  X509_free(chain_ss);
506
+
507
+ /* Safety net, error returns must set ctx->error */
508
+ if (ok <= 0 && ctx->error == X509_V_OK)
509
+ ctx->error = X509_V_ERR_UNSPECIFIED;
493
510
  return ok;
494
511
  }
495
512
 
@@ -571,12 +588,6 @@ static int check_chain_extensions(X509_STORE_CTX *ctx)
571
588
  } else {
572
589
  allow_proxy_certs =
573
590
  ! !(ctx->param->flags & X509_V_FLAG_ALLOW_PROXY_CERTS);
574
- /*
575
- * A hack to keep people who don't want to modify their software
576
- * happy
577
- */
578
- if (getenv("OPENSSL_ALLOW_PROXY_CERTS"))
579
- allow_proxy_certs = 1;
580
591
  purpose = ctx->param->purpose;
581
592
  }
582
593
 
@@ -706,12 +717,19 @@ static int check_name_constraints(X509_STORE_CTX *ctx)
706
717
  NAME_CONSTRAINTS *nc = sk_X509_value(ctx->chain, j)->nc;
707
718
  if (nc) {
708
719
  rv = NAME_CONSTRAINTS_check(x, nc);
709
- if (rv != X509_V_OK) {
720
+ switch (rv) {
721
+ case X509_V_OK:
722
+ continue;
723
+ case X509_V_ERR_OUT_OF_MEM:
724
+ ctx->error = rv;
725
+ return 0;
726
+ default:
710
727
  ctx->error = rv;
711
728
  ctx->error_depth = i;
712
729
  ctx->current_cert = x;
713
730
  if (!ctx->verify_cb(0, ctx))
714
731
  return 0;
732
+ break;
715
733
  }
716
734
  }
717
735
  }
@@ -841,11 +859,10 @@ static int check_revocation(X509_STORE_CTX *ctx)
841
859
  }
842
860
 
843
861
  static int check_cert(X509_STORE_CTX *ctx)
844
- OPENSSL_SUPPRESS_POTENTIALLY_UNINITIALIZED_WARNINGS
845
862
  {
846
863
  X509_CRL *crl = NULL, *dcrl = NULL;
847
864
  X509 *x;
848
- int ok, cnum;
865
+ int ok = 0, cnum;
849
866
  unsigned int last_reasons;
850
867
  cnum = ctx->error_depth;
851
868
  x = sk_X509_value(ctx->chain, cnum);
@@ -984,13 +1001,25 @@ static int get_crl_sk(X509_STORE_CTX *ctx, X509_CRL **pcrl, X509_CRL **pdcrl,
984
1001
  crl = sk_X509_CRL_value(crls, i);
985
1002
  reasons = *preasons;
986
1003
  crl_score = get_crl_score(ctx, &crl_issuer, &reasons, crl, x);
987
-
988
- if (crl_score > best_score) {
989
- best_crl = crl;
990
- best_crl_issuer = crl_issuer;
991
- best_score = crl_score;
992
- best_reasons = reasons;
1004
+ if (crl_score < best_score || crl_score == 0)
1005
+ continue;
1006
+ /* If current CRL is equivalent use it if it is newer */
1007
+ if (crl_score == best_score && best_crl != NULL) {
1008
+ int day, sec;
1009
+ if (ASN1_TIME_diff(&day, &sec, X509_CRL_get_lastUpdate(best_crl),
1010
+ X509_CRL_get_lastUpdate(crl)) == 0)
1011
+ continue;
1012
+ /*
1013
+ * ASN1_TIME_diff never returns inconsistent signs for |day|
1014
+ * and |sec|.
1015
+ */
1016
+ if (day <= 0 && sec <= 0)
1017
+ continue;
993
1018
  }
1019
+ best_crl = crl;
1020
+ best_crl_issuer = crl_issuer;
1021
+ best_score = crl_score;
1022
+ best_reasons = reasons;
994
1023
  }
995
1024
 
996
1025
  if (best_crl) {
@@ -1603,6 +1632,7 @@ static int check_policy(X509_STORE_CTX *ctx)
1603
1632
  ctx->param->policies, ctx->param->flags);
1604
1633
  if (ret == 0) {
1605
1634
  OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
1635
+ ctx->error = X509_V_ERR_OUT_OF_MEM;
1606
1636
  return 0;
1607
1637
  }
1608
1638
  /* Invalid or inconsistent extensions */
@@ -1631,7 +1661,12 @@ static int check_policy(X509_STORE_CTX *ctx)
1631
1661
 
1632
1662
  if (ctx->param->flags & X509_V_FLAG_NOTIFY_POLICY) {
1633
1663
  ctx->current_cert = NULL;
1634
- ctx->error = X509_V_OK;
1664
+ /*
1665
+ * Verification errors need to be "sticky", a callback may have allowed
1666
+ * an SSL handshake to continue despite an error, and we must then
1667
+ * remain in an error state. Therefore, we MUST NOT clear earlier
1668
+ * verification errors by setting the error to X509_V_OK.
1669
+ */
1635
1670
  if (!ctx->verify_cb(2, ctx))
1636
1671
  return 0;
1637
1672
  }
@@ -1724,9 +1759,7 @@ static int internal_verify(X509_STORE_CTX *ctx)
1724
1759
  * explicitly asked for. It doesn't add any security and just wastes
1725
1760
  * time.
1726
1761
  */
1727
- if (!xs->valid
1728
- && (xs != xi
1729
- || (ctx->param->flags & X509_V_FLAG_CHECK_SS_SIGNATURE))) {
1762
+ if (xs != xi || (ctx->param->flags & X509_V_FLAG_CHECK_SS_SIGNATURE)) {
1730
1763
  if ((pkey = X509_get_pubkey(xi)) == NULL) {
1731
1764
  ctx->error = X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY;
1732
1765
  ctx->current_cert = xi;
@@ -1746,8 +1779,6 @@ static int internal_verify(X509_STORE_CTX *ctx)
1746
1779
  pkey = NULL;
1747
1780
  }
1748
1781
 
1749
- xs->valid = 1;
1750
-
1751
1782
  check_cert:
1752
1783
  ok = check_cert_time(ctx, xs);
1753
1784
  if (!ok)